language: c sudo: required cache: directories: - $HOME/wolfssl-4.0.0-stable - $HOME/mesalink-1.0.0 - $HOME/nghttp2-1.39.2 env: global: - LD_LIBRARY_PATH=/usr/local/lib addons: apt: config: retries: true sources: &common_sources - ubuntu-toolchain-r-test packages: &common_packages - cmake - gcc-8 - valgrind - libev-dev - libc-ares-dev - g++-8 - libstdc++-8-dev - stunnel4 - libidn2-0-dev - gnutls-bin matrix: include: - os: linux compiler: gcc dist: trusty env: - T=normal C="--with-gssapi --with-libssh2" CHECKSRC=1 - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - krb5-user - libssh2-1-dev - os: linux compiler: gcc dist: trusty env: - T=normal C=--with-libssh - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libssh-dev - os: linux compiler: gcc dist: trusty env: - T=normal C="--disable-http --disable-smtp --disable-imap" - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" - os: linux compiler: gcc dist: trusty env: - T=normal C="--enable-ares" - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" - os: linux compiler: gcc dist: xenial env: - T=normal C="--disable-verbose" CPPFLAGS="-Wno-variadic-macros" NOTESTS=1 - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: xenial env: - T=novalgrind BORINGSSL=yes C="--with-ssl=$HOME/boringssl" LD_LIBRARY_PATH=/home/travis/boringssl/lib:/usr/local/lib - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: xenial env: - T=novalgrind BORINGSSL=yes QUICHE="yes" C="--with-ssl=$HOME/boringssl --with-quiche=$HOME/quiche/target/release --enable-alt-svc" LD_LIBRARY_PATH=/home/travis/boringssl/lib:$HOME/quiche/target/release:/usr/local/lib - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: xenial env: - T=novalgrind NGTCP2=yes C="--with-ssl=$HOME/ngbuild --with-ngtcp2=$HOME/ngbuild --with-nghttp3=$HOME/ngbuild --enable-alt-svc" NOTESTS= - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: xenial env: - T=debug-wolfssl C="--with-wolfssl --without-ssl" - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: xenial env: - T=debug-mesalink C="--with-mesalink --without-ssl" - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=debug - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=debug C="--enable-alt-svc" - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=debug C="--with-mbedtls --without-ssl" - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - libmbedtls-dev - os: linux compiler: clang dist: xenial env: - T=debug C="--with-gnutls --without-ssl" - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libgnutls28-dev - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=debug C="--disable-threaded-resolver" - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=debug C="--with-nss --without-ssl" NOTESTS=1 CPPFLAGS="-isystem /usr/include/nss" - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libnss3-dev - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: trusty env: - T=iconv - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" - os: osx compiler: gcc env: T=debug C=--with-libssh2 - os: osx compiler: gcc env: T=debug C="--disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp --disable-smb --disable-smtp --disable-telnet --disable-tftp --disable-unix-sockets --disable-shared --enable-debug --enable-maintainer-mode --without-brotli --without-gssapi --without-libidn2 --without-libmetalink --without-libpsl --without-librtmp --without-libssh2 --without-nghttp2 --without-ntlm-auth --without-ssl --without-zlib" - os: osx compiler: gcc env: T=debug C=--enable-ares - os: osx compiler: gcc env: T=debug C="--with-ssl=/usr/local/opt/openssl --with-libmetalink" - os: osx compiler: gcc env: T=debug C="--with-ssl=/usr/local/opt/libressl --with-libmetalink" - os: osx compiler: clang osx_image: xcode10 env: T=debug C="--without-ssl --with-darwinssl --with-libmetalink" - os: osx compiler: clang env: T=normal - os: osx compiler: clang env: T=cmake - os: linux compiler: gcc dist: xenial env: - T=cmake - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=cmake - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - os: linux compiler: gcc dist: xenial env: - T=coverage - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - lcov - libpsl-dev - libbrotli-dev - libssh2-1-dev - os: linux compiler: gcc dist: xenial env: - T=distcheck - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8" addons: apt: sources: - *common_sources packages: - *common_packages - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=fuzzer - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=tidy - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - clang-tidy-7 - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=scan-build - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev - os: linux compiler: clang dist: xenial env: - T=debug CFLAGS="-fsanitize=address,undefined,signed-integer-overflow -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g" LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer" LIBS="-ldl -lubsan" - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7" addons: apt: sources: - *common_sources - llvm-toolchain-xenial-7 packages: - *common_packages - clang-7 - libpsl-dev - libbrotli-dev before_install: - eval "${OVERRIDE_CC}" - eval "${OVERRIDE_CXX}" install: - if [ "$T" = "coverage" ]; then pip2 install --user cpp-coveralls; fi - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update > /dev/null; fi - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew reinstall libtool > /dev/null; fi - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install rtmpdump libssh2 c-ares libmetalink libressl nghttp2 libmetalink; fi before_script: - ./buildconf - | if [ "$NGTCP2" = yes ]; then (cd $HOME && git clone --depth 1 -b openssl-quic-draft-22 https://github.com/tatsuhiro-t/openssl possl && cd possl && ./config enable-tls1_3 --prefix=$HOME/ngbuild && make && make install_sw && cd .. && git clone --depth 1 https://github.com/ngtcp2/nghttp3 cd nghttp3 && autoreconf -i && ./configure --prefix=$HOME/ngbuild --enable-lib-only && make && make install && cd .. && git clone --depth 1 -b draft-22 https://github.com/ngtcp2/ngtcp2 && cd ngtcp2 && autoreconf -i && ./configure PKG_CONFIG_PATH=$HOME/ngbuild/lib/pkgconfig LDFLAGS="-Wl,-rpath,$HOME/ngbuild/lib" --prefix=$HOME/ngbuild && make && make install) fi - | if [ "$TRAVIS_OS_NAME" = linux -a "$BORINGSSL" ]; then (cd $HOME && git clone --depth=1 https://boringssl.googlesource.com/boringssl && cd boringssl && mkdir build && cd build && CXX="g++" CC="gcc" cmake -DCMAKE_BUILD_TYPE=release -DBUILD_SHARED_LIBS=1 .. && make && cd .. && mkdir lib && cd lib && cp ../build/crypto/libcrypto.so . && cp ../build/ssl/libssl.so . && echo "BoringSSL lib dir: "`pwd` && cd ../build && make clean && rm -f CMakeCache.txt && CXX="g++" CC="gcc" cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on .. && make && export LIBS=-lpthread ) fi - | if [ "$TRAVIS_OS_NAME" = linux -a "$QUICHE" ]; then (cd $HOME && git clone --depth=1 https://github.com/cloudflare/quiche.git && curl https://sh.rustup.rs -sSf | sh -s -- -y && source $HOME/.cargo/env && cd quiche && QUICHE_BSSL_PATH=$HOME/boringssl cargo build -v --release --features pkg-config-meta) fi - | if [ $TRAVIS_OS_NAME = linux ]; then if [ ! -e $HOME/wolfssl-4.0.0-stable/Makefile ]; then (cd $HOME && \ curl -LO https://github.com/wolfSSL/wolfssl/archive/v4.0.0-stable.tar.gz && \ tar -xzf v4.0.0-stable.tar.gz && \ cd wolfssl-4.0.0-stable && \ ./autogen.sh && \ ./configure --enable-tls13 --enable-all && \ touch wolfssl/wolfcrypt/fips.h && \ make) fi fi - | if [ $TRAVIS_OS_NAME = linux ]; then if [ ! -e $HOME/mesalink-1.0.0/Makefile ]; then (cd $HOME && \ curl https://sh.rustup.rs -sSf | sh -s -- -y && \ source $HOME/.cargo/env && \ curl -LO https://github.com/mesalock-linux/mesalink/archive/v1.0.0.tar.gz && \ tar -xzf v1.0.0.tar.gz && \ cd mesalink-1.0.0 && \ ./autogen.sh && \ ./configure --enable-tls13 && \ make) fi fi - | if [ $TRAVIS_OS_NAME = linux ]; then if [ ! -e $HOME/nghttp2-1.39.2/Makefile ]; then (cd $HOME && \ curl -L https://github.com/nghttp2/nghttp2/releases/download/v1.39.2/nghttp2-1.39.2.tar.gz | tar xzf - && \ cd nghttp2-1.39.2 && \ CXX="g++-8" CC="gcc-8" CFLAGS="" LDFLAGS="" LIBS="" ./configure --disable-threads --enable-app && \ make) fi fi - | if [ $TRAVIS_OS_NAME = linux ]; then (cd $HOME/wolfssl-4.0.0-stable && sudo make install) (cd $HOME/mesalink-1.0.0 && sudo make install) (cd $HOME/nghttp2-1.39.2 && sudo make install) fi script: - | set -eo pipefail if [ "$T" = "coverage" ]; then ./configure --enable-debug --disable-shared --disable-threaded-resolver --enable-code-coverage --enable-werror --enable-alt-svc --with-libssh2 make make TFLAGS=-n test-nonflaky make "TFLAGS=-n -e" test-nonflaky tests="1 200 300 500 700 800 900 1000 1100 1200 1302 1400 1502 3000" make "TFLAGS=-n -t $tests" test-nonflaky coveralls --gcov /usr/bin/gcov-8 --gcov-options '\-lp' -i src -e lib -e tests -e docs -b $PWD/src coveralls --gcov /usr/bin/gcov-8 --gcov-options '\-lp' -e src -i lib -e tests -e docs -b $PWD/lib fi - | set -eo pipefail if [ "$T" = "debug" ]; then ./configure --enable-debug --enable-werror $C make && make examples if [ -z $NOTESTS ]; then make TFLAGS=-n test-nonflaky fi fi - | set -eo pipefail if [ "$T" = "debug-wolfssl" ]; then ./configure --enable-debug --enable-werror $C make make "TFLAGS=-n !313" test-nonflaky fi - | set -eo pipefail if [ "$T" = "debug-mesalink" ]; then ./configure --enable-debug --enable-werror $C make make "TFLAGS=-n !313 !3001" test-nonflaky fi - | set -eo pipefail if [ "$T" = "novalgrind" ]; then ./configure --enable-werror $C make && make examples make TFLAGS=-n test-nonflaky fi - | set -eo pipefail if [ "$T" = "normal" ]; then if [ $TRAVIS_OS_NAME = linux ]; then # Remove system curl to make sure we don't rely on it. # Only done on Linux since we're not permitted to on mac. sudo rm -f /usr/bin/curl fi ./configure --enable-warnings --enable-werror $C make && make examples if [ -z $NOTESTS ]; then make test-nonflaky fi if [ -n $CHECKSRC ]; then make checksrc fi fi - | set -eo pipefail if [ "$T" = "tidy" ]; then ./configure --enable-warnings --enable-werror $C make && make tidy fi - | set -eo pipefail if [ "$T" = "iconv" ]; then source .travis-iconv-env.sh ./configure --enable-debug --enable-werror $C make && make examples make test-nonflaky fi - | set -eo pipefail if [ "$T" = "cmake" ]; then if [ $TRAVIS_OS_NAME = linux ]; then cmake -H. -Bbuild -DCURL_WERROR=ON && cmake --build build else cmake -H. -Bbuild -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON && cmake --build build fi fi - | set -eo pipefail if [ "$T" = "distcheck" ]; then # find BOM markers and exit if we do ! git grep `printf '\xef\xbb\xbf'` ./configure make ./maketgz 99.98.97 # verify in-tree build - and install it (tar xf curl-99.98.97.tar.gz && \ cd curl-99.98.97 && \ ./configure --prefix=$HOME/temp && \ make && \ make TFLAGS=1 test && \ make install) # basic check of the installed files bash scripts/installcheck.sh $HOME/temp rm -rf curl-99.98.97 # verify out-of-tree build (tar xf curl-99.98.97.tar.gz && \ touch curl-99.98.97/docs/{cmdline-opts,libcurl}/Makefile.inc && \ mkdir build && \ cd build && \ ../curl-99.98.97/configure && \ make && \ make TFLAGS='-p 1 1139' test) # verify cmake build rm -rf curl-99.98.97 (tar xf curl-99.98.97.tar.gz && \ cd curl-99.98.97 && \ mkdir build && \ cd build && \ cmake .. && \ make) fi - | set -eo pipefail if [ "$T" = "fuzzer" ]; then # Download the fuzzer to a temporary folder ./tests/fuzz/download_fuzzer.sh /tmp/curl_fuzzer export CURLSRC=$PWD # Run the mainline fuzzer test pushd /tmp/curl_fuzzer ./mainline.sh ${CURLSRC} popd fi - | if [ "$T" = "scan-build" ]; then scan-build ./configure --enable-debug --enable-werror $C scan-build --status-bugs make && scan-build --status-bugs make examples fi # whitelist branches to avoid testing feature branches twice (as branch and as pull request) branches: only: - master - /\/ci$/ notifications: email: false