language: cpp os: - linux - osx compiler: - gcc - clang env: - DEBUG="debug" COVERAGE="coverage" - DEBUG="nodebug" COVERAGE="nocoverage" - LINKING="static" before_install: - eval "${MATRIX_EVAL}" # Installing iwyu manually because clang and iwyu paths won't match on Ubuntu otherwise. - if [ "$IWYU" = "iwyu" ]; then CLANG_VERSION=`clang --version | grep version | cut -f3 -d' ' | cut -f1 -d'-'` ; CLANG_PKG_VERSION=`echo $CLANG_VERSION | cut -f1,2 -d'.'` CLANG_PREFIX_PATH="/usr/local/clang-${CLANG_VERSION}/lib/clang/${CLANG_VERSION}" ; CLANG_BIN_PATH="/usr/local/clang-${CLANG_VERSION}/bin" ; git clone https://github.com/include-what-you-use/include-what-you-use.git ; cd include-what-you-use ; echo "$CLANG_PKG_VERSION" | grep '\.[0-9]$' ; if [ $? -eq 0 ]; then git checkout clang_${CLANG_PKG_VERSION} ; else git checkout clang_${CLANG_PKG_VERSION}.0 ; fi; cd .. ; mkdir build_iwyu ; cd build_iwyu ; cmake -G "Unix Makefiles" -DCMAKE_PREFIX_PATH=$CLANG_PREFIX_PATH -DCMAKE_C_COMPILER=$CLANG_BIN_PATH/clang -DCMAKE_CXX_COMPILER=$CLANG_BIN_PATH/clang++ ../include-what-you-use ; make ; sudo make install ; cd .. ; fi - export LDFLAGS="$LDFLAGS -L/usr/local/lib -L/usr/lib" - export PATH=$PATH:/usr/local/lib - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib - export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/lib - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get install info install-info; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo pip install codecov; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo pip install gcovr; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get install cppcheck; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export CFLAGS='-mtune=generic'; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export IPV6_TESTS_ENABLED="true"; fi - curl https://s3.amazonaws.com/libhttpserver/libmicrohttpd_releases/libmicrohttpd-0.9.59.tar.gz -o libmicrohttpd-0.9.59.tar.gz - tar -xzf libmicrohttpd-0.9.59.tar.gz - cd libmicrohttpd-0.9.59 - ./configure --disable-examples - make - sudo make install - cd .. - if [ "$BUILD_TYPE" = "asan" ]; then export CFLAGS='-fsanitize=address'; export CXXLAGS='-fsanitize=address'; export LDFLAGS='-fsanitize=address'; fi - if [ "$BUILD_TYPE" = "msan" ]; then export CFLAGS='-fsanitize=memory'; export CXXLAGS='-fsanitize=memory'; export LDFLAGS='-fsanitize=memory'; fi - if [ "$BUILD_TYPE" = "lsan" ]; then export CFLAGS='-fsanitize=leak'; export CXXLAGS='-fsanitize=leak'; export LDFLAGS='-fsanitize=leak'; fi - if [ "$BUILD_TYPE" = "tsan" ]; then export CFLAGS='-fsanitize=thread'; export CXXLAGS='-fsanitize=thread'; export LDFLAGS='-fsanitize=thread'; fi - if [ "$BUILD_TYPE" = "ubsan" ]; then export export CFLAGS='-fsanitize=undefined'; export CXXLAGS='-fsanitize=undefined'; export LDFLAGS='-fsanitize=undefined'; fi install: - ./bootstrap - mkdir build - cd build - | if [ "$LINKING" = "static" ]; then ../configure --enable-static --disable-fastopen; elif [ "$DEBUG" = "debug" ] && [ "$COVERAGE" = "coverage" ]; then ../configure --enable-debug --enable-coverage --disable-shared --disable-fastopen; elif [ "$DEBUG" = "debug" ]; then ../configure --enable-debug --disable-shared --disable-fastopen; elif [ "$VALGRIND" = "valgrind" ]; then ../configure --enable-debug --disable-fastopen --disable-valgrind-helgrind --disable-valgrind-drd --disable-valgrind-sgcheck; elif [ "$IWYU" = "iwyu" ]; then ../configure --disable-examples; else ../configure --disable-fastopen; fi # Make or run iwyu. If running iwyu, check for the result code to be 2 (IWYU always returns an error code, if it is 2, no corrections are necessary). - | if [ "$IWYU" = "iwyu" ]; then make -k CXX='/usr/local/bin/include-what-you-use -Xiwyu --mapping_file=${top_builddir}/../custom_iwyu.imp' CXXFLAGS="-isystem ${CLANG_PREFIX_PATH}/include -std=c++11 -DHTTPSERVER_COMPILATION -D_REENTRANT $CXXFLAGS" ; if [ $? -ne 2 ]; then return 1; fi else make; fi script: - if [ "$IWYU" != "iwyu" ]; then make check; cat test/test-suite.log; fi - if [ "$VALGRIND" = "valgrind" ]; then make check-valgrind; fi; - if [ "$VALGRIND" = "valgrind" ]; then cat test/test-suite-memcheck.log; fi; - if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd ../src/; cppcheck --error-exitcode=1 .; cd ../build; fi - | if [ "$PERFORMANCE" = "select" ]; then cd examples ./benchmark_select 8080 $(nproc) & sleep 5 && ab -n 10000000 -c 100 localhost:8080/plaintext fi - | if [ "$PERFORMANCE" = "nodelay" ]; then cd examples ./benchmark_nodelay 8080 $(nproc) & sleep 5 && ab -n 10000000 -c 100 localhost:8080/plaintext fi - | if [ "$PERFORMANCE" = "threads" ]; then cd examples ./benchmark_threads 8080 & sleep 5 && ab -n 10000000 -c 100 localhost:8080/plaintext fi after_success: - if [ "$DEBUG" = "debug" ] && [ "$COVERAGE" = "coverage" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then bash <(curl -s https://codecov.io/bash); fi matrix: exclude: - compiler: clang env: DEBUG="debug" COVERAGE="coverage" include: - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: MATRIX_EVAL="BUILD_TYPE=asan && CC=clang-3.8 && CXX=clang++-3.8 && DEBUG=debug && COVERAGE=nocoverage" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: MATRIX_EVAL="BUILD_TYPE=msan && CC=clang-3.8 && CXX=clang++-3.8 && DEBUG=debug && COVERAGE=nocoverage" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: MATRIX_EVAL="BUILD_TYPE=lsan && CC=clang-3.8 && CXX=clang++-3.8 && DEBUG=debug && COVERAGE=nocoverage" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: MATRIX_EVAL="BUILD_TYPE=tsan && CC=clang-3.8 && CXX=clang++-3.8 && DEBUG=debug && COVERAGE=nocoverage" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: MATRIX_EVAL="BUILD_TYPE=ubsan && CC=clang-3.8 && CXX=clang++-3.8 && DEBUG=debug && COVERAGE=nocoverage" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-5 env: - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-6 env: - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-9 env: - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 - valgrind - valgrind-dbg env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && VALGRIND=valgrind" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 - apache2-utils env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && PERFORMANCE=select" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 - apache2-utils env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && PERFORMANCE=nodelay" - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 - apache2-utils env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && PERFORMANCE=threads" # works on Precise and Trusty - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.6 packages: - clang-3.6 env: - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6" # works on Precise and Trusty - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.7 packages: - clang-3.7 env: - MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7" # works on Precise and Trusty - os: linux addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: - MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8" # works on Trusty - os: linux addons: apt: sources: - llvm-toolchain-trusty-3.9 packages: - clang-3.9 env: - MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9" # works on Trusty - os: linux addons: apt: packages: - clang-4.0 env: - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0" # works on Trusty - os: linux addons: apt: packages: - clang-5.0 env: - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0" - os: linux addons: apt: packages: - clang-6.0 env: - MATRIX_EVAL="CC=clang-6.0 && CXX=clang++-6.0" - os: linux addons: apt: sources: - llvm-toolchain-xenial-7 - ubuntu-toolchain-r-test packages: - clang-7 env: - MATRIX_EVAL="CC=clang-7 && CXX=clang++-7" - os: linux addons: apt: sources: - llvm-toolchain-xenial-8 - ubuntu-toolchain-r-test packages: - clang-8 env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - os: linux addons: apt: sources: - llvm-toolchain-xenial-9 - ubuntu-toolchain-r-test - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main' key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' packages: - clang-9 env: - MATRIX_EVAL="CC=clang-9 && CXX=clang++-9" - os: linux compiler: clang addons: apt: sources: - llvm-toolchain-xenial-7 - ubuntu-toolchain-r-test packages: - iwyu - cmake - llvm-dev - libclang-dev env: - MATRIX_EVAL="IWYU=iwyu"