files for the Bakefile generator for Makefiles from Francesco Montorsi

* bakefile/Readme.txt bakefile/Bakefiles.bkgen bakefile/libxml2.bkl:
  files for the Bakefile generator for Makefiles from Francesco
  Montorsi
* win32/configure.js: fixes for Windows compilation with non-default
  flags by Joel Reed
Daniel
diff --git a/ChangeLog b/ChangeLog
index 0934fc8..368bac5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Fri Jan 28 00:57:04 CET 2005 Daniel Veillard <daniel@veillard.com>
+
+	* bakefile/Readme.txt bakefile/Bakefiles.bkgen bakefile/libxml2.bkl:
+	  files for the Bakefile generator for Makefiles from Francesco
+	  Montorsi
+	* win32/configure.js: fixes for Windows compilation with non-default
+	  flags by Joel Reed
+
 Thu Jan 27 18:23:50 CET 2005 Daniel Veillard <daniel@veillard.com>
 
 	* tree.c: fixed xmlCopyDoc to also copy the doc->URL as pointed
diff --git a/bakefile/Bakefiles.bkgen b/bakefile/Bakefiles.bkgen
new file mode 100644
index 0000000..8342de3
--- /dev/null
+++ b/bakefile/Bakefiles.bkgen
@@ -0,0 +1,15 @@
+<?xml version="1.0" ?>

+<!-- $Id$ -->

+

+<bakefile-gen>

+    

+    <disable-formats>gnu,dmars,cbx_unix,cbuilderx</disable-formats>

+    <input>libxml2.bkl</input>

+

+    <!-- List of output formats to generate: -->

+    <add-formats>

+        borland,dmars,mingw,msvc,msvc6prj,watcom,cbuilderx,cbx_unix,gnu

+    </add-formats>

+

+

+</bakefile-gen>
\ No newline at end of file
diff --git a/bakefile/Readme.txt b/bakefile/Readme.txt
new file mode 100644
index 0000000..98a9ca8
--- /dev/null
+++ b/bakefile/Readme.txt
@@ -0,0 +1,92 @@
+

+ LIBXML2 build system for Win32 README

+ -------------------------------------

+

+ In this folder are stored all the files required to compile LIBXML2 with win32 compilers.

