diff --git a/.travis.yml b/.travis.yml index afdd6690..02cc2af7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,38 @@ sudo: false language: cpp +notifications: + email: false + branches: only: - devel - travis +addons: + sources: &apt_sources + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.5 + - llvm-toolchain-precise-3.6 + - llvm-toolchain-precise-3.7 + - llvm-toolchain-precise-3.8 + +env: + global: + - C= B= + matrix: + - TRAVIS_EMPTY_JOB_WORKAROUND=true + matrix: + exclude: + - env: TRAVIS_EMPTY_JOB_WORKAROUND=true include: - os: linux compiler: clang env: C=clang-m32 B=debug addons: apt: - packages: - - g++-multilib - - zlib1g-dev:i386 + packages: [ "g++-multilib", "zlib1g-dev:i386" ] - os: linux compiler: clang env: C=clang-m64 B=debug @@ -24,20 +41,72 @@ matrix: env: C=clang-m32 addons: apt: - packages: - - g++-multilib - - zlib1g-dev:i386 + packages: [ "g++-multilib", "zlib1g-dev:i386" ] - os: linux compiler: clang env: C=clang-m64 + - os: linux + compiler: clang + env: C=clang-3.5-m32 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.5", "g++-6-multilib", "zlib1g-dev:i386" ] + - os: linux + compiler: clang + env: C=clang-3.5-m64 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.5" ] + - os: linux + compiler: clang + env: C=clang-3.6-m32 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.6", "g++-6-multilib", "zlib1g-dev:i386" ] + - os: linux + compiler: clang + env: C=clang-3.6-m64 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.6" ] + - os: linux + compiler: clang + env: C=clang-3.7-m32 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.7", "g++-6-multilib", "zlib1g-dev:i386" ] + - os: linux + compiler: clang + env: C=clang-3.7-m64 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.7" ] + - os: linux + compiler: clang + env: C=clang-3.8-m32 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.8", "g++-6-multilib", "zlib1g-dev:i386" ] + - os: linux + compiler: clang + env: C=clang-3.8-m64 + addons: + apt: + sources: *apt_sources + packages: [ "clang-3.8" ] - os: linux compiler: gcc env: C=gcc-m32 addons: apt: - packages: - - g++-multilib - - zlib1g-dev:i386 + packages: [ "g++-multilib", "zlib1g-dev:i386" ] - os: linux compiler: gcc env: C=gcc-m64 @@ -46,62 +115,62 @@ matrix: env: C=gcc-5-m32 addons: apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5-multilib - - zlib1g-dev:i386 + sources: *apt_sources + packages: [ "g++-5-multilib", "zlib1g-dev:i386" ] - os: linux compiler: gcc-5 env: C=gcc-5-m64 addons: apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 + sources: *apt_sources + packages: [ "g++-5" ] - os: linux compiler: gcc-6 env: C=gcc-6-m32 addons: apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6-multilib - - zlib1g-dev:i386 + sources: *apt_sources + packages: [ "g++-6-multilib", "zlib1g-dev:i386" ] - os: linux compiler: gcc-6 env: C=gcc-6-m64 addons: apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 + sources: *apt_sources + packages: [ "g++-6" ] - os: linux compiler: gcc-6 - # FIXME: linking fails - need updated binutils? - env: C=gcc-6-m64 B=sanitize ALLOW_FAIL=1 + env: C=gcc-6-m64 B=debug+sanitize addons: apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-6 + sources: *apt_sources + packages: [ "g++-6" ] + - os: linux + compiler: gcc-6 + env: C=gcc-6-m64 B=debug+valgrind + addons: + apt: + sources: *apt_sources + packages: [ "g++-6", "valgrind" ] - os: osx compiler: clang - env: C=clang-m64 B=debug - #osx_image: xcode7 + env: C=clang-m32 + osx_image: xcode7.3 - os: osx compiler: clang - # FIXME: linking fails with "ld: internal error: atom not found" - env: C=clang-m64 B=release ALLOW_FAIL=1 - #osx_image: xcode7 + env: C=clang-m64 + osx_image: xcode7.3 + - os: osx + compiler: clang + env: C=clang-m32 + osx_image: xcode8 + - os: osx + compiler: clang + env: C=clang-m64 + osx_image: xcode8 install: - - DEPS_DIR="$TRAVIS_BUILD_DIR/deps" - - mkdir -p "$DEPS_DIR" && cd "$DEPS_DIR" + - DEPS_DIR="$TRAVIS_BUILD_DIR/deps"; mkdir -p "$DEPS_DIR" && cd "$DEPS_DIR" - wget --no-check-certificate -q -O - https://download.freenas.org/distfiles/ucl-1.03.tar.gz | tar -xz - git clone https://github.com/upx/upx-testsuite diff --git a/.travis_build.sh b/.travis_build.sh index cce03256..8e51cac4 100644 --- a/.travis_build.sh +++ b/.travis_build.sh @@ -10,6 +10,18 @@ BUILD_METHOD="$B" case $C in clang-m32) CC="clang -m32"; CXX="clang++ -m32" ;; clang-m64) CC="clang -m64"; CXX="clang++ -m64" ;; + clang-3.4-m32) CC="clang-3.4 -m32"; CXX="clang++-3.4 -m32" ;; + clang-3.4-m64) CC="clang-3.4 -m64"; CXX="clang++-3.4 -m64" ;; + clang-3.5-m32) CC="clang-3.5 -m32"; CXX="clang++-3.5 -m32" ;; + clang-3.5-m64) CC="clang-3.5 -m64"; CXX="clang++-3.5 -m64" ;; + clang-3.6-m32) CC="clang-3.6 -m32"; CXX="clang++-3.6 -m32" ;; + clang-3.6-m64) CC="clang-3.6 -m64"; CXX="clang++-3.6 -m64" ;; + clang-3.7-m32) CC="clang-3.7 -m32"; CXX="clang++-3.7 -m32" ;; + clang-3.7-m64) CC="clang-3.7 -m64"; CXX="clang++-3.7 -m64" ;; + clang-3.8-m32) CC="clang-3.8 -m32"; CXX="clang++-3.8 -m32" ;; + clang-3.8-m64) CC="clang-3.8 -m64"; CXX="clang++-3.8 -m64" ;; + clang-3.9-m32) CC="clang-3.9 -m32"; CXX="clang++-3.9 -m32" ;; + clang-3.9-m64) CC="clang-3.9 -m64"; CXX="clang++-3.9 -m64" ;; gcc-m32) CC="gcc -m32"; CXX="g++ -m32" ;; gcc-m64) CC="gcc -m64"; CXX="g++ -m64" ;; gcc-5-m32) CC="gcc-5 -m32"; CXX="g++-5 -m32" ;; @@ -71,23 +83,27 @@ mkdir -p "$BUILD_DIR" # build UCL cd /; cd "$UPX_UCLDIR" || exit 1 -./configure --enable-static --disable-shared +./configure --enable-static --disable-shared --disable-asm make # build UPX cd /; cd "$BUILD_DIR" || exit 1 -f="EXTRA_CPPFLAGS=-DUCL_NO_ASM" -make="make -f $TRAVIS_BUILD_DIR/src/Makefile $f" +export EXTRA_CPPFLAGS="-DUCL_NO_ASM" +case $BUILD_METHOD in +*sanitize) case $CC in gcc*) export EXTRA_LDFLAGS="-fuse-ld=gold" ;; esac ;; +*valgrind) export EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS -DWITH_VALGRIND" ;; +esac +make="make -f $TRAVIS_BUILD_DIR/src/Makefile" if test "X$ALLOW_FAIL" = "X1"; then echo "ALLOW_FAIL=$ALLOW_FAIL" set +e fi case $BUILD_METHOD in -debug) +debug | debug+valgrind) $make USE_DEBUG=1 ;; debug+sanitize) $make USE_DEBUG=1 USE_SANITIZE=1 ;; -release) +release | release+valgrind | valgrind) $make ;; sanitize) $make USE_SANITIZE=1 ;; @@ -111,6 +127,9 @@ if test "X$TRAVIS_OS_NAME" = "Xosx"; then checksum=true # TODO: travis-osx does not have md5sum and friends? fi upx="$PWD/upx.out" +case $BUILD_METHOD in +*valgrind) upx="valgrind $upx" ;; +esac upx_391=false if test "X$TRAVIS_OS_NAME" = "Xlinux"; then cp "$TRAVIS_BUILD_DIR/deps/upx-testsuite/files/packed/amd64-linux.elf/upx-3.91" upx391.out