Compile LibXML2 from source

Get the source code from
http://xmlsoft.org/downloads.html

Linux and Solaris
(Have to use python 32-bit)

cd /opt/mydir/libxml2
mkdir linux-gcc3
gunzib -c libxml2-2.9.4.tar.gz | tar xvf –
cd libxml2-2.9.4
./configure --prefix=/opt/mydir/libxml2/linux-gcc3 --enable-static --disable-shared 2>&1 | tee conf.log
## 64 bit
## ./configure CC="cc -m64" --prefix=/opt/mydir/libxml2/linux-gcc3 --enable-static --disable-shared 2>&1 | tee conf.log
make 2>&1 | tee make.log
make install

If you have Python 2.5 or older, you have to replace all these lines:

libxml2-2.9.4/python/generator.py

From

except IOError as msg:

To

except IOError, msg:


Windows
Machine must have Microsoft Visual Studio 2010

Extract source code to C:\mydir\libxml2

Create a directory C:\mydir\win64

Go to C:\mydir\libxml2\libxml2-2.9.4\win32

(In libxml2-2.9.2, copy the configure.ac to configure.in) (Maybe it's a bug?)

Open command prompt:

cscript configure.js compiler=msvc iconv=no zlib=no debug=no prefix=C:\mydir\win64

# For 64 bit, run this command first:
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" amd64

nmake /f Makefile.msvc 2>&1 | tee make.log
nmake /f Makefile.msvc install

After that, we need to copy the C:\mydir\win64\include\libxml2\libxml to C:\mydir\win64\include (OMG?!)

libxml2 2.9.4 build error with Visual Studio 2005/2008/2010
https://mail.gnome.org/archives/xml/2016-June/msg00008.html

Apply this patch

diff --git a/relaxng.c b/relaxng.c
index 56a3344..93a0f0b 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -2087,6 +2087,7 @@ static xmlChar *
 xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar * arg1,
                          const xmlChar * arg2)
 {
+    xmlChar *result;
     char msg[1000];

     if (arg1 == NULL)
@@ -2215,7 +2216,7 @@ xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar * arg1,
         snprintf(msg, 1000, "Unknown error code %dn", err);
     }
     msg[1000 - 1] = 0;
-    xmlChar *result = xmlCharStrdup(msg);
+    result = xmlCharStrdup(msg);
     return (xmlEscapeFormatString(&result));
 }

diff --git a/xmlschemas.c b/xmlschemas.c
index e1b3a4f..7afe2eb 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -3168,8 +3168,8 @@ xmlSchemaPSimpleTypeErr(xmlSchemaParserCtxtPtr ctxt,
 		"valid.");
 	}
 	if (expected) {
-	    msg = xmlStrcat(msg, BAD_CAST " Expected is '");
 	    xmlChar *expectedEscaped = xmlCharStrdup(expected);
+	    msg = xmlStrcat(msg, BAD_CAST " Expected is '");
 	    msg = xmlStrcat(msg, xmlEscapeFormatString(&expectedEscaped));
 	    FREE_AND_NULL(expectedEscaped);
 	    msg = xmlStrcat(msg, BAD_CAST "'.n");
Loading