+ Bakefile (http://bakefile.sourceforge.net) is used as makefile generator.

+

+ Supported makefiles:

+ - makefile.vc     for Microsoft NMAKE

+ - makefile.bcc    for Borland MAKE

+ - makefile.wat    for OpenWatcom MAKE

+ - makefile.gcc    for MinGW MINGW32-MAKE

+ - all DSP & DSW   for Microsoft VisualC++ 6.0 (can be used also with VS.NET AFAIK)

+

+ This readme is organized as:

+   1.0 HOWTO compile LIBXML2 using makefiles     <-- for users who want to build the library using *command-line*

+   1.1 HOWTO compile LIBXML2 using an IDE        <-- for users who want to build the library using an *IDE*

+   1.2 HOWTO regenerate makefiles for LIBXML2    <-- for libxml2 mantainers/developers/advanced users

+

+ If you just want to compile the library (and the test programs) you should definitely avoid the

+ section 1.1 and focus on the 1.0.

+ 

+

+

+

+

+

+ 1.0 HOWTO compile LIBXML2 using makefiles

+ -----------------------------------------

+ 

+ Choose your preferred compiler among those actually supported (see above) and then run

+ 

+                              mycompilermake -fmakefile.makefileext [options]

+

+ for a full list of the available options you should open with a notepad (or something like that)

+ the makefile you want to use; at the beginning you should see a section which starts as:

+

+     # -------------------------------------------------------------------------

+     # These are configurable options:

+     # -------------------------------------------------------------------------

+

+ here you can find all the options actually used by that makefile. 

+ They can be customized when running the makefile writing something like:

+

+ nmake -fmakefile.vc BUILD=release

+ mingw32-make -fmakefile.gcc BUILD=debug ICONV_DIR=c:\myiconv

+

+ or they can be permanently changed modifying the makefile.

+ That's all: for any problem/compile-error/suggestion, write to 

+ frm@users.sourceforge.net with the word "libxml2" in the subject.

+

+

+

+

+

+ 1.1 HOWTO compile LIBXML2 using an IDE

+ --------------------------------------

+ 

+ Actually only the Microsoft VisualC++ 6.0 project files are generated.

+ In future other Integrated Development Environments (IDEs) will be supported as well.

+ 

+ With MSVC++ 6.0, you should open the DSW file and then set as the active project the

+ "libxml2" project, if you want to build the library or one of the test projects if you

+ want to run them.

+ Using the command "Build->Set Active Configuration" you can choose one of the predefined

+ configuration.

+

+

+

+

+

+ 1.2 HOWTO regenerate makefiles for LIBXML2

+ ------------------------------------------

+ 

+ Be sure to have installed Bakefile (http://bakefile.sourceforge.net).

+ Just run the "bakefile_gen" command inside the folder containing the "libxml2.bkl" file.

+ NOTE: if you want to remove all the makefiles, you can use the "bakefile_gen -c" command.

+ 

+ The template files used to generate all makefiles are only two:

+ - libxml2.bkl      (the main one)

+ - Bakefiles.bkgen

+ All the other files can be dinamically regenerated.

+

+

+

+

+

+ If you have problems with the compilation of LIBXML2 under windows (using one of the supported compiler)

+ please write to:

+

+     Francesco Montorsi <frm@users.sourceforge.net>

+

diff --git a/bakefile/libxml2.bkl b/bakefile/libxml2.bkl
new file mode 100644
index 0000000..8efe472
--- /dev/null
+++ b/bakefile/libxml2.bkl
@@ -0,0 +1,749 @@
+<?xml version="1.0" ?>

+

+<!-- Author: Francesco Montorsi <frm@users.sourceforge.net>         -->

+<!-- Date: 30/8/2004                                                -->

+<!-- Last revision: 26/1/2005                                       -->

+

+

+<!--                    LIBXML2 BAKEFILE                            -->

+<!--                                                                -->

+<!--    The bakefile used to build the library and the test         -->

+<!--    programs. The makefiles output is put:                      -->

+<!--                                                                -->

+<!--    - in the ..\LIB folder                                      -->

+<!--    - in the ..\BIN folder                                      -->

+<!--                                                                -->

+

+<makefile>

+

+    <using module="datafiles"/>

+    <requires version="0.1.5"/>

+    

+

+    <!-- This is a bakefile, that is, a generic template used to    -->

+    <!-- generate makefiles ALL supported compilers.                -->

+    <!-- To use this project file you need Bakefile installed.      -->

+    <!-- With the command "bakefile_gen" you can regen all the      -->

+    <!-- makefiles and project files.                               -->

+    <!-- See http://bakefile.sourceforge.net for more info.         -->

+

+

+	<!--

+	 This file is divided in:

+		- generic options

+		- generic variables

+		- libxml2 options

+		- libxml2 variables

+		- about config.h creation

+		- templates

+		- libxml2 library target

+		- libxml2 test program targets

+	-->

+

+

+

+    <!--                                                            -->

+    <!--                      GENERIC OPTIONS                       -->

+    <!--                                                            -->

+

+     

+    <!--    This is a standard option that determines               -->

+    <!--    whether the user wants to build this library as         -->

+    <!--    a dll or as a static library.                           -->

+    <option name="SHARED">

+        <values>0,1</values>

+        <values-description>,DLL</values-description>

+        <default-value>0</default-value>

+        <description>If set to zero a STATIC libxml library will be built</description>

+    </option>

+

+    <!-- Configuration for building the bakefile with               -->

+    <!-- unicode strings or not (unicode or ansi).                  -->

+    <option name="UNICODE">

+        <values>0,1</values>

+        <values-description>,Unicode</values-description>

+        <default-value>0</default-value>        

+        <description>Compile Unicode build?</description>

+    </option>

+

+

+    <!-- There are several options that deal with build             -->

+    <!-- types. First, there's this one, BUILD.                     -->

+    <!--                                                            -->

+    <!-- BUILD determines whether or not we want to build           -->

+    <!-- in release or debug mode.  Note that in practice           -->

+    <!-- this means modifying the optimize tag, which by            -->

+    <!-- default is set to off.  In this case debug means           -->

+    <!-- off (no optimizations), and release means speed            -->

+    <!-- (fast with inlining).  There is also a size option         -->

+    <!-- that is not addressed in this example bakefile.            -->

+    <option name="BUILD">

+        <values>debug,release</values>

+        <values-description>Debug,Release</values-description>

+        <default-value>release</default-value>

+        <description>

+            Type of compiled binaries

+        </description>

+    </option>

+

+

+

+    <!--                                                            -->

+    <!--                    GENERIC VARIABLES                       -->

+    <!--                                                            -->

+

+    <!--    Set the ISDLL variable, so that we can use it           -->

+    <!--    inside an if statement later on (options not            -->

+    <!--    allowed in if statements).                              -->

+    <set var="ISDLL" cond="SHARED=='1'">1</set>

+    <set var="ISDLL" cond="SHARED=='0'">0</set>

+

+    <!--    The unicode define we want.  By default bakefile        -->

+    <!--    makes variables an empty string, so if unicode          -->

+    <!--    is not defined $(UNICODE_DEFINE) would expand           -->

+    <!--    to nothing (literally).                                 -->

+    <set var="UNICODE_DEFINE">

+        <if cond="FORMAT!='autoconf' and UNICODE=='1'">_UNICODE</if>

+    </set>    

+    

+    <!--    The debug define we need with win32 compilers           -->    

+    <!--    (on Linux, the wx-config program is used).              -->    

+    <set var="DEBUG_DEFINE">        

+        <if cond="FORMAT!='autoconf' and BUILD=='debug'">

+            __WXDEBUG__

+        </if>    

+    </set>

+

+    <!--    Value we will use later on for the debug-info           -->

+    <!--    tag inside our templates.                               -->

+    <set var="DEBUGINFO">

+        <if cond="BUILD=='debug'">on</if>

+        <if cond="BUILD=='release'">off</if>

+    </set>

+

+    <!--    Value we will use later on for the debug-runtime        -->

+    <!--    tag inside our templates.                               -->

+    <set var="DEBUGRUNTIME">

+        <if cond="BUILD=='debug'">on</if>

+        <if cond="BUILD=='release'">off</if>

+    </set>

+

+    <!--    Value for optimize tag.                                 -->

+    <set var="OPTIMIZEFLAG">

+        <if cond="BUILD=='debug'">off</if>

+        <if cond="BUILD=='release'">speed</if>

+    </set>

+

+    <!-- Level of warnings.  Here we max it out in debug            -->

+    <!-- mode, and turn them off in release mode.                   -->

+    <set var="WARNINGS">

+        <if cond="BUILD=='debug'">max</if>

+        <if cond="BUILD=='release'">no</if>

+    </set>

+

+    <!-- Set MYCPPFLAGS as empty; maybe it will be filled later...  -->

+    <set var="MYCPPFLAGS"></set>

+    <if cond="FORMAT=='mingw' or FORMAT=='autoconf'">

+

+        <!-- With GCC, settings warnings to MAX would force         -->

+        <!-- Bakefile to call GCC with "-W -Wall" which generates   -->

+        <!-- a *lot* of warnings about wxWidgets headers...         -->

+        <!-- this is why "-W -Wall" is here replaced by "-Wall".    -->

+        <set var="WARNINGS">default</set>

+        <set var="MYCPPFLAGS">-Wall</set>

+    </if>

+    

+    

+    

+  

+

+

+    <!--                                                            -->

+    <!--                      LIBXML2 OPTIONS                       -->

+    <!--                                                            -->

+    <!-- Note #1: not all of them are used by win32 makefiles       -->

+	<!--                                                            -->

+	<!-- Note #2: since all combinations of non-path options are    -->

+	<!--          translated into different 'configurations' by     -->

+	<!--          Bakefile when using the MSVC6PRJ output, we must  -->

+	<!--          avoid to create a 10 MB libxml2.dsp file forcing  -->

+	<!--          some options to their default values... this      -->

+	<!--          behaviour can be overridden by the                -->

+	<!--                        FULL_OPTIONS_SUPPORT                -->

+	<!--          variable defined below...                         -->

+    

+	<set var="FULL_OPTIONS_SUPPORT">

+		<if cond="FORMAT=='msvc6prj'">0</if>

+		<if cond="FORMAT!='msvc6prj'">1</if>

+	</set>

+

+    <option name="ICONV_DIR" category="path">

+        <default-value>c:\iconv</default-value>

+        <description>The iconv library main folder</description>

+    </option>

+

+    <option name="WITH_TRIO">

+    	<values>0,1</values>

+        <default-value>0</default-value>

+        <description>Enable TRIO string manipulator</description>

+    </option>

+

+	<!-- see the note #2 -->

+	<if cond="FULL_OPTIONS_SUPPORT=='0'">

+		<set var="WITH_THREADS">native</set>

+	</if>

+	<if cond="FULL_OPTIONS_SUPPORT=='1'">

+		<option name="WITH_THREADS">

+    		<values>no,ctls,native,posix</values>

+			<default-value>native</default-value>

+			<description>Enable thread safety</description>

+		</option>

+    </if>

+

+    <option name="WITH_FTP">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable FTP client</description>

+    </option>

+

+    <option name="WITH_HTTP">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable HTTP client</description>

+    </option>

+

+    <option name="WITH_C14N">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable C14N support</description>

+    </option>

+

+    <option name="WITH_CATALOG">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable catalog support</description>

+    </option>

+

+    <option name="WITH_DOCB">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable DocBook support</description>

+    </option>

+	

+    <option name="WITH_XPATH">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable XPath support</description>

+    </option>

+	

+    <option name="WITH_XPTR">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable XPointer support</description>

+    </option>

+	

+    <option name="WITH_XINCLUDE">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable XInclude support</description>

+    </option>

+	

+	<!-- see the note #2 -->

+	<if cond="FULL_OPTIONS_SUPPORT=='0'">

+		<set var="WITH_ICONV">1</set>

+	</if>

+	<if cond="FULL_OPTIONS_SUPPORT=='1'">

+		<option name="WITH_ICONV">

+    		<values>0,1</values>

+			<default-value>1</default-value>

+			<description>Enable iconv support</description>

+		</option>

+	</if>

+	

+    <option name="WITH_ISO8859X">

+    	<values>0,1</values>

+        <default-value>0</default-value>

+        <description>Enable iso8859x support</description>

+    </option>

+	

+	<!-- see the note #2 -->

+	<if cond="FULL_OPTIONS_SUPPORT=='0'">

+		<set var="WITH_ZLIB">0</set>

+	</if>

+	<if cond="FULL_OPTIONS_SUPPORT=='1'">

+		<option name="WITH_ZLIB">

+    		<values>0,1</values>

+			<default-value>0</default-value>

+			<description>Enable ZLIB support</description>

+		</option>

+	</if>

+	

+    <option name="WITH_REGEXPS">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable regular expressions</description>

+    </option>

+	

+    <option name="WITH_TREE">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable tree api</description>

+    </option>

+	

+    <option name="WITH_READER">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable xmlReader api</description>

+    </option>

+	

+    <option name="WITH_WRITER">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable xmlWriter api</description>

+    </option>

+	

+    <option name="WITH_WALKER">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable xmlDocWalker api</description>

+    </option>    

+	

+    <option name="WITH_PATTERN">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable xmlPattern api</description>

+    </option>

+	

+    <option name="WITH_PUSH">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable push api</description>

+    </option>

+	

+    <option name="WITH_VALID">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable DTD validation support</description>

+    </option>

+	

+    <option name="WITH_SAX1">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable SAX1 api</description>

+    </option>    

+                	

+    <option name="WITH_SCHEMAS">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable XML Schema support</description>

+    </option>

+	

+    <option name="WITH_LEGACY">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable deprecated APIs</description>

+    </option>    

+                	

+    <option name="WITH_OUTPUT">

+    	<values>0,1</values>

+        <default-value>1</default-value>

+        <description>Enable serialization support</description>

+    </option>					

+                	

+    <option name="WITH_PYTHON">

+    	<values>0,1</values>

+        <default-value>0</default-value>

+        <description>Build Python bindings</description>

+    </option>

+

+

+ 

+

+    <!--                                                            -->

+    <!--                    LIBXML2 VARIABLES                       -->

+    <!--                                                            -->   

+

+    <!-- Put all the objects files generated by         -->

+    <!-- the compilation in a subfolder of BUILD        -->

+    <set var="BUILDDIR">$(FORMAT)</set>

+    

+    <!-- This variable is set to 1 when the current output writer supports -->

+   	<!-- the __DEFINE_ARG variable. Otherwise it's set to zero. -->

+   	<set var="HAS_DEFINE_ARG">

+   		<if cond="FORMAT!='msvc6prj'">1</if>

+   		<if cond="FORMAT=='msvc6prj'">0</if>   		

+   	</set>

+

+	<!-- The root directory of libxml2 -->

+	<set var="XMLBASEDIR">..</set>

+	

+	<!-- The directory where libxml2' tests will be put -->

+	<set var="XMLTESTDIR">$(XMLBASEDIR)$(DIRSEP)bin</set>

+	

+	<set var="LIBXML_MAJOR_VERSION">2</set>

+	<set var="LIBXML_MINOR_VERSION">6</set>

+	<set var="LIBXML_MICRO_VERSION">16</set>

+	

+	<!-- some defines related to threads -->

+	<set var="THREADS_DEF">

+		<if cond="HAS_DEFINE_ARG=='1' and WITH_THREADS=='native'">

+			$(__DEFINE_ARG)_REENTRANT $(__DEFINE_ARG)HAVE_WIN32_THREADS

+		</if>

+		<if cond="HAS_DEFINE_ARG=='1' and WITH_THREADS=='ctls'">

+			$(__DEFINE_ARG)_REENTRANT $(__DEFINE_ARG)HAVE_WIN32_THREADS $(__DEFINE_ARG)HAVE_COMPILER_TLS

+		</if>

+		<if cond="HAS_DEFINE_ARG=='1' and WITH_THREADS=='posix'">

+			$(__DEFINE_ARG)_REENTRANT $(__DEFINE_ARG)HAVE_PTHREAD_H

+		</if>

+	</set>

+	<if cond="FORMAT=='borland'">

+		<set var="THREADS_DEF">

+			<if cond="WITH_THREADS=='native'">$(THREADS_DEF) $(__DEFINE_ARG)__MT__</if>

+			<if cond="WITH_THREADS=='ctls'">$(THREADS_DEF) $(__DEFINE_ARG)__MT__</if>

+			<if cond="WITH_THREADS=='posix'">$(THREADS_DEF) $(__DEFINE_ARG)__MT__</if>

+		</set>

+	</if>	

+	

+	

+	<!-- some other conditional defines -->

+	<set var="ZLIB_DEF"><if cond="WITH_ZLIB=='1'">HAVE_ZLIB_H</if></set>

+	<set var="DEBUG_DEF"><if cond="BUILD=='debug'">_DEBUG</if></set>

+	<set var="DEBUG_DEF"><if cond="BUILD=='release'">NDEBUG</if></set>

+	

+	<!-- this is very very important when compiling with MINGW: without this line,

+	the test programs (and all the programs built with libxml2 which use xmlFree)

+	won't build because of "undefined references to __xmlFree" -->

+	<set var="STATIC_DEF"><if cond="SHARED=='0'">LIBXML_STATIC</if></set>

+	

+	<!-- some conditional libraries dependencies -->

+	<set var="ICONV_LIB"><if cond="WITH_ICONV=='1'">iconv</if></set>

+	<set var="WSOCK32_LIB"><if cond="WITH_THREADS=='native'">wsock32</if></set>

+	<set var="ZLIB_LIB"><if cond="WITH_ZLIB=='1'">zdll</if></set>

+	<set var="POSIX_LIB"><if cond="WITH_THREADS=='posix'">pthreadVC</if></set>

+	

+	<set var="XMLINCLUDEDIR">$(XMLBASEDIR)$(DIRSEP)include$(DIRSEP)libxml$(DIRSEP)</set>

+

+  

+

+ 

+    <!--                                                            -->

+    <!--               ABOUT CONFIG.H HEADER CREATION               -->

+    <!--                                                            -->   

+    

+    <set var="CONFIG_SRCNAME">win32config.h</set>

+    <set var="CONFIG_DSTNAME">config.h</set>

+    

+	<if cond="FORMAT!='msvc6prj' and FORMAT!='autoconf' and FORMAT!='gnu'">

+		<copy-file-to-file id="setup">

+			<!-- On win32 we need to manually copy a default config.h file -->

+			<!-- from the include/mc/msw folder to include/mc			   -->

+			<src>../include/$(CONFIG_SRCNAME)</src>

+			<dst>../$(CONFIG_DSTNAME)</dst>

+			<dependency-of>all</dependency-of>

+

+			<!-- With autoconf, we will use the configure script to translate -->

+			<!-- include/mc/config.h.in to include/mc/config.h and thus we do -->

+			<!-- not need to do anything here...							  -->

+		</copy-file-to-file>

+	</if>

+    

+	<if cond="FORMAT!='msvc6prj'">

+	    

+		<mkdir id="setuplibdir"><dir>$(XMLBASEDIR)$(DIRSEP)lib</dir></mkdir>

+		<mkdir id="setupbindir"><dir>$(XMLBASEDIR)$(DIRSEP)bin</dir></mkdir>

+			

+	    <!-- Creates all output folders -->	

+	    <phony id="setupdirs">

+			<dependency-of>all</dependency-of>	    

+	    	<depends>setuplibdir</depends>

+	    	<depends>setupbindir</depends>

+	    </phony>

+	</if>

+

+    <!-- This defines a tag which includes headers on MSVC          -->

+    <!-- Note that $(value) is stuck in there by bakefile,          -->

+    <!-- and is the value between the beginning and end tag.        -->

+    <define-tag name="headers" rules="dll,lib,exe">

+        <if cond="FORMAT=='msvc6prj'">

+            <msvc-project-files>

+                $(value)

+            </msvc-project-files>

+        </if>

+    </define-tag>

+    		

+	<!-- Creates the following custom build rule for MSVC6PRJ file:

+	     copies ..\include\win32config.h into ..\config.h

+	     NOTE: this tag must be used before the <sources> tag if you want that the configuration

+	           file will be created before any other source file is compiled... -->

+    <define-tag name="msvc-copy-setup-h" rules="dll,lib,action">

+        <if cond="FORMAT=='msvc6prj'">

+	        <headers>$(XMLBASEDIR)\include\$(CONFIG_SRCNAME)</headers>

+	        <set var="__subdir">$(value)</set>

+            <set var="_custom_build_files" append="1">$(XMLBASEDIR)\include\$(CONFIG_SRCNAME)</set>

+            <set var="_custom_build____include_win32config_h">

+Creating the configuration file ..\$(CONFIG_DSTNAME) from ..\include\win32\$(CONFIG_SRCNAME)

+InputPath=..\include\$(CONFIG_SRCNAME)

+

+"..\include\$(CONFIG_SRCNAME)" : $(DOLLAR)(SOURCE) "$(DOLLAR)(INTDIR)" "$(DOLLAR)(OUTDIR)"

+$(TAB)copy "$(DOLLAR)(InputPath)" ..\$(CONFIG_DSTNAME)

+            </set>

+        </if>

+    </define-tag>

+

+ 

+

+

+

+    <!--                                                            -->

+    <!--                          TEMPLATES                         -->

+    <!--                                                            -->   

+

+	<!-- The basic template: used by all the targets -->

+    <template id="base">

+        <if cond="FORMAT=='mingw'">                    

+            <define>HAVE_W32API_H</define>

+            <ldflags>-mthreads</ldflags>

+        </if>

+

+        <cxxflags>$(MYCPPFLAGS)</cxxflags>

+        <warnings>$(WARNINGS)</warnings>

+        <define>$(UNICODE_DEFINE)</define>

+        <optimize>$(OPTIMIZEFLAG)</optimize>

+        <debug-info>$(DEBUGINFO)</debug-info>

+        <debug-runtime-libs>$(DEBUGRUNTIME)</debug-runtime-libs>

+	</template>

+	

+	<!-- The template used both by the library and by the test programs -->

+    <template id="xml2" template="base">

+    

+        <!-- -I & -L equivalents -->

+        <include>$(XMLBASEDIR)$(DIRSEP)include</include>

+        <include>$(ICONV_DIR)$(DIRSEP)include</include>

+        <lib-path>$(ICONV_DIR)$(DIRSEP)lib</lib-path>    

+        

+		<!-- some conditional define flags -->

+        <cflags>$(THREADS_DEF)</cflags>

+		<define>$(ZLIB_DEF)</define>

+		<define>$(DEBUG_DEF)</define>

+		<define>$(STATIC_DEF)</define>

+	

+		<if cond="HAS_DEFINE_ARG=='0'">

+		

+			<!-- we are probably using an IDE output: defaults to WITH_THREADS=='native' -->

+			<define>_REENTRANT</define>

+			<define>HAVE_WIN32_THREADS</define>

+		</if>

+

+		

+		<!-- these must always be defined on win32 -->

+		<define>WIN32</define>		

+		<define>_WINDOWS</define>

+		<define>_MBCS</define>

+

+		<if cond="FORMAT=='borland'">

+			<define>_NO_VCL</define>

+			<define>EILSEQ=2</define>

+		</if>

+    </template>

+    

+	<!-- The template used by libxml2 test programs -->

+	<template id="xml2test" template="xml2">

+        <dirname>$(XMLTESTDIR)</dirname>

+        <app-type>console</app-type>        

+

+        <library>libxml2</library>

+		

+        <sys-lib>$(ICONV_LIB)</sys-lib>

+        <sys-lib>$(WSOCK32_LIB)</sys-lib>

+		<sys-lib>$(ZLIB_LIB)</sys-lib> 

+        <sys-lib>$(POSIX_LIB)</sys-lib>

+	</template>

+

+

+

+

+ 

+

+    <!--                                                            -->

+    <!--                  LIBXML2 LIBRARY TARGET                    -->

+    <!--                                                            -->  

+    

+    <lib id="libxml2" template="xml2">

+    	

+    	<!-- this is useful only when using MSVC6PRJ -->

+    	<if cond="FORMAT=='msvc6prj'">

+    		<msvc-copy-setup-h/>

+    		<msvc-file-group>Config headers:*config.h</msvc-file-group>

+    	</if>

+    	<if cond="FORMAT!='msvc6prj'">

+	    	<depends>setup</depends>

+    		<depends>setuplibdir</depends>

+    	</if>

+    	    

+    	<!-- output folder -->

+        <dirname>$(XMLBASEDIR)$(DIRSEP)lib</dirname>

+		

+		<!-- The output name must be "libxml2.lib" with all compilers.

+		     Since mingw format autoadds the "lib" prefix to the library

+			 name, we must intercept that case to avoid to get "liblibxml2.a" -->

+		<if cond="FORMAT!='mingw'">

+	        <libname>libxml2</libname>

+		</if>

+		<if cond="FORMAT=='mingw'">

+	        <libname>xml2</libname>

+		</if>

+		        

+        <!-- the list of source files to compile -->            

+        <sources>

+			$(XMLBASEDIR)$(DIRSEP)c14n.c

+			$(XMLBASEDIR)$(DIRSEP)catalog.c

+			$(XMLBASEDIR)$(DIRSEP)chvalid.c

+			$(XMLBASEDIR)$(DIRSEP)debugXML.c

+			$(XMLBASEDIR)$(DIRSEP)dict.c

+			$(XMLBASEDIR)$(DIRSEP)DOCBparser.c

+			$(XMLBASEDIR)$(DIRSEP)encoding.c

+			$(XMLBASEDIR)$(DIRSEP)entities.c

+			$(XMLBASEDIR)$(DIRSEP)error.c

+			$(XMLBASEDIR)$(DIRSEP)globals.c

+			$(XMLBASEDIR)$(DIRSEP)hash.c

+			$(XMLBASEDIR)$(DIRSEP)HTMLparser.c

+			$(XMLBASEDIR)$(DIRSEP)HTMLtree.c

+			$(XMLBASEDIR)$(DIRSEP)legacy.c

+			$(XMLBASEDIR)$(DIRSEP)list.c

+			$(XMLBASEDIR)$(DIRSEP)nanoftp.c

+			$(XMLBASEDIR)$(DIRSEP)nanohttp.c

+			$(XMLBASEDIR)$(DIRSEP)parser.c

+			$(XMLBASEDIR)$(DIRSEP)parserInternals.c

+			$(XMLBASEDIR)$(DIRSEP)pattern.c

+			$(XMLBASEDIR)$(DIRSEP)relaxng.c

+			$(XMLBASEDIR)$(DIRSEP)SAX2.c

+			$(XMLBASEDIR)$(DIRSEP)SAX.c

+			$(XMLBASEDIR)$(DIRSEP)threads.c

+			$(XMLBASEDIR)$(DIRSEP)tree.c

+			$(XMLBASEDIR)$(DIRSEP)uri.c

+			$(XMLBASEDIR)$(DIRSEP)valid.c

+			$(XMLBASEDIR)$(DIRSEP)xinclude.c

+			$(XMLBASEDIR)$(DIRSEP)xlink.c

+			$(XMLBASEDIR)$(DIRSEP)xmlIO.c

+			$(XMLBASEDIR)$(DIRSEP)xmlmemory.c

+			$(XMLBASEDIR)$(DIRSEP)xmlreader.c

+			$(XMLBASEDIR)$(DIRSEP)xmlregexp.c

+			$(XMLBASEDIR)$(DIRSEP)xmlsave.c

+			$(XMLBASEDIR)$(DIRSEP)xmlschemas.c

+			$(XMLBASEDIR)$(DIRSEP)xmlschemastypes.c

+			$(XMLBASEDIR)$(DIRSEP)xmlunicode.c

+			$(XMLBASEDIR)$(DIRSEP)xmlwriter.c

+			$(XMLBASEDIR)$(DIRSEP)xpath.c

+			$(XMLBASEDIR)$(DIRSEP)xpointer.c

+			$(XMLBASEDIR)$(DIRSEP)xmlstring.c

+        </sources>

+        

+        <!-- the list of header files (for IDE projects) -->

+        <headers>

+			$(XMLINCLUDEDIR)c14n.h

+			$(XMLINCLUDEDIR)catalog.h

+			$(XMLINCLUDEDIR)chvalid.h

+			$(XMLINCLUDEDIR)debugXML.h

+			$(XMLINCLUDEDIR)dict.h

+			$(XMLINCLUDEDIR)DOCBparser.h

+			$(XMLINCLUDEDIR)encoding.h

+			$(XMLINCLUDEDIR)entities.h

+			$(XMLINCLUDEDIR)globals.h

+			$(XMLINCLUDEDIR)hash.h

+			$(XMLINCLUDEDIR)HTMLparser.h

+			$(XMLINCLUDEDIR)HTMLtree.h

+			$(XMLINCLUDEDIR)list.h

+			$(XMLINCLUDEDIR)nanoftp.h

+			$(XMLINCLUDEDIR)nanohttp.h

+			$(XMLINCLUDEDIR)parser.h

+			$(XMLINCLUDEDIR)parserInternals.h

+			$(XMLINCLUDEDIR)pattern.h

+			$(XMLINCLUDEDIR)relaxng.h

+			$(XMLINCLUDEDIR)SAX.h

+			$(XMLINCLUDEDIR)SAX2.h

+			$(XMLINCLUDEDIR)schemasInternals.h

+			$(XMLINCLUDEDIR)threads.h

+			$(XMLINCLUDEDIR)tree.h

+			$(XMLINCLUDEDIR)uri.h

+			$(XMLINCLUDEDIR)valid.h

+			$(XMLINCLUDEDIR)xinclude.h

+			$(XMLINCLUDEDIR)xlink.h

+			$(XMLINCLUDEDIR)xmlautomata.h

+			$(XMLINCLUDEDIR)xmlerror.h

+			$(XMLINCLUDEDIR)xmlexports.h

+			$(XMLINCLUDEDIR)xmlIO.h

+			$(XMLINCLUDEDIR)xmlmemory.h

+			$(XMLINCLUDEDIR)xmlmodule.h

+			$(XMLINCLUDEDIR)xmlreader.h

+			$(XMLINCLUDEDIR)xmlregexp.h

+			$(XMLINCLUDEDIR)xmlsave.h

+			$(XMLINCLUDEDIR)xmlschemas.h

+			$(XMLINCLUDEDIR)xmlschemastypes.h

+			$(XMLINCLUDEDIR)xmlstring.h

+			$(XMLINCLUDEDIR)xmlunicode.h

+			$(XMLINCLUDEDIR)xmlversion.h			

+			$(XMLINCLUDEDIR)xmlwriter.h

+			$(XMLINCLUDEDIR)xpath.h

+			$(XMLINCLUDEDIR)xpathInternals.h

+			$(XMLINCLUDEDIR)xpointer.h

+		</headers>

+

+		<!-- these ones are not inside the include/libxml folder -->

+		<headers>

+			$(XMLBASEDIR)$(DIRSEP)libxml.h

+			$(XMLBASEDIR)$(DIRSEP)triodef.h

+			$(XMLBASEDIR)$(DIRSEP)trionan.h

+			$(XMLBASEDIR)$(DIRSEP)include$(DIRSEP)wsockcompat.h			

+       </headers>

+    </lib>

+

+

+

+    <!--                                                -->

+    <!--               LIBXML2 test programs            -->

+    <!--                                                -->

+	

+	<set var="BUILD_ALL_TESTS">

+

+		<!-- when using full options support with MSVC6PRJ we should

+		     avoid to create all the DSP files required for the test

+			 programs: they would take a _lot_ of space !! -->

+		<if cond="FORMAT=='msvc6prj' and FULL_OPTIONS_SUPPORT=='1'">0</if>

+

+		<!-- when creating a makefile or using MSVC6PRJ with limited

+		     options support, then we can build all the tests safely -->

+		<if cond="FORMAT!='msvc6prj' or FULL_OPTIONS_SUPPORT=='0'">1</if>

+

+	</set>

+

+    <if cond="BUILD_ALL_TESTS=='1'">

+

+		<exe id="testAutomata" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testAutomata.c</sources></exe>

+		<exe id="testC14N" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testC14N.c</sources></exe>

+		<exe id="testHTML" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testHTML.c</sources></exe>

+		<exe id="testReader" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testReader.c</sources></exe>

+		<exe id="testRegexp" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testRegexp.c</sources></exe>

+		<exe id="testRelax" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testRelax.c</sources></exe>

+		<exe id="testSax" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testSax.c</sources></exe>

+		<exe id="testSchemas" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testSchemas.c</sources></exe>

+		<exe id="testURI" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testURI.c</sources></exe>

+		<exe id="testXPath" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testXPath.c</sources></exe>

+		<exe id="xmllint" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)xmllint.c</sources></exe>

+

+		<if cond="FORMAT=='autoconf'">

+			<exe id="testdso" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testdso.c</sources></exe>

+		</if>

+

+	<!-- FIXME:

+		<exe id="testModule" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testModule.c</sources></exe>

+

+		<if cond="WITH_THREADS=='posix'">

+			<exe id="testThreads" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testThreads.c</sources></exe>

+		</if>

+		<if cond="WITH_THREADS=='ctls' or WITH_THREADS=='native'">

+			<exe id="testThreadsWin32" template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testThreadsWin32.c</sources></exe>

+		</if>

+	-->

+	</if>

+

+</makefile>

diff --git a/win32/configure.js b/win32/configure.js
index 12e5f42..d857146 100644
--- a/win32/configure.js
+++ b/win32/configure.js
@@ -145,6 +145,7 @@
 	txt += "  dynruntime: Use the dynamic RTL (only bcb) (" + dynruntime + ")\n";
 	txt += "  debug:      Build unoptimised debug executables (" + (buildDebug? "yes" : "no")  + ")\n";
 	txt += "  static:     Link xmllint statically to libxml2 (" + (buildStatic? "yes" : "no")  + ")\n";
+	txt += "              Note: automatically enabled if cruntime is not /MD or /MDd\n";
 	txt += "  prefix:     Base directory for the installation (" + buildPrefix + ")\n";
 	txt += "  bindir:     Directory where xmllint and friends should be installed\n";
 	txt += "              (" + buildBinPrefix + ")\n";
@@ -534,6 +535,14 @@
 	usage();
 	WScript.Quit(error);
 }
+
+// if user choses to link the c-runtime library statically into libxml2
+// with /MT and friends, then we need to enable static linking for xmllint
+if (cruntime == "/MT" || cruntime == "/MTd" ||
+		cruntime == "/ML" || cruntime == "/MLd") {
+	buildStatic = 1;
+}
+
 dirSep = "\\";
 if (compiler == "mingw")
 	dirSep = "/";