3 #############################################################################
5 # Script meant to be used for Continuous Integration automation for POSIX
6 # systems. On GitHub, this is used by Ubuntu and MacOS builds.
8 #############################################################################
12 # This file has been put into the public domain.
13 # You can do whatever you want with this file.
15 #############################################################################
22 -c [crc32|crc64|sha256]
23 -d [encoders|decoders|bcj|delta|threads|shared|nls|small|ifunc|clmul]
26 -n [ARTIFACTS_DIR_NAME]
30 # Absolute path of script directory
31 ABS_DIR
=$
(cd -- "$(dirname -- "$0")" && pwd)
33 # Default CLI option values
35 BUILD_SYSTEM
="autotools"
36 CHECK_TYPE
="crc32,crc64,sha256"
43 NATIVE_LANG_SUPPORT
="y"
47 SRC_DIR
="$ABS_DIR/../"
48 DEST_DIR
="$SRC_DIR/../xz_build"
50 ARTIFACTS_DIR_NAME
="output"
57 while getopts a
:b
:c
:d
:l
:n
:s
:p
:f
:h opt
; do
58 # b option can have either value "autotools" OR "cmake"
65 AUTOGEN_FLAGS
="$OPTARG"
71 *) echo "Invalid build system: $OPTARG"; exit 1;;
73 BUILD_SYSTEM
="$OPTARG"
75 c
) CHECK_TYPE
="$OPTARG"
77 # d options can be a comma separated list of things to disable at
80 for disable_arg
in $
(echo "$OPTARG" |
sed "s/,/ /g"); do
81 case "$disable_arg" in
82 encoders
) ENCODERS
="n" ;;
83 decoders
) DECODERS
="n" ;;
86 threads
) THREADS
="n" ;;
88 nls
) NATIVE_LANG_SUPPORT
="n";;
92 *) echo "Invalid disable value: $disable_arg"; exit 1 ;;
98 n
) ARTIFACTS_DIR_NAME
="$OPTARG"
116 # These two functions essentially implement the ternary "?" operator.
118 # First argument is option value ("y" or "n")
119 # Second argument is option to set if "y"
120 # Third argument is option to set if "n"
123 EXTRA_OPTIONS
="$EXTRA_OPTIONS $2"
125 EXTRA_OPTIONS
="$EXTRA_OPTIONS $3"
130 add_to_filter_list
() {
131 # First argument is option value ("y" or "n")
132 # Second argument is option to set if "y"
135 FILTER_LIST
="$FILTER_LIST$2"
144 if [ "$PHASE" = "all" ] ||
[ "$PHASE" = "build" ]
146 # Checksum options should be specified differently based on the
147 # build system. It must be calculated here since we won't know
148 # the build system used until all args have been parsed.
149 # Autotools - comma separated
150 # CMake - semi-colon separated
151 if [ "$BUILD_SYSTEM" = "autotools" ]
159 for crc
in $
(echo "$CHECK_TYPE" |
sed "s/,/ /g"); do
161 # Remove "crc32" from cmake build, if specified.
163 if [ "$BUILD_SYSTEM" = "cmake" ]
170 *) echo "Invalid check type: $crc"; exit 1 ;;
173 CHECK_TYPE_TEMP
="$CHECK_TYPE_TEMP$SEP$crc"
176 # Remove the first character from $CHECK_TYPE_TEMP since it will
177 # always be the delimiter.
178 CHECK_TYPE
="${CHECK_TYPE_TEMP:1}"
180 FILTER_LIST
="lzma1$SEP"lzma2
182 # Build based on arguments
185 # Generate configure option values
188 case $BUILD_SYSTEM in
192 # Run autogen.sh script if not already run
193 if [ ! -f configure
]
195 .
/autogen.sh
"$AUTOGEN_FLAGS"
200 add_to_filter_list
"$BCJ" ",x86,powerpc,ia64,arm,armthumb,arm64,sparc"
201 add_to_filter_list
"$DELTA" ",delta"
203 add_extra_option
"$ENCODERS" "--enable-encoders=$FILTER_LIST" "--disable-encoders"
204 add_extra_option
"$DECODERS" "--enable-decoders=$FILTER_LIST" "--disable-decoders"
205 add_extra_option
"$THREADS" "" "--disable-threads"
206 add_extra_option
"$SHARED" "" "--disable-shared"
207 add_extra_option
"$NATIVE_LANG_SUPPORT" "" "--disable-nls"
208 add_extra_option
"$SMALL" "--enable-small" ""
209 add_extra_option
"$IFUNC" "" "--disable-ifunc"
210 add_extra_option
"$CLMUL" "" "--disable-clmul-crc"
212 # Run configure script
213 "$SRC_DIR"/configure
--enable-werror --enable-checks="$CHECK_TYPE" $EXTRA_OPTIONS --config-cache
221 add_to_filter_list
"$BCJ" ";x86;powerpc;ia64;arm;armthumb;arm64;sparc"
222 add_to_filter_list
"$DELTA" ";delta"
224 add_extra_option
"$THREADS" "-DENABLE_THREADS=ON" "-DENABLE_THREADS=OFF"
226 # Disable MicroLZMA if encoders are not configured.
227 add_extra_option
"$ENCODERS" "-DENCODERS=$FILTER_LIST" "-DENCODERS= -DMICROLZMA_ENCODER=OFF"
229 # Disable MicroLZMA and lzip decoders if decoders are not configured.
230 add_extra_option
"$DECODERS" "-DDECODERS=$FILTER_LIST" "-DDECODERS= -DMICROLZMA_DECODER=OFF -DLZIP_DECODER=OFF"
232 # CMake disables the shared library by default.
233 add_extra_option
"$SHARED" "-DBUILD_SHARED_LIBS=ON" ""
235 add_extra_option
"$SMALL" "-DHAVE_SMALL=ON" ""
237 # Remove old cache file to clear previous settings.
238 rm -f "CMakeCache.txt"
239 cmake
"$SRC_DIR/CMakeLists.txt" -B "$DEST_DIR" $EXTRA_OPTIONS -DADDITIONAL_CHECK_TYPES="$CHECK_TYPE" -G "Unix Makefiles"
240 cmake
--build "$DEST_DIR"
250 if [ "$PHASE" = "all" ] ||
[ "$PHASE" = "test" ]
252 case $BUILD_SYSTEM in
255 # If the tests fail, copy the test logs into the artifacts folder
260 mkdir
-p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
261 cp .
/tests
/*.log
"$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
271 mkdir
-p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
272 cp .
/Testing
/Temporary
/*.log
"$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"