Simplify mfcalc error handling
[bison.git] / .travis.yml
blobe51ebc4a31a3dd0bdd9c601ecdb399403addfba0
1 # Travis defines and exports CC and CXX *after* we have defined our
2 # environment variables via 'env'.  So, do not use 'env' to define them.
3 # Instead, put their definitions in MATRIX_EVAL, which we eval after the
4 # definitions from Travis.
5 language: cpp
7 env:
8   global:
9     # ICC serial number.
10     # See https://github.com/nemequ/icc-travis.
11     secure: B3manbbi0anCAGDJTdAa9TlodzRHeiYD87FKmFzS877dPm8Cm0BDvtUhKBUpBvP8+nbHOWFGrgDmLugSZjTGU+mAxtuQpamUFHvinu0BIk3qtjlqouwvbtIqUu8iiZ3Uqu+xKeAANKRy0YVZGLlEb9F3N119tJ/Fxp1p9bXL1qph+CZ25OFbUgZ2s4F+/AyHMUxJlNXKFe3Qean65hC6edhU3zoaKzr/g/wtbhRmcyWbkOa1dJqzr2yKotcPvrnApGhDzgMKFtohg/t7xfMADDVv6sGS5XNpt25Z+MUCmLg4Z9eD7u109jvRV1eu/jgVafqsthWEhXbuMiFgFhKBKGCNZ0dACIfKZSkFZI6FdM7ovJ6aNhSlxZ2169Ybd22rN1UTHeCQWySPcVVOg5taLVpqe+E8Xhnv4hBO5NrzElWwCMLxIdPUSwVStYvtDr8ZytHWzfot50vSnFKIFpTOr9hP4+AJMVmmqJfaJo2MLBft/q2xkztrMv3lQSj3m4+ma9kPDwXIu9uCutjlnhc00jNx9qegi5VfpAjxcG1R+pX4T20az6ByHk/7LPQsANkT31RJq/jAeD9LEuMOy8miha83q4QuvbFaqPK3PY0el/O1LZaXqLsV2aQ0uqH8YX0l4r5NzHdhb+3lYgvpMBO5ytr/EWJiEyNYV518050IUDE=
13 # Run in two steps:
14 # 1. Build the tarball
15 #    On a modern distro, with all the needed dependencies, including the whole git history.
16 # 2. Check it on various environments.
17 #    Less dependencies, and little git content (we would like to have none, but it's not
18 #    an option on Travis).
19 stages:
20   - compile
21   - test
23 # The 'test' jobs do not need the repo at all, only the 'compile'
24 # does.  Let's save time, bandwith, energy, and polar bears.
25 git:
26   clone: false
28 # matrix.include and jobs.include are aliases
29 # (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/).
30 jobs:
31   include:
32     - stage: compile
33       name: "Make dist"
34       git:
35         clone: true
36       dist: bionic
37       script:
38         - sudo apt-get install -qq autoconf automake autopoint flex gettext graphviz help2man m4 texinfo
39         - autoconf --version
40         - automake --version
41         - autopoint --version
42         - dot -V
43         - gettext --version
44         - help2man --version
45         - makeinfo --version
46         - m4 --version
48         # Travis makes a shallow clone, but we need it in full to build the ChangeLog and apply the fixes in git-log-fix.
49         - git fetch --unshallow || true
50         - git submodule update --init --recursive
52         - ./bootstrap
53         # gnulib-po/Makefile.in.in is about Gettext 0.20, which is not available in bionic.  So it will break here.  Override it.  Don't use autopoint, which sends some other files in the past.
54         - cp po/Makefile.in.in gnulib-po
56         - ./configure --enable-gcc-warnings || { cat config.log && false; }
57         - make -j2
58         - make -j2 dist
59         # Can help understanding why we get "dirty" tarballs.
60         - git status
61         - dist=$(echo bison*.xz)
63         # Unfortunately we cannot deterministically know the name of the tarball without the full
64         # git history (because git describe --abbrev=4 may use more than 4 characters if there are
65         # conflicts).
66         #
67         # So for the sake of the 'test' jobs (that don't even have the repo at all), also expose this
68         # tarball on a name that only depends on the Travis build number.
69         #
70         # Without -b -, exit status is always 0.
71         #
72         # If we rerun a job that was already uploaded, 'ln -s' will fail: remove beforehand.
73         - 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"
75     ## ------- ##
76     ## First.  ##
77     ## ------- ##
79     # Start with three completely different environments, to get
80     # errors asap.
82     - name: "GCC 8 -O3"
83       stage: test
84       os: linux
85       dist: bionic
86       addons:
87         apt:
88           packages:
89             - g++-8
90       env:
91         - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'"
93     # ASAN is time consuming, and we timeout the 50min granted by
94     # Travis if we run all the tests in one go.  Run in two parts.
95     - name: "Clang 8 libc++ and ASAN part 1"
96       stage: test
97       os: linux
98       dist: bionic
99       addons: &clang8
100         apt:
101           sources:
102             - llvm-toolchain-bionic-8
103             - ubuntu-toolchain-r-test
104           packages:
105             - clang-8
106             - libc++-8-dev
107             - libc++abi-8-dev
108       env:
109         # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
110         - MATRIX_EVAL="PART=1 CC='clang-8 -fsanitize=address' CXX='clang++-8 -fsanitize=address -stdlib=libc++'"
112     - name: "Clang 8 libc++ and ASAN part 2"
113       stage: test
114       os: linux
115       dist: bionic
116       addons: *clang8
117       env:
118         # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
119         - MATRIX_EVAL="PART=2 CC='clang-8 -fsanitize=address' CXX='clang++-8 -fsanitize=address -stdlib=libc++'"
121     # Currently no longer works (https://github.com/nemequ/icc-travis/issues/15).
122     # - name: "ICC"
123     #   stage: test
124     #   # We need the build-aux/install-icc.sh script.
125     #   git:
126     #     clone: true
127     #     submodules: false
128     #     depth: 1
129     #   os: linux
130     #   dist: xenial
131     #   env:
132     #     # ICC's warnings are often very wrong (e.g., it thinks foo ?
133     #     # "bar" : "baz" is char* instead of const char*), so don't try
134     #     # to work around the, and obviously, don't die on them.
135     #     - MATRIX_EVAL="CC=icc && CXX=icpc"
136     #     - MAKE_ARGS='WERROR_CFLAGS= WERROR_CXXFLAGS='
139     ## ----- ##
140     ## GCC.  ##
141     ## ----- ##
143     - name: "GCC 7 with sanitizers"
144       os: linux
145       dist: bionic
146       addons:
147         apt:
148           packages:
149             - g++-7
150       env:
151         - MATRIX_EVAL="CC='gcc-7 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-7 -fsanitize=undefined,address -fno-omit-frame-pointer'"
152         - PART=1
154     - name: "GCC 7"
155       stage: test
156       os: linux
157       dist: bionic
158       addons:
159         apt:
160           packages:
161             - g++-7
162       env:
163         - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
165     - name: "GCC 6"
166       stage: test
167       os: linux
168       dist: xenial
169       addons:
170         apt:
171           sources:
172             - ubuntu-toolchain-r-test
173           packages:
174             - g++-6
175       env:
176         - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
178     - name: "GCC 5"
179       stage: test
180       os: linux
181       dist: xenial
182       addons:
183         apt:
184           sources:
185             - ubuntu-toolchain-r-test
186           packages:
187             - g++-5
188       env:
189          - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
191     - name: "GCC 4.9"
192       stage: test
193       os: linux
194       dist: xenial
195       addons:
196         apt:
197           sources:
198             - ubuntu-toolchain-r-test
199           packages:
200             - g++-4.9
201       env:
202          - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
204     - name: "GCC 4.8"
205       stage: test
206       os: linux
207       dist: xenial
208       addons:
209         apt:
210           sources:
211             - ubuntu-toolchain-r-test
212           packages:
213             - g++-4.8
214       env:
215          - MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8"
217     - name: "GCC 4.7"
218       stage: test
219       os: linux
220       dist: xenial
221       addons:
222         apt:
223           sources:
224             - ubuntu-toolchain-r-test
225           packages:
226             - g++-4.7
227       env:
228          - MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7"
230     - name: "GCC 4.6"
231       stage: test
232       os: linux
233       dist: xenial
234       addons:
235         apt:
236           sources:
237             - ubuntu-toolchain-r-test
238           packages:
239             - g++-4.6
240       env:
241          - MATRIX_EVAL="CC=gcc-4.6 && CXX=g++-4.6"
243     ## ------- ##
244     ## Clang.  ##
245     ## ------- ##
247     - name: "Clang 7 -O3 and libc++"
248       stage: test
249       os: linux
250       dist: bionic
251       addons:
252         apt:
253           sources:
254             - llvm-toolchain-bionic-7
255             - ubuntu-toolchain-r-test
256           packages:
257             - clang-7
258             - libc++-7-dev
259             - libc++abi-7-dev
260       env:
261         - MATRIX_EVAL="CC=clang-7 && CXX='clang++-7 -stdlib=libc++'"
262         - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
264     - name: "Clang 6 -O3 and libc++"
265       stage: test
266       os: linux
267       dist: xenial
268       addons:
269         apt:
270           sources:
271             - llvm-toolchain-xenial-6.0
272             - ubuntu-toolchain-r-test
273           packages:
274             - clang-6.0
275             - libc++-dev
276       env:
277         - MATRIX_EVAL="CC=clang-6.0 && CXX='clang++-6.0 -stdlib=libc++'"
278         - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
280     - name: "Clang 5"
281       stage: test
282       os: linux
283       dist: xenial
284       addons:
285         apt:
286           sources:
287             - llvm-toolchain-xenial-5.0
288           packages:
289             - clang-5.0
290             - libc++-dev
291       env:
292         - MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'"
294     - name: "Clang 4"
295       stage: test
296       os: linux
297       dist: xenial
298       addons:
299         apt:
300           sources:
301             - llvm-toolchain-xenial-4.0
302           packages:
303             - clang-4.0
304       env:
305         - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
307     - name: "Clang 3.9"
308       stage: test
309       os: linux
310       dist: xenial
311       addons:
312         apt:
313           sources:
314             - llvm-toolchain-xenial-3.9
315           packages:
316             - clang-3.9
317       env:
318         - MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9"
320     - name: "Clang 3.8"
321       stage: test
322       os: linux
323       dist: xenial
324       addons:
325         apt:
326           sources:
327             - ubuntu-toolchain-r-test
328             - llvm-toolchain-precise-3.8
329           packages:
330             - clang-3.8
331       env:
332         - MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
334     - name: "CLang 3.7"
335       stage: test
336       os: linux
337       dist: xenial
338       addons:
339         apt:
340           sources:
341             - ubuntu-toolchain-r-test
342             - llvm-toolchain-precise-3.7
343           packages:
344             - clang-3.7
345       env:
346         - MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7"
348     - name: "Clang 3.6"
349       stage: test
350       os: linux
351       dist: xenial
352       addons:
353         apt:
354           sources:
355             - ubuntu-toolchain-r-test
356             - llvm-toolchain-precise-3.6
357           packages:
358             - clang-3.6
359       env:
360         - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6"
362     - name: "Clang 3.5"
363       stage: test
364       os: linux
365       dist: xenial
366       addons:
367         apt:
368           sources:
369             - ubuntu-toolchain-r-test
370             - llvm-toolchain-precise-3.5
371           packages:
372             - clang-3.5
373       env:
374         - MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5"
376     - name: "Clang 3.4"
377       stage: test
378       os: linux
379       # Not available on Xenial.
380       dist: trusty
381       addons:
382         apt:
383           packages:
384             - clang-3.4
385       env:
386         # No versioned name installed, but beware that Travis installs
387         # a more modern clang earlier in the default PATH.
388         - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
390     - name: "Clang 3.3"
391       stage: test
392       os: linux
393       # Not available on Xenial.
394       dist: trusty
395       addons:
396         apt:
397           packages:
398             - clang-3.3
399       env:
400         # See comment for 3.4.
401         - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
403 ## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor.
404 ## Applies to Travis too.  Applied to all the 'script's (of all the jobs).
405 before_script:
406   - 'which ssh-agent || ( sudo apt-get install openssh-client -y )'
407   - eval "$(ssh-agent -s)"
408   # $SSH_PRIVATE_KEY is multiline.  Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'.
409   - echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa
410   - chmod 600 /tmp/key.id_rsa
411   - ssh-add /tmp/key.id_rsa </dev/null
412   - mkdir -p ~/.ssh
413   - chmod 700 ~/.ssh
414   - echo '|1|bpc51UGxoDZjCPiwRlCStW32trI=|rfh6mLoLZv/vAvOVrpZXI1hTLxg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIR+ckMoJTNXHvAQLHWSfrRnrNJGW2ZR6kr5pBVDGCkz1v1RcQ5rleq0NAt9kS3v4hgnuLiEVnK7KDRzcEH3ikc=' >>~/.ssh/known_hosts
415   - chmod 600 ~/.ssh/known_hosts
417 # Applies only to the jobs that don't have a 'script', i.e., applies to all the 'test' jobs, but not the 'compile' one.
418 script:
419   - eval "$MATRIX_EVAL"
420   # Beware not too leak $SSH_PRIVATE_KEY.
421   # - env
422   - sudo apt-get install -qq doxygen flex m4
423   # Install and activate ICC.
424   - if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi
425   - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
426   # Install and activate dmd.
427   - mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh
428   - source $(source ~/dlang/install.sh dmd -a)
430   - $CC --version
431   - $CXX --version
432   - dmd --version
433   - doxygen --version
434   - flex --version
435   - ld --version
436   - m4 --version
438   - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
439   # Unset this variable, otherwise, Java programs' stderr is cluttered
440   # with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes
441   # the test suite fail.
442   - unset _JAVA_OPTIONS
444   # Fail fast from now on.
445   - set -e
446   - sftp bison@sftp.lrde.epita.fr:bison-$TRAVIS_BUILD_NUMBER.tar.xz
447   - tar xf bison-$TRAVIS_BUILD_NUMBER.tar.xz
448   - dir=$(tar tf bison-$TRAVIS_BUILD_NUMBER.tar.xz | sed 1q)
449   - cd $dir
450   - mkdir _build
451   - cd _build
452   - ../configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
453   - make -j2 $MAKE_ARGS
454   - if test ${PART-1} = 1; then make check                  VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi
455   - if test ${PART-2} = 2; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
456   - if test ${PART-2} = 2; then make maintainer-check-g++   VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
458 after_script:
459   - uninstall_intel_software || true