See also the generic INSTALL file for configure options

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 functioning
     by running

         make check

     Please report test failures to the mailing list or bug tracker.

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

     Libxml does not require any other libraries. A platform with somewhat
     recent POSIX support 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 widely available compression library
             https://zlib.net/
         liblzma: another compression library
             https://tukaani.org/xz/
         iconv: a powerful character encoding conversion library. It's
             part of POSIX.1-2001, so it doesn't need to be installed
             on modern UNIX-like systems, specifically on Linux.
             https://www.gnu.org/software/libiconv/
         ICU: Mainly used by Chromium on Windows. Unnecessary on most
             systems.

Daniel
veillard@redhat.com
