language: cpp sudo: false branches: except: - /dev-appveyor.*/ common_sources: &all_sources - ubuntu-toolchain-r-test - llvm-toolchain-trusty - llvm-toolchain-trusty-3.9 - llvm-toolchain-trusty-4.0 - llvm-toolchain-trusty-5.0 - llvm-toolchain-trusty-6.0 matrix: include: # 1/ Linux Clang Builds - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-3.5'] env: COMPILER='clang++-3.5' - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-3.6'] env: COMPILER='clang++-3.6' # Clang 3.7 is intentionally skipped as we cannot get it easily on # TravisCI container - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['lcov', 'clang-3.8'] env: COMPILER='clang++-3.8' - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-3.9'] env: COMPILER='clang++-3.9' - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-4.0'] env: COMPILER='clang++-4.0' - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-5.0'] env: COMPILER='clang++-5.0' - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-6.0'] env: COMPILER='clang++-6.0' # 2/ Linux GCC Builds - os: linux compiler: gcc addons: apt: sources: *all_sources packages: ['g++-4.8'] env: COMPILER='g++-4.8' - os: linux compiler: gcc addons: apt: sources: *all_sources packages: ['g++-4.9'] env: COMPILER='g++-4.9' - os: linux compiler: gcc addons: apt: sources: *all_sources packages: ['g++-5'] env: COMPILER='g++-5' - os: linux compiler: gcc addons: &gcc6 apt: sources: *all_sources packages: ['g++-6'] env: COMPILER='g++-6' - os: linux compiler: gcc addons: &gcc7 apt: sources: *all_sources packages: ['g++-7'] env: COMPILER='g++-7' - os: linux compiler: gcc addons: &gcc8 apt: sources: *all_sources packages: ['g++-8'] env: COMPILER='g++-8' # 3b/ Linux C++14 Clang builds # Note that we need newer libstdc++ for C++14 support - os: linux compiler: clang addons: apt: packages: ['clang-3.8', 'libstdc++-6-dev'] sources: - ubuntu-toolchain-r-test - llvm-toolchain-trusty env: COMPILER='clang++-3.8' CPP14=1 - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-3.9', 'libstdc++-6-dev'] env: COMPILER='clang++-3.9' CPP14=1 - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-4.0', 'libstdc++-6-dev'] env: COMPILER='clang++-4.0' CPP14=1 - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-5.0', 'libstdc++-6-dev'] env: COMPILER='clang++-5.0' CPP14=1 - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-6.0', 'libstdc++-6-dev'] env: COMPILER='clang++-6.0' CPP14=1 # 4a/ Linux C++14 GCC builds - os: linux compiler: gcc addons: *gcc6 env: COMPILER='g++-6' CPP14=1 - os: linux compiler: gcc addons: *gcc7 env: COMPILER='g++-7' CPP14=1 - os: linux compiler: gcc addons: *gcc8 env: COMPILER='g++-8' CPP14=1 # 5/ OSX Clang Builds - os: osx osx_image: xcode7.3 compiler: clang env: COMPILER='clang++' - os: osx osx_image: xcode8 compiler: clang env: COMPILER='clang++' - os: osx osx_image: xcode9 compiler: clang env: COMPILER='clang++' - os: osx osx_image: xcode9.1 compiler: clang env: COMPILER='clang++' - os: osx osx_image: xcode9.1 compiler: clang env: COMPILER='clang++' CPP14=1 # 6/ Special builds -- examples, coverage, valgrind, etc. - os: linux compiler: gcc addons: apt: sources: *all_sources packages: ['lcov', 'g++-7'] env: COMPILER='g++-7' CPP14=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1 - os: linux compiler: clang addons: apt: packages: ['clang-3.8', 'lcov'] sources: - ubuntu-toolchain-r-test - llvm-toolchain-trusty env: COMPILER='clang++-3.8' EXAMPLES=1 COVERAGE=1 EXTRAS=1 - os: linux compiler: gcc addons: apt: sources: *all_sources packages: ['valgrind', 'lcov', 'g++-7'] env: COMPILER='g++-7' CPP14=1 VALGRIND=1 - os: osx osx_image: xcode9.1 compiler: clang env: COMPILER='clang++' CPP14=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1 # 7/ C++17 builds - os: linux compiler: gcc addons: *gcc7 env: COMPILER='g++-7' CPP17=1 - os: linux compiler: gcc addons: *gcc7 env: COMPILER='g++-7' EXAMPLES=1 COVERAGE=1 EXTRAS=1 CPP17=1 - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-6.0', 'libstdc++-7-dev'] env: COMPILER='clang++-6.0' CPP17=1 - os: linux compiler: clang addons: apt: sources: *all_sources packages: ['clang-6.0', 'libstdc++-7-dev'] env: COMPILER='clang++-6.0' CPP17=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1 install: - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps" - mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR} - | if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then CMAKE_URL="http://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz" mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake export PATH=${DEPS_DIR}/cmake/bin:${PATH} elif [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then which cmake || brew install cmake; fi before_script: - export CXX=${COMPILER} - cd ${TRAVIS_BUILD_DIR} # Regenerate single header file, so it is tested in the examples... - python scripts/generateSingleHeader.py # Use Debug builds for running Valgrind and building examples - cmake -H. -BBuild-Debug -DCMAKE_BUILD_TYPE=Debug -Wdev -DUSE_CPP14=${CPP14} -DUSE_CPP17=${CPP17} -DCATCH_USE_VALGRIND=${VALGRIND} -DCATCH_BUILD_EXAMPLES=${EXAMPLES} -DCATCH_ENABLE_COVERAGE=${COVERAGE} -DCATCH_BUILD_EXTRA_TESTS=${EXTRAS} # Don't bother with release build for coverage build - cmake -H. -BBuild-Release -DCMAKE_BUILD_TYPE=Release -Wdev -DUSE_CPP14=${CPP14} script: - cd Build-Debug - make -j 2 - CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2 # Coverage collection does not work for OS X atm - | if [[ "${TRAVIS_OS_NAME}" == "linux" ]] && [[ "${COVERAGE}" == "1" ]]; then make gcov make lcov bash <(curl -s https://codecov.io/bash) -X gcov || echo "Codecov did not collect coverage reports" fi - # Go to release build - cd ../Build-Release - make -j 2 - CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2