# 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= # Run in two steps: # 1. Build the tarball # On a modern distro, with all the needed dependencies, including the whole git history. # 2. Check it on various environments. # Less dependencies, and little git content (we would like to have none, but it's not # an option on Travis). stages: - dist - check # The 'check' jobs do not need the repo at all, only the 'dist' # does. Let's save time, bandwith, energy, and polar bears. git: clone: false # matrix.include and jobs.include are aliases # (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/). jobs: include: - stage: dist name: "Make dist" git: clone: true dist: bionic script: - sudo apt-get install -qq autoconf automake autopoint flex gettext graphviz help2man m4 texinfo - autoconf --version - automake --version - autopoint --version - dot -V - gettext --version - help2man --version - makeinfo --version - m4 --version # Travis makes a shallow clone, but we need it in full to build the ChangeLog and apply the fixes in git-log-fix. - git fetch --unshallow || true - git submodule update --init --recursive - ./bootstrap - ./configure --enable-gcc-warnings || { cat config.log && false; } - make -j2 - make -j2 dist # Can help understanding why we get "dirty" tarballs. - git status - dist=$(echo bison*.xz) # Unfortunately we cannot deterministically know the name of the tarball without the full # git history (because git describe --abbrev=4 may use more than 4 characters if there are # conflicts). # # So for the sake of the 'check' jobs (that don't even have the repo at all), also expose this # tarball on a name that only depends on the Travis build number. # # Without -b -, exit status is always 0. # # If we rerun a job that was already uploaded, 'ln -s' will fail: remove beforehand. - sftp -b - bison@sftp.lrde.epita.fr <<< "put $dist"$'\n'"-rm bison-$TRAVIS_BUILD_NUMBER.tar.xz"$'\n'"ln -s $dist bison-$TRAVIS_BUILD_NUMBER.tar.xz" ## ------- ## ## First. ## ## ------- ## # Start with three completely different environments, to get # errors asap. - name: "GCC 9 -O3" stage: check os: linux dist: bionic addons: apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' packages: g++-9 env: - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9 && 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 one go. Run in two parts. - name: "Clang 9 libc++ and ASAN part 1" stage: check os: linux dist: bionic addons: &clang9 apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main' key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' packages: - clang-9 - libc++-9-dev - libc++abi-9-dev env: # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379 - MATRIX_EVAL="CC='clang-9 -fsanitize=address' CXX='clang++-9 -fsanitize=address -stdlib=libc++'" - PART=1 - name: "Clang 9 libc++ and ASAN part 2" stage: check os: linux dist: bionic addons: *clang9 env: # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379 - MATRIX_EVAL="CC='clang-9 -fsanitize=address' CXX='clang++-9 -fsanitize=address -stdlib=libc++'" - PART=2 # Currently no longer works (https://github.com/nemequ/icc-travis/issues/15). # - name: "ICC" # stage: check # # We need the build-aux/install-icc.sh script. # git: # clone: true # submodules: false # depth: 1 # 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 part 1" os: linux dist: bionic addons: apt: packages: g++-8 env: - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'" - CONFIGUREFLAGS='CFLAGS=-O1 CXXFLAGS=-O1' - PART=1 - name: "GCC 8" stage: check os: linux dist: bionic addons: apt: packages: g++-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - name: "GCC 7" stage: check os: linux dist: bionic addons: apt: packages: g++-7 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" - name: "GCC 6" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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 8 -O3" stage: check os: linux dist: bionic addons: apt: packages: - clang-8 - libc++-8-dev - libc++abi-8-dev env: - MATRIX_EVAL="CC=clang-8 && CXX='clang++-8 -stdlib=libc++'" - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3' - name: "Clang 7" stage: check os: linux dist: bionic addons: apt: packages: - clang-7 - libc++-7-dev - libc++abi-7-dev env: - MATRIX_EVAL="CC=clang-7 && CXX='clang++-7 -stdlib=libc++'" - name: "Clang 6 and libc++" stage: check 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++'" - name: "Clang 5" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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" stage: check 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++' ## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor. ## Applies to Travis too. Applied to all the 'script's (of all the jobs). before_script: - 'which ssh-agent || ( sudo apt-get install openssh-client -y )' - eval "$(ssh-agent -s)" # $SSH_PRIVATE_KEY is multiline. Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'. - echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa - chmod 600 /tmp/key.id_rsa - ssh-add /tmp/key.id_rsa