mirror of
				https://git.tukaani.org/xz.git
				synced 2025-10-31 21:43:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			207 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			4.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|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
 |