liblzma/build-aux/ci_build.sh
Jia Tan 4de35fd6b5 CI/CD: Add new -p (PHASE) argument to ci_build.sh
The new PHASE argument can be build, test, or all. all is the default.
This way, the CI/CD script can differentiate between the build and test
phases to make it easier to track down errors when they happen.
2023-01-07 21:15:14 +08:00

153 lines
3.3 KiB
Bash
Executable File

#!/bin/sh
#
#############################################################################
#
# 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] -l [destdir] -s [srcdir] -p [all|build|test]"
# 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"
SRC_DIR="$ABS_DIR/../"
DEST_DIR="$SRC_DIR/../xz_build"
PHASE="all"
# Parse arguments
while getopts b:c:d:l:s:p: opt; do
# b option can have either value "autotools" OR "cmake"
case ${opt} in
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" ;;
*) echo "Invalid disable value: $disable_arg"; exit 1 ;;
esac
done
;;
l) DEST_DIR="$OPTARG"
;;
s) SRC_DIR="$OPTARG"
;;
p) PHASE="$OPTARG"
;;
esac
done
if [ "$PHASE" = "all" ] || [ "$PHASE" = "build" ]; then
# Build based on arguments
mkdir -p "$DEST_DIR"
case $BUILD_SYSTEM in
autotools)
# Run autogen.sh script
cd "$SRC_DIR"
"./autogen.sh"
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
# Run configure script
"$SRC_DIR"/configure --enable-checks=$CHECK_TYPE $EXTRA_OPTIONS
# 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"
make check
;;
cmake)
cd "$DEST_DIR"
make "test"
;;
esac
fi