| #!/bin/sh |
| # This script is used for testing the build, primarily for use |
| # with travis, but may be used by hand as well. |
| |
| set -e |
| set -x |
| |
| # Test autoconf build |
| autoconf_build() |
| { |
| opts="" |
| # mutexmgr |
| case "$3" in |
| standard) opts="$opts --enable-mutexmgr-standard" ;; |
| posix) opts="$opts --enable-mutexmgr-posix" ;; |
| windows) opts="$opts --enable-mutexmgr-windows" ;; |
| nothreads) opts="$opts --enable-mutexmgr-nothreads" ;; |
| esac |
| |
| # network |
| case "$4" in |
| ON) opts="$opts --enable-network" ;; |
| *) opts="$opts --disable-network" ;; |
| esac |
| |
| # netaccessor |
| case "$5" in |
| curl) opts="$opts --enable-netaccessor-curl" ;; |
| socket) opts="$opts --enable-netaccessor-socket" ;; |
| cfurl) opts="$opts --enable-netaccessor-cfurl" ;; |
| winsock) opts="$opts --enable-netaccessor-winsock" ;; |
| esac |
| |
| # msgloader |
| case "$6" in |
| inmemory) opts="$opts --enable-msgloader-inmemory" ;; |
| icu) opts="$opts --enable-msgloader-icu" ;; |
| iconv) opts="$opts --enable-msgloader-iconv" ;; |
| esac |
| |
| # transcoder |
| case "$7" in |
| # Testing on Linux, it's always GNU iconv |
| iconv) opts="$opts --enable-transcoder-gnuiconv" ;; |
| gnuiconv) opts="$opts --enable-transcoder-gnuiconv" ;; |
| icu) opts="$opts --enable-transcoder-icu" ;; |
| macosunicodeconverter) opts="$opts --enable-transcoder-macosunicodeconverter" ;; |
| windows) opts="$opts --enable-transcoder-windows" ;; |
| esac |
| |
| # msgloader |
| case "$8" in |
| char16_t) opts="$opts --enable-xmlch-char16_t" ;; |
| uint16_t) opts="$opts --enable-xmlch-uint16_t" ;; |
| esac |
| |
| autoreconf -ivf |
| |
| mkdir autoconf-build |
| cd autoconf-build |
| echo "Running ../configure --prefix=$(pwd)/../autoconf-install) ${opts}" |
| ../configure --prefix=$(pwd)/../autoconf-install ${opts} |
| make |
| make install |
| make check |
| } |
| |
| # Install needed tools |
| cmake_deps() |
| { |
| mkdir -p download |
| mkdir -p tools |
| |
| if [ "$(uname -s)" = "Linux" ]; then |
| cmake_file="cmake-3.8.2-Linux-x86_64.tar.gz" |
| cmake_hash="574673d3f37b0be6a0813b894a8bce9c4af08c13f1ec25c030a69f42e0e4b349e0192385ef20c8a9271055b7c3b24c5b20fb5009762131a3fba3d17576e641f1" |
| elif [ "$(uname -s)" = "Darwin" ]; then |
| cmake_file="cmake-3.8.2-Darwin-x86_64.tar.gz" |
| cmake_hash="fd1c09dd73fe2b23fdc9ac915a90343d2e27409182dd1f2bf509ddf54ca926f97e1906fc18f119e8ea52797c05d4b919772f43500bffbcf2c3cdc86828d9067e" |
| fi |
| cmake_url="https://cmake.org/files/v3.8/${cmake_file}" |
| |
| if [ "$(uname -s)" = "Linux" ]; then |
| ninja_file="ninja-linux.zip" |
| ninja_hash="2dddc52750c5e6f841acd0d978b894c9a6562f12ddb4ba9e5118a213f54265f065682ffe1bc7bc2ac6146760145d17800a4b7373791cd1fbbaf0836faf050e19" |
| elif [ "$(uname -s)" = "Darwin" ]; then |
| ninja_file="ninja-mac.zip" |
| ninja_hash="e008c9814447bbf356be7f2daf6d212657fb22b67e7de3885bd2f27766cd7c8a2ad61a4aace170674464ccf55813cbe2bf311485bc2058e89867f17b692642b9" |
| fi |
| ninja_url="https://github.com/ninja-build/ninja/releases/download/v1.7.2/${ninja_file}" |
| |
| ( |
| cd download |
| if [ ! -f "$cmake_file" ] || [ "$(shasum -a 512 "$cmake_file")" != "$cmake_hash $cmake_file" ]; then |
| wget "$cmake_url" |
| if [ "$(shasum -a 512 "$cmake_file")" != "$cmake_hash $cmake_file" ]; then |
| echo "Error: cmake download hash mismatch" >&2 |
| exit 1 |
| fi |
| fi |
| tar xf "$cmake_file" |
| cp -a ${cmake_file%.tar.gz}/* ../tools |
| |
| if [ "$1" = "Ninja" ]; then |
| if [ ! -f "$ninja_file" ] || [ "$(shasum -a 512 "$ninja_file")" != "$ninja_hash $ninja_file" ]; then |
| wget "$ninja_url" |
| if [ "$(shasum -a 512 "$ninja_file")" != "$ninja_hash $ninja_file" ]; then |
| echo "Error: ninja download hash mismatch" >&2 |
| exit 1 |
| fi |
| fi |
| unzip "$ninja_file" |
| mkdir -p ../tools/bin |
| mv ninja ../tools/bin |
| fi |
| ) |
| } |
| |
| # Test autoconf build |
| cmake_build() |
| { |
| opts="" |
| if [ -n "$3" ]; then |
| opts="$opts -Dmutex-manager=$3" |
| fi |
| if [ -n "$4" ]; then |
| opts="$opts -Dnetwork:BOOL=$4" |
| fi |
| if [ -n "$5" ]; then |
| opts="$opts -Dnetwork-accessor=$5" |
| fi |
| if [ -n "$6" ]; then |
| opts="$opts -Dmessage-loader=$6" |
| fi |
| if [ -n "$7" ]; then |
| opts="$opts -Dtranscoder=$7" |
| fi |
| if [ -n "$8" ]; then |
| opts="$opts -Dxmlch-type=$8" |
| fi |
| |
| PATH="$(pwd)/tools/bin:$PATH" |
| if [ "$(uname -s)" = "Darwin" ]; then |
| PATH="$(pwd)/tools/CMake.app/Contents/bin:$PATH" |
| fi |
| mkdir cmake-build |
| cd cmake-build |
| echo "Running cmake -G "$1" -DCMAKE_BUILD_TYPE="$2" -DCMAKE_INSTALL_PREFIX=../autoconf-install ${opts} .." |
| cmake -G "$1" -DCMAKE_BUILD_TYPE="$2" -DCMAKE_INSTALL_PREFIX=../autoconf-install ${opts} .. |
| cmake --build . |
| cmake --build . --target install |
| ctest -V |
| } |
| |
| build=$1 |
| shift |
| |
| case $build in |
| autoconf) |
| echo "Testing Autoconf build" |
| autoconf_build "$@" |
| ;; |
| cmake) |
| echo "Testing CMake build" |
| cmake_deps "$@" |
| cmake_build "$@" |
| ;; |
| *) |
| echo "Invalid argument: \"$arg\"" >&2 |
| exit 1 |
| ;; |
| esac |
| |
| exit 0 |