I finished up some changes a few hours ago, however I'm trying to get something out of the (virtual) door in another project, so I won't be able to commit till tomorrow.
 
I've added "if" and "unless" attributes to <define> and <undefine> which appear in <defineset>.  I haven't done it yet, but I expect to do the same for <compilerarg>.
 
WindowsNamingScheme was case-sensitive, it would not recognize a *.LIB as a library file.  I rewrote AbstractNamingSchema in terms of  virtual endsWith and startsWith functions that WindowsNamingScheme overloads with case-insensitive implementations.
 
When <FileSet> appears as a child of <LibrarySet>, the dir attribute is optional (unlike other usages of FileSet).  When omitted, the patterns are checked against all directories appearing in the library path environment variable (compiler specific, currently only implemented for MSVC which uses the LIB environment variable), all matching filenames are added and duplicate filenames are discarded.  This allows constructs like:
 
<LibrarySet>
    <FileSet>
        <Include name="ADVAPI32.LIB" if="windows"/>
        <Include name="KERNEL32.LIB" if="windows"/>
    </FileSet>
</LibrarySet>
 
The compile task appears to be creating a process for each source file compiled.  I believe may result in a pretty substantial performance hit compared to compiling multiple files per process creation.  Or at least that used to be the case.
 
I've gotten further in my Xerces-C compile.  With these fixes, I can build xerces-c.dll on Windows using MSVC and will expand the build to GCC (Cygwin and Linux) and BCC before looking at performance issues