# libxml
# ======
# There are several versions of libxml in this HOWTO.
# If you're installing it for something big like all of GNOME,
# it matters which major version you use.
# If you're installing it to be used by an Apache module or
# something specific like that, just make sure that the latest
# libxml2 is supported by it before you pick which one to use
# by going to the next branch down until you have a match.
#
# As this is written, 2.12.6 is the latest, but the latest covered below
# is 2.9.14 which was released in 2022
# Slackware 14.0: libxml2 2.8.0
# Slackware 14.1: libxml2 2.9.1
# Slackware 14.2: libxml2 2.9.4
# Slackware 15.0: libxml2 2.9.12
#
# And be sure to (drink your ovaltine) check 'patches' for updates
#
# MUCH, MUCH older versions of Slackware had a 'libxml' package for
# version 1.8.17
# If you have a libxml (1.x or 2.x) that's installed under /usr/local, cd
# into it's source and run 'make uninstall' (as root) before proceeding
# here. If you don't have the source, download it, run configure (as shown
# below) and then run 'make uninstall' (as root). You can also run this to
# remove most files for old versions (and don't forget to remove source and
# tarballs too):
su
find /usr/local/lib -type f -name "libxml2.so.*" -exec rm {} \;
find /usr/lib -type f -name "libxml2.so.*" -exec rm {} \;
find /usr/local/doc -type d -name "libxml2-*" -exec rm -r {} \; 2> /dev/null
find /usr/doc -type d -name "libxml2-*" -exec rm -r {} \; 2> /dev/null
find /usr/share/doc -type d -name "libxml2-*" -exec rm -r {} \; 2> /dev/null
test -d /usr/local/include/libxml2 && rm -r /usr/local/include/libxml2
test -d /usr/include/libxml2 && rm -r /usr/include/libxml2
exit
# Prerequisites (for all versions):
# zlib (optional)
# glibc's iconv or libiconv (optional)
# Python (optional)
# libxml 1.8.17
# =============
# Get the source tarball
cd
test -f installed/libxml-1.8.17.tar.bz2 &&
mv installed/libxml-1.8.17.tar.bz2 .
test ! -f libxml-1.8.17.tar.bz2 &&
wget https://download.gnome.org/sources/libxml/1.8/\
libxml-1.8.17.tar.bz2
# If you get a complaint (watch for it, it'll blow by) about ./missing being
# too old, you can run 'autoreconf -f -i' before running configure to pretty
# up the autoconf/automake/aclocal files (including ./missing). This is
# probably not necessary to get things to compile, but if you want
# everything to be peachy, that'll do it.
# If you want to build Python bindings for libxml (if you have Python
# installed), add --with-python to the configure line below.
# Extract the source
mkdir -p -m 0700 ~/src
cd ~/src
find -maxdepth 1 -type d -name "libxml2-*" -exec rm -r {} \;
tar xjvf ~/libxml2-2.5.11.tar.bz2
cd libxml2-2.5.11
test $UID = 0 && chown -R root:root .
# Configure the build for 64-bit
test $(uname -m) = 'x86_64' && ./configure --prefix=/usr --libdir=/usr/lib64
# Configure the build for anything else
test $(uname -m) != 'x86_64' && ./configure --prefix=/usr
# Build it
make
# Test the build
make tests
# Become root to install it
su
# Remove the Slackware package, if there is one
test -x /sbin/removepkg && /sbin/removepkg libxml2
# Remove old docs before installing the new version
find /usr/doc -type d -name "libxml2-*" -exec rm -r {} \; 2> /dev/null
# Install it
make install
ldconfig
ln -sf /usr/include/libxml2/libxml/*.h /usr/include/libxml2/
# Become yourself again
exit
# Save the tarball for later
cd
mkdir -p -m 0700 installed
rm -f installed/libxml2-*.tar.*
mv libxml2-2.5.11.tar.bz2 installed/
# Get the source tarball
cd
test -f installed/libxml2-2.6.30.tar.bz2 &&
mv installed/libxml2-2.6.30.tar.bz2 .
test ! -f libxml2-2.6.30.tar.bz2 &&
wget https://download.gnome.org/sources/libxml2/2.6/\
libxml2-2.6.30.tar.bz2
# Verify tarball w/ sha256sum:
# (can also use 'cksum -a sha256' or 'openssl sha256')
echo "eeea3a2f5218855a55c0316eb67fc34ca744b5e523864c250ba92ce87ab531\
93 libxml2-2.6.30.tar.bz2" | sha256sum -c
# Extract the source
mkdir -p -m 0700 ~/src
cd ~/src
find -maxdepth 1 -type d -name "libxml2-2.6.*" -exec rm -r {} \;
tar xjvf ~/libxml2-2.6.30.tar.bz2
cd libxml2-2.6.30
test $UID = 0 && chown -R root:root .
# If you want to build Python bindings for libxml (if you have Python
# installed), add --with-python to the configure line.
# Configure the build for 64-bit
test $(uname -m) = 'x86_64' && ./configure --prefix=/usr --libdir=/usr/lib64
# Configure the build for anything else
test $(uname -m) != 'x86_64' && ./configure --prefix=/usr
# Build it
make
# Test it - optional, but recommended
make tests
# Become root to install it
su
# Remove the Slackware package, if there is one
test -x /sbin/removepkg && /sbin/removepkg libxml2
# Remove old docs before installing the new version
find /usr/doc -type d -name "libxml2-*" -exec rm -r {} \; 2> /dev/null
# Install it
make install
ldconfig
ln -sf /usr/include/libxml2/libxml/*.h /usr/include/libxml2/
# Make sure your non-root user can remove the source later
chown -R $(logname) .
chmod -R u+w .
# Become yourself again
exit
# Save the tarball for later
cd
mkdir -p -m 0700 installed
rm -f installed/libxml2-*.tar.*
mv libxml2-2.6.30.tar.bz2 installed/
# Get the source tarball
cd
test -f installed/libxml2-2.9.14.tar.xz &&
mv installed/libxml2-2.9.14.tar.xz .
test ! -f libxml2-2.9.14.tar.xz &&
wget https://download.gnome.org/sources/libxml2/2.9/\
libxml2-2.9.14.tar.xz
# Verify tarball w/ sha256sum:
# (can also use 'cksum -a sha256' or 'openssl sha256')
echo "60d74a257d1ccec0475e749cba2f21559e48139efba6ff28224357c7c798df\
ee libxml2-2.9.14.tar.xz" | sha256sum -c
# Extract the source
mkdir -p -m 0700 ~/src
cd ~/src
find -maxdepth 1 -type d -name "libxml2-2.6.*" -exec rm -r {} \;
tar xJvf ~/libxml2-2.9.14.tar.xz
cd libxml2-2.9.14
test $UID = 0 && chown -R root:root .
# Configure the build for 64-bit
test $(uname -m) = 'x86_64' &&
./configure --prefix=/usr --docdir=/usr/doc/libxml2-2.9.14 \
--libdir=/usr/lib64 --mandir=/usr/man
# Configure the build for anything else
test $(uname -m) != 'x86_64' &&
./configure --prefix=/usr --docdir=/usr/doc/libxml2-2.9.14 \
--mandir=/usr/man
# Build it
make
# Check the build
make check
# Become root to install it
su
# Remove the Slackware package, if there is one
test -x /sbin/removepkg && /sbin/removepkg libxml2
# Remove old docs before installing the new version
test -d /usr/doc/libxml2 && rm -r /usr/doc/libxml2
find /usr/doc -type d -name "libxml2-*" -exec rm -r {} \; 2> /dev/null
## Unless you did 'make uninstall' as root from it's configured source
## directory, there may be old files from previous source-installed
## versions here:
# /usr/bin/ (xml2-config, xmlcatalog, xmllint)
# /usr/doc/libxml/
# /usr/doc/libxml2-?.*/
# /usr/doc/libxml2-python-*/
# /usr/include/libxml2/
# /usr/lib64/cmake/libxml2/
# /usr/lib64/pkgconfig/libxml-2.0.pc
# /usr/lib64/python2.*/site-packages/
# /usr/lib64/python3.*/site-packages/
# /usr/lib64/libxml2.*
# /usr/lib64/xml2Conf.sh
# /usr/man/man1/xml2-config.1.gz
# /usr/man/man1/xmlcatalog.1.gz
# /usr/man/man1/xmllint.1.gz
# /usr/man/man3/libxml.3.gz
# /usr/share/aclocal/libxml.m4
# /usr/share/gtk-doc/html/libxml2/
# Install it
make install
ldconfig
# If you remove the Slackware package libxml2 and install a new one,
# you may need to restart running daemons are linked with libxml2 such as
# Cyrus IMAP's master, imapd, squatter,
# lmtpd, etc.
# If you build something that links with libxml2 and it can not find the
# include files because it is using /usr/include/libxml2/*.h instead of
# /usr/include/libxml2/libxml/*.h, do this:
ln -sf /usr/include/libxml2/libxml/*.h /usr/include/libxml2/
# Make sure your non-root user can remove the source later
chown -R $(logname) .
chmod -R u+w .
# Become yourself again
exit
# Save the tarball for later
cd
mkdir -p -m 0700 installed
rm -f installed/libxml2-*.tar.*
mv libxml2-2.9.14.tar.xz installed/