sparklemotion/nokogiri

View on GitHub
scripts/compile-against-libxml2-source

Summary

Maintainability
Test Coverage
#! /usr/bin/env bash
#
#  Use this script to build libxml2 and libxslt from source, and then compile and link Nokogiri against them.
#  Unless you're hacking on those libraries, consider using this command instead:
#
#    bundle exec rake compile -- \\
#      --with-xslt-source-dir=$(pwd)/../libxslt \\
#      --with-xml2-source-dir=$(pwd)/../libxml2
#
set -eu

PREFIX="${HOME}/tmp/libxml2"
rm -rf "${PREFIX}"
mkdir -p "$PREFIX"

clean_p=0
if [[ ${1:-} == "--clean" ]] ; then
  clean_p=1
  shift
fi

function clean_and_configure_libxml2 {
  make clean || true

  ./configure --prefix="${PREFIX}" --without-python --without-readline --with-c14n --with-debug --with-threads --with-iconv=yes --host=x86_64-pc-linux-gnu CFLAGS="-O2 -g -std=c89 -D_XOPEN_SOURCE=700"
}

function clean_and_configure_libxslt {
  make clean || true

  ./configure --prefix="${PREFIX}" --without-python --with-libxml-prefix=$PREFIX --with-debug --host=x86_64-pc-linux-gnu CFLAGS="-O2 -g -std=c89 -D_XOPEN_SOURCE=700"
}

# libxml2
pushd ../libxml2
if [[ $clean_p -gt 0 ]] ; then
  clean_and_configure_libxml2
fi
make install
popd

# libxslt
pushd ../libxslt
if [[ $clean_p -gt 0 ]] ; then
  clean_and_configure_libxslt
fi
make install
popd

export LD_LIBRARY_PATH=${PREFIX}/lib
export CFLAGS="-I${PREFIX}/include/libxml2 -I${PREFIX}/include"
export LDFLAGS="-lxml2 -lxslt -L${PREFIX}/lib"

if [[ $clean_p -gt 0 ]] ; then
  bundle exec rake clean
fi

bundle exec rake compile -- --enable-system-libraries

if [[ ${1:-} != "" ]] ; then
  $*
fi