mirror of
https://github.com/upx/upx.git
synced 2024-11-23 20:59:55 +00:00
be8601f8cc
egrep will go away at some point, and grep -E is standardized
281 lines
10 KiB
Bash
281 lines
10 KiB
Bash
## vim:set ts=4 sw=4 et:
|
|
|
|
# Copyright (C) Markus Franz Xaver Johannes Oberhumer
|
|
|
|
#set -x # debug
|
|
umask 022
|
|
export GIT_PAGER=
|
|
|
|
# rename short variables to more readable Build-Matrix BM_ names
|
|
# C is COMPILER
|
|
# B is BUILD_OPTIONS
|
|
# T is TESTSUITE_OPTIONS
|
|
# X is EXTRA_OPTIONS
|
|
BM_CROSS=$CROSS; BM_C=$C; BM_B=$B; BM_T=$T; BM_X=$X
|
|
unset CROSS C B T X
|
|
[[ -z $BM_C ]] && BM_C=gcc
|
|
[[ -z $BM_B ]] && BM_B=release
|
|
|
|
# just in case, unset variable for passing extra UPX options
|
|
export UPX=
|
|
# un-export some vars
|
|
declare +x UPX_AUTOMATIC_BUILDS_SSL_KEY UPX_AUTOMATIC_BUILDS_SSL_IV
|
|
|
|
# compatibility wrappers
|
|
if [[ $TRAVIS_OS_NAME == osx ]]; then
|
|
# use GNU coreutils ("brew install coreutils")
|
|
chmod() {
|
|
gchmod "$@"
|
|
}
|
|
date() {
|
|
gdate "$@"
|
|
}
|
|
readlink() {
|
|
greadlink "$@"
|
|
}
|
|
sha256sum() {
|
|
gsha256sum "$@"
|
|
}
|
|
fi
|
|
if [[ -n $APPVEYOR_JOB_ID ]]; then
|
|
openssl() {
|
|
/usr/bin/openssl "$@"
|
|
}
|
|
sort() {
|
|
/usr/bin/sort "$@"
|
|
}
|
|
fi
|
|
|
|
# set CC and CXX from BM_C and BM_CROSS
|
|
if [[ -z $CC_OVERRIDE ]]; then
|
|
CC=false CXX=false SCAN_BUILD=false
|
|
AR=ar SIZE=size
|
|
if [[ -n $APPVEYOR_JOB_ID ]]; then
|
|
BUILD_LOCAL_UCL=1
|
|
BUILD_LOCAL_ZLIB=1
|
|
if [[ $BM_C =~ (^|\-)(clang|gcc)($|\-) ]]; then
|
|
export upx_EXTRA_LDFLAGS="-static-libgcc -static-libstdc++"
|
|
fi
|
|
upx_exeext=.exe
|
|
# dir c:\cygwin
|
|
case $BM_C in
|
|
gcc-m32 | gcc-4.9-m32)
|
|
x=i686-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m32"; CXX="$x-g++ -m32" ;;
|
|
gcc-m64 | gcc-4.9-m64)
|
|
x=x86_64-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m64"; CXX="$x-g++ -m64" ;;
|
|
msvc | msvc-*)
|
|
AR="link -lib"; CC="cl"; CXX="cl" ;; # standard system compiler
|
|
esac
|
|
fi # APPVEYOR_JOB_ID
|
|
if [[ -n $BM_CROSS ]]; then
|
|
BUILD_LOCAL_UCL=1
|
|
BUILD_LOCAL_ZLIB=1
|
|
if [[ $BM_C =~ (^|\-)(clang|gcc)($|\-) ]]; then
|
|
export upx_EXTRA_LDFLAGS="-static-libgcc -static-libstdc++"
|
|
fi
|
|
cat /etc/os-release || true
|
|
if grep -E -q '^PRETTY_NAME="?Ubuntu .*12\.04' /etc/os-release; then
|
|
case $BM_CROSS-$BM_C in
|
|
arm-linux-gnueabi-gcc | arm-linux-gnueabi-gcc-4.6)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-arm -L /usr/arm-linux-gnueabi"
|
|
x=arm-linux-gnueabi; AR="$x-ar"; CC="$x-gcc"; CXX="$x-g++" ;;
|
|
arm-linux-gnueabihf-gcc | arm-linux-gnueabihf-gcc-4.6)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-arm -L /usr/arm-linux-gnueabihf"
|
|
x=arm-linux-gnueabihf; AR="$x-ar"; CC="$x-gcc"; CXX="$x-g++" ;;
|
|
i[36]86-w64-mingw32-gcc | i[36]86-w64-mingw32-gcc-4.6)
|
|
upx_exeext=.exe
|
|
[[ -z $upx_wine ]] && upx_wine="wine"
|
|
x=i686-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m32"; CXX="$x-g++ -m32" ;;
|
|
x86_64-w64-mingw32-gcc | x86_64-w64-mingw32-gcc-4.6)
|
|
upx_exeext=.exe
|
|
[[ -z $upx_wine ]] && upx_wine="wine"
|
|
x=x86_64-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m64"; CXX="$x-g++ -m64" ;;
|
|
esac
|
|
elif grep -E -q '^PRETTY_NAME="?Ubuntu 16\.04' /etc/os-release; then
|
|
case $BM_CROSS-$BM_C in
|
|
aarch64-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-aarch64 -L /usr/aarch64-linux-gnu"
|
|
x=aarch64-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
arm-linux-gnueabi-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-arm -L /usr/arm-linux-gnueabi"
|
|
x=arm-linux-gnueabi; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
arm-linux-gnueabihf-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-arm -L /usr/arm-linux-gnueabihf"
|
|
x=arm-linux-gnueabihf; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
i[36]86-w64-mingw32-gcc-5)
|
|
upx_exeext=.exe
|
|
[[ -z $upx_wine ]] && upx_wine="wine"
|
|
x=i686-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m32"; CXX="$x-g++ -m32" ;;
|
|
mips-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-mips -L /usr/mips-linux-gnu"
|
|
x=mips-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
mipsel-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-mipsel -L /usr/mipsel-linux-gnu"
|
|
x=mipsel-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
powerpc-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-ppc -L /usr/powerpc-linux-gnu"
|
|
x=powerpc-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
powerpc64-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-ppc64 -L /usr/powerpc64-linux-gnu"
|
|
x=powerpc64-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
powerpc64le-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-ppc64le -L /usr/powerpc64le-linux-gnu"
|
|
x=powerpc64le-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
s390x-linux-gnu-gcc-5)
|
|
[[ -z $upx_qemu ]] && upx_qemu="qemu-s390x -L /usr/s390x-linux-gnu"
|
|
x=s390x-linux-gnu; AR="$x-ar"; CC="$x-gcc-5"; CXX="$x-g++-5" ;;
|
|
x86_64-w64-mingw32-gcc-5)
|
|
upx_exeext=.exe
|
|
[[ -z $upx_wine ]] && upx_wine="wine"
|
|
x=x86_64-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m64"; CXX="$x-g++ -m64" ;;
|
|
esac
|
|
elif grep -E -q '^PRETTY_NAME="?Ubuntu 20\.04' /etc/os-release; then
|
|
case $BM_CROSS-$BM_C in
|
|
x86_64-w64-mingw32-gcc-9)
|
|
export upx_EXTRA_CPPFLAGS="-D__USE_MINGW_ANSI_STDIO=1"
|
|
export upx_EXTRA_LDFLAGS="-static"
|
|
upx_exeext=.exe
|
|
[[ -z $upx_wine ]] && upx_wine="wine64"
|
|
x=x86_64-w64-mingw32; AR="$x-ar"; CC="$x-gcc -m64"; CXX="$x-g++ -m64" ;;
|
|
esac
|
|
fi
|
|
fi # BM_CROSS
|
|
if [[ "$CC" == "false" ]]; then # generic
|
|
if [[ -z $BM_CROSS ]]; then
|
|
if [[ $TRAVIS_OS_NAME == osx ]]; then
|
|
case $BM_C in
|
|
clang | clang-m?? | clang-[6789][0-9][0-9]-m?? | clang-1[0-1][0-9][0-9]-m??)
|
|
CC="clang"; CXX="clang++" ;; # standard system compiler
|
|
esac
|
|
else
|
|
case $BM_C in
|
|
clang | clang-m?? | clang-3.4-m??)
|
|
CC="clang"; CXX="clang++" ;; # standard system compiler
|
|
clang-[3456].[0-9]-m??)
|
|
v=${BM_C:6:3}; CC="clang-$v"; CXX="clang++-$v"; SCAN_BUILD="scan-build-$v" ;;
|
|
clang-[789]-m??)
|
|
v=${BM_C:6:1}; CC="clang-$v"; CXX="clang++-$v"; SCAN_BUILD="scan-build-$v" ;;
|
|
clang-1[0-9]-m??)
|
|
v=${BM_C:6:2}; CC="clang-$v"; CXX="clang++-$v"; SCAN_BUILD="scan-build-$v" ;;
|
|
gcc | gcc-m?? | gcc-mx32)
|
|
CC="gcc"; CXX="g++" ;; # standard system compiler
|
|
gcc-[34].[0-9]-m?? | gcc-[34].[0-9]-mx32)
|
|
v=${BM_C:4:3}; CC="gcc-$v"; CXX="g++-$v" ;;
|
|
gcc-[56789]-m?? | gcc-[56789]-mx32)
|
|
v=${BM_C:4:1}; CC="gcc-$v"; CXX="g++-$v" ;;
|
|
gcc-1[0-9]-m?? | gcc-1[0-9]-mx32)
|
|
v=${BM_C:4:2}; CC="gcc-$v"; CXX="g++-$v" ;;
|
|
esac
|
|
fi
|
|
fi
|
|
fi # generic
|
|
case $BM_C in
|
|
clang*-m32) CC="$CC -m32"; CXX="$CXX -m32" ;;
|
|
clang*-m64) CC="$CC -m64"; CXX="$CXX -m64" ;;
|
|
gcc*-m32) CC="$CC -m32"; CXX="$CXX -m32" ;;
|
|
gcc*-m64) CC="$CC -m64"; CXX="$CXX -m64" ;;
|
|
gcc*-mx32) CC="$CC -mx32"; CXX="$CXX -mx32"; BUILD_LOCAL_UCL=1; BUILD_LOCAL_ZLIB=1 ;;
|
|
esac
|
|
if [[ $BM_C =~ (^|\-)(clang|gcc)($|\-) ]]; then
|
|
CC="$CC -std=gnu89"
|
|
fi
|
|
unset v x
|
|
export AR CC CXX
|
|
fi # CC_OVERRIDE
|
|
|
|
# source dirs
|
|
[[ -z $upx_SRCDIR ]] && upx_SRCDIR=$(readlink -mn -- $argv0dir/..)
|
|
[[ -z $ucl_SRCDIR ]] && ucl_SRCDIR=$(readlink -mn -- $upx_SRCDIR/../deps/ucl-1.03)
|
|
[[ -z $upx_testsuite_SRCDIR ]] && upx_testsuite_SRCDIR=$(readlink -mn -- $upx_SRCDIR/../deps/upx-testsuite)
|
|
[[ -z $zlib_SRCDIR ]] && zlib_SRCDIR=$(readlink -mn -- $upx_SRCDIR/../deps/zlib-1.2.11)
|
|
|
|
# build dirs
|
|
mkbuilddirs() {
|
|
local d
|
|
for d in "$@"; do
|
|
mkdir -p -v "$d" || exit 1
|
|
[[ -f "$d/.mfxnobackup" ]] || touch "$d/.mfxnobackup"
|
|
done
|
|
}
|
|
# search for an existing $toptop_builddir
|
|
if [[ -z $toptop_builddir ]]; then
|
|
for d in . ..; do
|
|
for subdir in "local" appveyor circle github gitlab travis .; do
|
|
dd=$d/build/$subdir
|
|
if [[ -d $dd ]]; then
|
|
toptop_builddir=$(readlink -en -- "$dd")
|
|
break 2
|
|
fi
|
|
done
|
|
done
|
|
unset d subdir dd
|
|
fi
|
|
[[ -z $toptop_builddir ]] && toptop_builddir=$(readlink -mn -- ./build)
|
|
[[ -z $toptop_bdir ]] && toptop_bdir=$(readlink -mn -- "$toptop_builddir/${BM_CROSS:+$BM_CROSS-}$BM_C/$BM_B")
|
|
[[ -z $upx_BUILDDIR ]] && upx_BUILDDIR=$(readlink -mn -- "$toptop_bdir/upx")
|
|
[[ -z $ucl_BUILDDIR ]] && ucl_BUILDDIR=$(readlink -mn -- "$toptop_bdir/ucl-1.03")
|
|
[[ -z $upx_testsuite_BUILDDIR ]] && upx_testsuite_BUILDDIR=$(readlink -mn -- "$toptop_bdir/upx-testsuite")
|
|
[[ -z $zlib_BUILDDIR ]] && zlib_BUILDDIR=$(readlink -mn -- "$toptop_bdir/zlib-1.2.11")
|
|
[[ -z $lcov_OUTPUTDIR ]] && lcov_OUTPUTDIR=$(readlink -mn -- "$toptop_bdir/.lcov-results")
|
|
unset toptop_builddir toptop_bdir
|
|
|
|
# ensure absolute directories
|
|
make_absolute() {
|
|
local d
|
|
while [[ $# -gt 0 ]]; do
|
|
if [[ -n ${!1} ]]; then
|
|
d=$(readlink -mn -- "${!1}")
|
|
eval $1="$d"
|
|
fi
|
|
shift
|
|
done
|
|
}
|
|
for var_prefix in ucl upx upx_testsuite zlib; do
|
|
for var_suffix in _BUILDDIR _SRCDIR; do
|
|
make_absolute ${var_prefix}${var_suffix}
|
|
done
|
|
done
|
|
make_absolute lcov_OUTPUTDIR
|
|
unset var_prefix var_suffix
|
|
|
|
print_header() {
|
|
local x="==========="; x="$x$x$x$x$x$x$x"
|
|
echo -e "\n${x}\n${1}\n${x}\n"
|
|
}
|
|
|
|
print_settings() {
|
|
local v var_prefix var_suffix
|
|
# Build Matrix
|
|
for v in TRAVIS_OS_NAME BM_CROSS BM_C BM_B BM_T; do
|
|
[[ -n ${!v} ]] && echo "${v}='${!v}'"
|
|
done
|
|
# BM_C related
|
|
for v in AR CC CXX CPPFLAGS CFLAGS CXXFLAGS LDFLAGS LIBS SCAN_BUILD; do
|
|
[[ -n ${!v} ]] && echo "${v}='${!v}'"
|
|
v=EXTRA_${v}
|
|
[[ -n ${!v} ]] && echo "${v}='${!v}'"
|
|
done
|
|
# directories and other info
|
|
for v in TRAVIS_XCODE_SDK UPX_UCLDIR lcov_OUTPUTDIR; do
|
|
[[ -n ${!v} ]] && echo "${v}='${!v}'"
|
|
done
|
|
for var_prefix in ucl upx upx_testsuite zlib; do
|
|
for var_suffix in _BUILDDIR _SRCDIR; do
|
|
v=${var_prefix}${var_suffix}
|
|
[[ -n ${!v} ]] && echo "${v}='${!v}'"
|
|
done
|
|
done
|
|
##env | LC_ALL=C sort
|
|
}
|
|
|
|
fix_home_ssh_perms() {
|
|
if [[ -d ~/.ssh ]]; then
|
|
if [[ -x /usr/sbin/restorecon ]]; then
|
|
/usr/sbin/restorecon -v -R ~/.ssh || true
|
|
fi
|
|
chmod -c -R go-rwx ~/.ssh || true
|
|
fi
|
|
}
|
|
|
|
true
|