language: c git: depth: 5 addons: apt: packages: - libssl-dev - libevent-dev - libexpat-dev - clang homebrew: packages: - openssl - libevent - expat # homebrew update takes 20min or hangs, so disable update #update: true jobs: include: - os: linux name: GCC on Linux, Amd64 compiler: gcc arch: amd64 env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, Amd64, clang-analysis compiler: clang arch: amd64 env: - CONFIG_OPTS="--enable-debug --disable-flto" - TEST_ANALYZER=yes - os: osx osx_image: xcode12.2 name: Clang on OS X, Amd64, clang-analysis compiler: clang arch: amd64 env: - TEST_OSX=yes - CONFIG_OPTS="--enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl --with-libexpat=/usr/local/opt/expat" - TEST_ANALYZER=yes - HOMEBREW_NO_AUTO_UPDATE=1 - os: linux name: Libevent, GCC on Linux, Amd64 compiler: gcc arch: amd64 env: - TEST_LIBEVENT=yes - CONFIG_OPTS="--with-libevent" - os: linux name: Libevent, Clang on Linux, Amd64 compiler: clang arch: amd64 env: - TEST_LIBEVENT=yes - CONFIG_OPTS="--with-libevent" - os: osx osx_image: xcode12.2 name: Libevent, Clang on OS X, Amd64 compiler: clang arch: amd64 env: - TEST_OSX=yes - TEST_LIBEVENT=yes - CONFIG_OPTS="--disable-flto --with-ssl=/usr/local/opt/openssl --with-libevent=/usr/local/opt/libevent --with-libexpat=/usr/local/opt/expat" - HOMEBREW_NO_AUTO_UPDATE=1 - os: linux name: UBsan, GCC on Linux, Amd64 compiler: gcc arch: amd64 dist: bionic env: - TEST_UBSAN=yes - os: linux name: UBsan, Clang on Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_UBSAN=yes - os: linux name: Asan, GCC on Linux, Amd64 compiler: gcc arch: amd64 dist: bionic env: - TEST_ASAN=yes - os: linux name: Asan, Clang on Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ASAN=yes - os: linux name: GCC on Linux, Aarch64 compiler: gcc arch: arm64 dist: bionic env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, Aarch64 compiler: clang arch: arm64 dist: bionic env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: GCC on Linux, PowerPC64 compiler: gcc arch: ppc64le dist: bionic env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, PowerPC64 compiler: clang arch: ppc64le dist: bionic env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: GCC on Linux, s390x compiler: gcc arch: s390x dist: bionic env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: linux name: Clang on Linux, s390x compiler: clang arch: s390x dist: bionic env: - CONFIG_OPTS="--enable-debug --disable-flto" - os: osx osx_image: xcode12.2 name: Apple iPhone on iOS, armv7 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=armv7-apple-ios - OPENSSL_HOST=ios-cross - IOS_SDK=iPhoneOS - IOS_CPU=armv7s - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: Apple iPhone on iOS, arm64 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=aarch64-apple-ios - OPENSSL_HOST=ios64-cross - IOS_SDK=iPhoneOS - IOS_CPU=arm64 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: Apple TV on iOS, arm64 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=aarch64-apple-ios - OPENSSL_HOST=ios64-cross - IOS_SDK=AppleTVOS - IOS_CPU=arm64 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: Apple Watch on iOS, armv7 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=armv7-apple-ios - OPENSSL_HOST=ios-cross - IOS_SDK=WatchOS - IOS_CPU=armv7k - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: iPhoneSimulator on OS X, i386 env: - TEST_IOS=yes - AUTOTOOLS_HOST=i386-apple-ios - OPENSSL_HOST=iphoneos-cross - IOS_CPU=i386 - IOS_SDK=iPhoneSimulator - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: iPhoneSimulator on OS X, x86_64 env: - TEST_IOS=yes - AUTOTOOLS_HOST=x86_64-apple-ios - OPENSSL_HOST=iphoneos-cross - IOS_CPU=x86_64 - IOS_SDK=iPhoneSimulator - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: AppleTVSimulator on OS X, x86_64 env: - TEST_IOS=yes - AUTOTOOLS_HOST=x86_64-apple-ios - OPENSSL_HOST=iphoneos-cross - IOS_CPU=x86_64 - IOS_SDK=AppleTVSimulator - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: osx osx_image: xcode12.2 name: WatchSimulator on OS X, i386 env: - TEST_IOS=yes - AUTOTOOLS_HOST=i386-apple-ios - OPENSSL_HOST=iphoneos-cross - IOS_CPU=i386 - IOS_SDK=WatchSimulator - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" - HOMEBREW_NO_AUTO_UPDATE=1 - os: linux name: Android armv7a, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - AUTOTOOLS_HOST=armv7a-linux-androideabi - OPENSSL_HOST=android-arm - ANDROID_CPU=armv7a - ANDROID_API=23 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" - os: linux name: Android aarch64, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - AUTOTOOLS_HOST=aarch64-linux-android - OPENSSL_HOST=android-arm64 - ANDROID_CPU=aarch64 - ANDROID_API=23 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" - os: linux name: Android x86, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - AUTOTOOLS_HOST=i686-linux-android - OPENSSL_HOST=android-x86 - ANDROID_CPU=x86 - ANDROID_API=23 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" - os: linux name: Android x86_64, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - AUTOTOOLS_HOST=x86_64-linux-android - OPENSSL_HOST=android-x86_64 - ANDROID_CPU=x86_64 - ANDROID_API=23 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" allow_failures: - os: osx name: Apple iPhone on iOS, armv7 - os: osx name: Apple iPhone on iOS, arm64 - os: osx name: Apple TV on iOS, arm64 - os: osx name: Apple Watch on iOS, armv7 - os: osx name: iPhoneSimulator on OS X, i386 - os: osx name: iPhoneSimulator on OS X, x86_64 - os: osx name: AppleTVSimulator on OS X, x86_64 - os: osx name: WatchSimulator on OS X, i386 - os: linux name: Android armv7a, Linux, Amd64 - os: linux name: Android aarch64, Linux, Amd64 - os: linux name: Android x86, Linux, Amd64 - os: linux name: Android x86_64, Linux, Amd64 before_script: - | if [ "$TEST_ANDROID" = "yes" ]; then ./contrib/android/install_tools.sh elif [ "$TEST_IOS" = "yes" ]; then ./contrib/ios/install_tools.sh fi # The Travis docs say to avoid calling exit in the script. It leads to # some code duplication to avoid failures in cross-compiles. Also see # https://docs.travis-ci.com/user/job-lifecycle/ in the Travis docs. script: - | export MAKE_TEST="yes" if [ "$TEST_UBSAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover=all" elif [ "$TEST_ASAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" fi - | if [ "$TEST_IOS" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" source ./contrib/ios/setenv_ios.sh ./contrib/ios/install_openssl.sh ./contrib/ios/install_expat.sh export CONFIG_OPTS="\ --build=$AUTOTOOLS_BUILD --host=$AUTOTOOLS_HOST \ --prefix=$IOS_PREFIX \ --with-ssl=$IOS_PREFIX --disable-gost \ --with-libexpat=$IOS_PREFIX " echo CONFIG_OPTS ${CONFIG_OPTS} export MAKE_TEST=no export TEST_INSTALL=yes fi - | if [ "$TEST_ANDROID" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh source ./contrib/android/setenv_android.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh export CONFIG_OPTS="\ --build=$AUTOTOOLS_BUILD --host=$AUTOTOOLS_HOST \ --prefix=$ANDROID_PREFIX \ --with-ssl=$ANDROID_PREFIX --disable-gost \ --with-libexpat=$ANDROID_PREFIX " echo CONFIG_OPTS ${CONFIG_OPTS} export MAKE_TEST=no export TEST_INSTALL=yes fi - ./configure ${CONFIG_OPTS} - make -j 2 - | if [ "$MAKE_TEST" = "yes" ]; then make test fi - | if [ "$TEST_INSTALL" = "yes" ]; then make install fi - | if [ "$TEST_ANALYZER" = "yes" ]; then (cd testdata/clang-analysis.tdir; bash clang-analysis.test) fi