# Travis defines and exports CC and CXX *after* we have defined our # environment variables via 'env'. So, do not use 'env' to define # them. Instead, put their definitions in MATRIX_EVAL, which we eval # after the definitions from Travis. language: cpp env: global: # ICC serial number. # See https://github.com/nemequ/icc-travis. secure: B3manbbi0anCAGDJTdAa9TlodzRHeiYD87FKmFzS877dPm8Cm0BDvtUhKBUpBvP8+nbHOWFGrgDmLugSZjTGU+mAxtuQpamUFHvinu0BIk3qtjlqouwvbtIqUu8iiZ3Uqu+xKeAANKRy0YVZGLlEb9F3N119tJ/Fxp1p9bXL1qph+CZ25OFbUgZ2s4F+/AyHMUxJlNXKFe3Qean65hC6edhU3zoaKzr/g/wtbhRmcyWbkOa1dJqzr2yKotcPvrnApGhDzgMKFtohg/t7xfMADDVv6sGS5XNpt25Z+MUCmLg4Z9eD7u109jvRV1eu/jgVafqsthWEhXbuMiFgFhKBKGCNZ0dACIfKZSkFZI6FdM7ovJ6aNhSlxZ2169Ybd22rN1UTHeCQWySPcVVOg5taLVpqe+E8Xhnv4hBO5NrzElWwCMLxIdPUSwVStYvtDr8ZytHWzfot50vSnFKIFpTOr9hP4+AJMVmmqJfaJo2MLBft/q2xkztrMv3lQSj3m4+ma9kPDwXIu9uCutjlnhc00jNx9qegi5VfpAjxcG1R+pX4T20az6ByHk/7LPQsANkT31RJq/jAeD9LEuMOy8miha83q4QuvbFaqPK3PY0el/O1LZaXqLsV2aQ0uqH8YX0l4r5NzHdhb+3lYgvpMBO5ytr/EWJiEyNYV518050IUDE= matrix: include: ## ------- ## ## First. ## ## ------- ## # Start with three completely different environments, to get # errors asap. - name: "GCC 7 -O3" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'" # ASAN is time consuming, and we timeout the 50min granted by # Travis if we run all the tests in on go. Run in two parts. - name: "Clang 7 libc++ and ASAN part 1" os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-7 - ubuntu-toolchain-r-test packages: - clang-7 - libc++-7-dev - libc++abi-7-dev env: # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379 - MATRIX_EVAL="PART=1 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'" - name: "Clang 7 libc++ and ASAN part 2" os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-7 - ubuntu-toolchain-r-test packages: - clang-7 - libc++-7-dev - libc++abi-7-dev env: # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379 - MATRIX_EVAL="PART=2 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'" - name: "ICC" os: linux dist: xenial env: # ICC's warnings are often very wrong (e.g., it thinks foo ? # "bar" : "baz" is char* instead of const char*), so don't try # to work around the, and obviously, don't die on them. - MATRIX_EVAL="CC=icc && CXX=icpc" - MAKE_ARGS='WERROR_CFLAGS= WERROR_CXXFLAGS=' ## ----- ## ## GCC. ## ## ----- ## #- name: "GCC 8 with sanitizers" # os: linux # dist: xenial # addons: # apt: # sources: # - ubuntu-toolchain-r-test # packages: # - g++-8 # env: # # Can't use UBSAN: I get: # # configure:4951: gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer conftest.c # # /usr/bin/ld: unrecognized option '--push-state' (on trusty) # # /usr/bin/ld: unrecognized option '--push-state--no-as-needed' (on xenial) # # # # https://stackoverflow.com/questions/50024731/ suggests using the gold linker. # - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'" - name: "GCC 6" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-6 env: - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6" - name: "GCC 5" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-5 env: - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" - name: "GCC 4.9" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.9 env: - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9" - name: "GCC 4.8" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.8 env: - MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8" - name: "GCC 4.7" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.7 env: - MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7" - name: "GCC 4.6" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.6 env: - MATRIX_EVAL="CC=gcc-4.6 && CXX=g++-4.6" ## ------- ## ## Clang. ## ## ------- ## - name: "Clang 6 -O3 and libc++" os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-6.0 - ubuntu-toolchain-r-test packages: - clang-6.0 - libc++-dev env: - MATRIX_EVAL="CC=clang-6.0 && CXX='clang++-6.0 -stdlib=libc++'" - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3' - name: "Clang 5" os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-5.0 packages: - clang-5.0 - libc++-dev env: - MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'" - name: "Clang 4" os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-4.0 packages: - clang-4.0 env: - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0" - name: "Clang 3.9" os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-3.9 packages: - clang-3.9 env: - MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9" - name: "Clang 3.8" os: linux dist: xenial 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" - name: "CLang 3.7" os: linux dist: xenial 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" - name: "Clang 3.6" os: linux dist: xenial 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" - name: "Clang 3.5" os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.5 packages: - clang-3.5 env: - MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5" - name: "Clang 3.4" os: linux # Not available on Xenial. dist: trusty addons: apt: packages: - clang-3.4 env: # No versioned name installed, but beware that Travis installs # a more modern clang earlier in the default PATH. - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++' - name: "Clang 3.3" os: linux # Not available on Xenial. dist: trusty addons: apt: packages: - clang-3.3 env: # See comment for 3.4. - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++' before_install: - eval "$MATRIX_EVAL" - env - sudo apt-get update -qq - sudo apt-get install -qq autoconf automake autopoint doxygen flex gettext graphviz help2man m4 texinfo - if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi # Install and activate dmd - mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh - source $(source ~/dlang/install.sh dmd -a) - autoconf --version - automake --version - autopoint --version - $CC --version - $CXX --version - dmd --version - doxygen --version - flex --version - gettext --version - dot -V - help2man --version - ld --version - m4 --version - makeinfo --version script: - git tag -l # For some reasons, sometimes the checkout does not have any tags, # so `git describe` fails, so bootstrap fails. - git describe || git tag v3.0 -m "Fake version 3.0." - git describe # Unset this variable, otherwise, Java programs' stderr is cluttered # with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes # the test suite fail. - unset _JAVA_OPTIONS - ./bootstrap - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi - ./configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; } - make -j2 $MAKE_ARGS - if test ${PART-1} = 1; then make check VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi - if test ${PART-1} = 1; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi - if test ${PART-2} = 2; then make maintainer-check-g++ VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi after_script: - if [[ $CC == "icc" ]]; then uninstall_intel_software; fi