Extracted from the documentation:
   http://xmlsoft.org/FAQ.html#Compilatio

Compilation

   1.What is the process to compile libxml ? 

     As most UNIX libraries libxml follows the "standard":

     gunzip -c xxx.tar.gz | tar xvf -

     cd libxml-xxxx

     ./configure --help

     to see the options, then the compilation/installation proper

     ./configure [possible options]

     make

     make install

     At that point you may have to rerun ldconfig or similar utility to
     update your list of installed shared libs.

   2.What other libraries are needed to compile/install libxml ? 

     Libxml does not requires any other library, the normal C ANSI API
     should be sufficient (please report any violation to this rule you
     may find).

     However if found at configuration time libxml will detect and use
     the following libs:

         libz: a highly portable and available widely compression library 
             http://www.info-zip.org/pub/infozip/zlib/
         iconv: a powerful character encoding conversion library. It's
	     included by default on recent glibc libraries, so it doesn't
	     need to be installed specifically on linux. It seems it's
	     now part of the official UNIX specification. Here is one
	     implementation of the library which source can be found here.
             http://clisp.cons.org/~haible/packages-libiconv.html
             ftp://ftp.ilog.fr/pub/Users/haible/gnu/

   3.libxml does not compile with HP-UX's optional ANSI-C compiler 

     this is due to macro limitations. Try to add " -Wp,-H16800 -Ae"
     to the CFLAGS

     you can also install and use gcc instead or use a precompiled version
     of libxml, both available from the HP-UX Porting and Archive Centre

   4.make check fails on some platforms 

     Sometime the regression tests results don't completely match the
     value produced by the parser, and the makefile uses diff to print
     the delta. On some platforms the diff return breaks the compilation
     process, if the diff is small this is probably not a serious problem

Daniel
veillard@redhat.com

$Id$
