cf3d1f130e
This script is only meant to be run as part of the CI build/test process on machines that are known to have bash (Ubuntu and MacOS). If this assumption changes in the future, then the bash specific commands will need to be replaced with a more portable option. For now, it is convenient to use bash commands.
207 lines
4.3 KiB
Bash
Executable File
207 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
#############################################################################
|
|
#
|
|
# Script meant to be used for Continuous Integration automation for POSIX
|
|
# systems. On GitHub, this is used by Ubuntu and MacOS builds.
|
|
#
|
|
#############################################################################
|
|
#
|
|
# Author: Jia Tan
|
|
#
|
|
# This file has been put into the public domain.
|
|
# You can do whatever you want with this file.
|
|
#
|
|
#############################################################################
|
|
|
|
set -e
|
|
|
|
USAGE="Usage: $0
|
|
-b [autotools|cmake]
|
|
-c [crc32|crc64|sha256]
|
|
-d [encoders|decoders|bcj|delta|threads|shared|nls]
|
|
-f [CFLAGS]
|
|
-l [destdir]
|
|
-n [ARTIFACTS_DIR_NAME]
|
|
-p [all|build|test]
|
|
-s [srcdir]"
|
|
|
|
# Absolute path of script directory
|
|
ABS_DIR=$(cd -- "$(dirname -- "$0")" && pwd)
|
|
|
|
# Default CLI option values
|
|
BUILD_SYSTEM="autotools"
|
|
CHECK_TYPE="crc32,crc64,sha256"
|
|
BCJ="y"
|
|
DELTA="y"
|
|
ENCODERS="y"
|
|
DECODERS="y"
|
|
THREADS="y"
|
|
SHARED="y"
|
|
NATIVE_LANG_SUPPORT="y"
|
|
SRC_DIR="$ABS_DIR/../"
|
|
DEST_DIR="$SRC_DIR/../xz_build"
|
|
PHASE="all"
|
|
ARTIFACTS_DIR_NAME="output"
|
|
|
|
# Parse arguments
|
|
while getopts b:c:d:l:n:s:p:f:h opt; do
|
|
# b option can have either value "autotools" OR "cmake"
|
|
case ${opt} in
|
|
h)
|
|
echo "$USAGE"
|
|
exit 0
|
|
;;
|
|
b)
|
|
case "$OPTARG" in
|
|
autotools) ;;
|
|
cmake) ;;
|
|
*) echo "Invalid build system: $OPTARG"; exit 1;;
|
|
esac
|
|
BUILD_SYSTEM="$OPTARG"
|
|
;;
|
|
# c options can be a comma separated list of check types to support
|
|
c)
|
|
for crc in $(echo "$OPTARG" | sed "s/,/ /g"); do
|
|
case "$crc" in
|
|
crc32) ;;
|
|
crc64) ;;
|
|
sha256) ;;
|
|
*) echo "Invalid check type: $crc"; exit 1 ;;
|
|
esac
|
|
done
|
|
CHECK_TYPE="$OPTARG"
|
|
;;
|
|
# d options can be a comma separated list of things to disable at
|
|
# configure time
|
|
d)
|
|
for disable_arg in $(echo "$OPTARG" | sed "s/,/ /g"); do
|
|
case "$disable_arg" in
|
|
encoders) ENCODERS="n" ;;
|
|
decoders) DECODERS="n" ;;
|
|
bcj) BCJ="n" ;;
|
|
delta) DELTA="n" ;;
|
|
threads) THREADS="n" ;;
|
|
shared) SHARED="n";;
|
|
nls) NATIVE_LANG_SUPPORT="n";;
|
|
*) echo "Invalid disable value: $disable_arg"; exit 1 ;;
|
|
esac
|
|
done
|
|
;;
|
|
l) DEST_DIR="$OPTARG"
|
|
;;
|
|
n) ARTIFACTS_DIR_NAME="$OPTARG"
|
|
;;
|
|
s) SRC_DIR="$OPTARG"
|
|
;;
|
|
p) PHASE="$OPTARG"
|
|
;;
|
|
f)
|
|
CFLAGS="$OPTARG"
|
|
export CFLAGS
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$PHASE" = "all" ] || [ "$PHASE" = "build" ]; then
|
|
# Build based on arguments
|
|
mkdir -p "$DEST_DIR"
|
|
case $BUILD_SYSTEM in
|
|
autotools)
|
|
cd "$SRC_DIR"
|
|
|
|
# Run autogen.sh script if not already run
|
|
if [ ! -f configure ]
|
|
then
|
|
"./autogen.sh"
|
|
fi
|
|
|
|
cd "$DEST_DIR"
|
|
|
|
# Generate configure option values
|
|
EXTRA_OPTIONS=""
|
|
FILTER_LIST="lzma1,lzma2"
|
|
|
|
if [ "$BCJ" = "y" ]
|
|
then
|
|
FILTER_LIST="$FILTER_LIST,x86,powerpc,ia64,arm,armthumb,arm64,sparc"
|
|
fi
|
|
|
|
if [ "$DELTA" = "y" ]
|
|
then
|
|
FILTER_LIST="$FILTER_LIST,delta"
|
|
fi
|
|
|
|
if [ "$ENCODERS" = "y" ]
|
|
then
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --enable-encoders=$FILTER_LIST"
|
|
else
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --disable-encoders"
|
|
fi
|
|
|
|
if [ "$DECODERS" = "y" ]
|
|
then
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --enable-decoders=$FILTER_LIST"
|
|
else
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --disable-decoders"
|
|
fi
|
|
|
|
if [ "$THREADS" = "n" ]
|
|
then
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --disable-threads"
|
|
fi
|
|
|
|
if [ "$SHARED" = "n" ]
|
|
then
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --disable-shared"
|
|
fi
|
|
|
|
if [ "$NATIVE_LANG_SUPPORT" = "n" ]
|
|
then
|
|
EXTRA_OPTIONS="$EXTRA_OPTIONS --disable-nls"
|
|
fi
|
|
|
|
# Run configure script
|
|
"$SRC_DIR"/configure --enable-werror --enable-checks="$CHECK_TYPE" $EXTRA_OPTIONS --config-cache
|
|
|
|
# Build the project
|
|
make
|
|
;;
|
|
cmake)
|
|
# CMake currently does not support disabling encoders, decoders,
|
|
# threading, or check types. For now, just run the full build.
|
|
cd "$DEST_DIR"
|
|
cmake "$SRC_DIR/CMakeLists.txt" -B "$DEST_DIR"
|
|
make
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ "$PHASE" = "all" ] || [ "$PHASE" = "test" ]; then
|
|
case $BUILD_SYSTEM in
|
|
autotools)
|
|
cd "$DEST_DIR"
|
|
# If the tests fail, copy the test logs into the artifacts folder
|
|
if make check
|
|
then
|
|
:
|
|
else
|
|
mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
|
cp ./tests/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
|
exit 1
|
|
fi
|
|
;;
|
|
cmake)
|
|
cd "$DEST_DIR"
|
|
if make test
|
|
then
|
|
:
|
|
else
|
|
mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
|
cp ./Testing/Temporary/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|