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.

     At this point you can check that the library is properly functionning
     by running

     make tests

   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 tests 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$
