warnings: pacify ‘gcc -Wchar-subscripts’ in yacc.c
[bison.git] / .travis.yml
blob2b75c3d3853a8af3ecc2b561e2e4bf36f0e294dd
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   - dist
21   - check
23 # The 'check' jobs do not need the repo at all, only the 'dist'
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: dist
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         - ./configure --enable-gcc-warnings || { cat config.log && false; }
54         - make -j2
55         - make -j2 dist
56         # Can help understanding why we get "dirty" tarballs.
57         - git status
58         - dist=$(echo bison*.xz)
60         # Unfortunately we cannot deterministically know the name of the tarball without the full
61         # git history (because git describe --abbrev=4 may use more than 4 characters if there are
62         # conflicts).
63         #
64         # So for the sake of the 'check' jobs (that don't even have the repo at all), also expose this
65         # tarball on a name that only depends on the Travis build number.
66         #
67         # Without -b -, exit status is always 0.
68         #
69         # If we rerun a job that was already uploaded, 'ln -s' will fail: remove beforehand.
70         - 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"
72     ## ------- ##
73     ## First.  ##
74     ## ------- ##
76     # Start with three completely different environments, to get
77     # errors asap.
79     - name: "GCC 9 -O3"
80       stage: check
81       os: linux
82       dist: bionic
83       addons:
84         apt:
85           sources:
86             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
87             - sourceline: 'ppa:ubuntu-toolchain-r/test'
88           packages: g++-9
89       env:
90         - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'"
92     # ASAN is time consuming, and we timeout the 50min granted by
93     # Travis if we run all the tests in one go.  Run in two parts.
94     - name: "Clang 9 libc++ and ASAN part 1"
95       stage: check
96       os: linux
97       dist: bionic
98       addons: &clang9
99         apt:
100           sources:
101             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
102             - sourceline: 'ppa:ubuntu-toolchain-r/test'
103             - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main'
104               key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
105           packages:
106             - clang-9
107             - libc++-9-dev
108             - libc++abi-9-dev
109       env:
110         # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
111         - MATRIX_EVAL="CC='clang-9 -fsanitize=address' CXX='clang++-9 -fsanitize=address -stdlib=libc++'"
112         - PART=1
114     - name: "Clang 9 libc++ and ASAN part 2"
115       stage: check
116       os: linux
117       dist: bionic
118       addons: *clang9
119       env:
120         # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
121         - MATRIX_EVAL="CC='clang-9 -fsanitize=address' CXX='clang++-9 -fsanitize=address -stdlib=libc++'"
122         - PART=2
124     # Currently no longer works (https://github.com/nemequ/icc-travis/issues/15).
125     # - name: "ICC"
126     #   stage: check
127     #   # We need the build-aux/install-icc.sh script.
128     #   git:
129     #     clone: true
130     #     submodules: false
131     #     depth: 1
132     #   os: linux
133     #   dist: xenial
134     #   env:
135     #     # ICC's warnings are often very wrong (e.g., it thinks foo ?
136     #     # "bar" : "baz" is char* instead of const char*), so don't try
137     #     # to work around the, and obviously, don't die on them.
138     #     - MATRIX_EVAL="CC=icc && CXX=icpc"
139     #     - MAKE_ARGS='WERROR_CFLAGS= WERROR_CXXFLAGS='
142     ## ----- ##
143     ## GCC.  ##
144     ## ----- ##
146     - name: "GCC 8 with sanitizers part 1"
147       os: linux
148       dist: bionic
149       addons:
150         apt:
151           packages: g++-8
152       env:
153         - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'"
154         - CONFIGUREFLAGS='CFLAGS=-O1 CXXFLAGS=-O1'
155         - PART=1
157     - name: "GCC 8"
158       stage: check
159       os: linux
160       dist: bionic
161       addons:
162         apt:
163           packages: g++-8
164       env:
165         - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
167     - name: "GCC 7"
168       stage: check
169       os: linux
170       dist: bionic
171       addons:
172         apt:
173           packages: g++-7
174       env:
175         - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
177     - name: "GCC 6"
178       stage: check
179       os: linux
180       dist: xenial
181       addons:
182         apt:
183           sources: ubuntu-toolchain-r-test
184           packages: g++-6
185       env:
186         - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
188     - name: "GCC 5"
189       stage: check
190       os: linux
191       dist: xenial
192       addons:
193         apt:
194           sources: ubuntu-toolchain-r-test
195           packages: g++-5
196       env:
197          - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
199     - name: "GCC 4.9"
200       stage: check
201       os: linux
202       dist: xenial
203       addons:
204         apt:
205           sources: ubuntu-toolchain-r-test
206           packages: g++-4.9
207       env:
208          - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
210     - name: "GCC 4.8"
211       stage: check
212       os: linux
213       dist: xenial
214       addons:
215         apt:
216           sources: ubuntu-toolchain-r-test
217           packages: g++-4.8
218       env:
219          - MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8"
221     - name: "GCC 4.7"
222       stage: check
223       os: linux
224       dist: xenial
225       addons:
226         apt:
227           sources: ubuntu-toolchain-r-test
228           packages: g++-4.7
229       env:
230          - MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7"
232     - name: "GCC 4.6"
233       stage: check
234       os: linux
235       dist: xenial
236       addons:
237         apt:
238           sources: ubuntu-toolchain-r-test
239           packages: g++-4.6
240       env:
241          - MATRIX_EVAL="CC=gcc-4.6 && CXX=g++-4.6"
243     ## ------- ##
244     ## Clang.  ##
245     ## ------- ##
247     - name: "Clang 8 -O3"
248       stage: check
249       os: linux
250       dist: bionic
251       addons:
252         apt:
253           packages:
254             - clang-8
255             - libc++-8-dev
256             - libc++abi-8-dev
257       env:
258         - MATRIX_EVAL="CC=clang-8 && CXX='clang++-8 -stdlib=libc++'"
259         - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
261     - name: "Clang 7"
262       stage: check
263       os: linux
264       dist: bionic
265       addons:
266         apt:
267           packages:
268             - clang-7
269             - libc++-7-dev
270             - libc++abi-7-dev
271       env:
272         - MATRIX_EVAL="CC=clang-7 && CXX='clang++-7 -stdlib=libc++'"
274     - name: "Clang 6 and libc++"
275       stage: check
276       os: linux
277       dist: xenial
278       addons:
279         apt:
280           sources:
281             - llvm-toolchain-xenial-6.0
282             - ubuntu-toolchain-r-test
283           packages:
284             - clang-6.0
285             - libc++-dev
286       env:
287         - MATRIX_EVAL="CC=clang-6.0 && CXX='clang++-6.0 -stdlib=libc++'"
289     - name: "Clang 5"
290       stage: check
291       os: linux
292       dist: xenial
293       addons:
294         apt:
295           sources: llvm-toolchain-xenial-5.0
296           packages:
297             - clang-5.0
298             - libc++-dev
299       env:
300         - MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'"
302     - name: "Clang 4"
303       stage: check
304       os: linux
305       dist: xenial
306       addons:
307         apt:
308           sources: llvm-toolchain-xenial-4.0
309           packages: clang-4.0
310       env:
311         - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
313     - name: "Clang 3.9"
314       stage: check
315       os: linux
316       dist: xenial
317       addons:
318         apt:
319           sources: llvm-toolchain-xenial-3.9
320           packages: clang-3.9
321       env:
322         - MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9"
324     - name: "Clang 3.8"
325       stage: check
326       os: linux
327       dist: xenial
328       addons:
329         apt:
330           sources:
331             - ubuntu-toolchain-r-test
332             - llvm-toolchain-precise-3.8
333           packages: clang-3.8
334       env:
335         - MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
337     - name: "CLang 3.7"
338       stage: check
339       os: linux
340       dist: xenial
341       addons:
342         apt:
343           sources:
344             - ubuntu-toolchain-r-test
345             - llvm-toolchain-precise-3.7
346           packages: clang-3.7
347       env:
348         - MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7"
350     - name: "Clang 3.6"
351       stage: check
352       os: linux
353       dist: xenial
354       addons:
355         apt:
356           sources:
357             - ubuntu-toolchain-r-test
358             - llvm-toolchain-precise-3.6
359           packages: clang-3.6
360       env:
361         - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6"
363     - name: "Clang 3.5"
364       stage: check
365       os: linux
366       dist: xenial
367       addons:
368         apt:
369           sources:
370             - ubuntu-toolchain-r-test
371             - llvm-toolchain-precise-3.5
372           packages: clang-3.5
373       env:
374         - MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5"
376     - name: "Clang 3.4"
377       stage: check
378       os: linux
379       # Not available on Xenial.
380       dist: trusty
381       addons:
382         apt:
383           packages: clang-3.4
384       env:
385         # No versioned name installed, but beware that Travis installs
386         # a more modern clang earlier in the default PATH.
387         - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
389     - name: "Clang 3.3"
390       stage: check
391       os: linux
392       # Not available on Xenial.
393       dist: trusty
394       addons:
395         apt:
396           packages: clang-3.3
397       env:
398         # See comment for 3.4.
399         - MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
401 ## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor.
402 ## Applies to Travis too.  Applied to all the 'script's (of all the jobs).
403 before_script:
404   - 'which ssh-agent || ( sudo apt-get install openssh-client -y )'
405   - eval "$(ssh-agent -s)"
406   # $SSH_PRIVATE_KEY is multiline.  Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'.
407   - echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa
408   - chmod 600 /tmp/key.id_rsa
409   - ssh-add /tmp/key.id_rsa </dev/null
410   - mkdir -p ~/.ssh
411   - chmod 700 ~/.ssh
412   - echo '|1|bpc51UGxoDZjCPiwRlCStW32trI=|rfh6mLoLZv/vAvOVrpZXI1hTLxg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIR+ckMoJTNXHvAQLHWSfrRnrNJGW2ZR6kr5pBVDGCkz1v1RcQ5rleq0NAt9kS3v4hgnuLiEVnK7KDRzcEH3ikc=' >>~/.ssh/known_hosts
413   - chmod 600 ~/.ssh/known_hosts
415 # Applies only to the jobs that don't have a 'script', i.e., applies to all the 'check' jobs, but not the 'dist' one.
416 script:
417   - eval "$MATRIX_EVAL"
418   # Beware not too leak $SSH_PRIVATE_KEY.
419   # - env
420   - sudo apt-get install -qq doxygen flex m4
421   # Install and activate ICC.
422   - if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi
423   - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
424   # Install and activate dmd.
425   - mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh
426   - source $(source ~/dlang/install.sh dmd -a)
428   - $CC --version
429   - $CXX --version
430   - dmd --version
431   - doxygen --version
432   - flex --version
433   - ld --version
434   - m4 --version
436   - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
437   # Unset this variable, otherwise, Java programs' stderr is cluttered
438   # with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes
439   # the test suite fail.
440   - unset _JAVA_OPTIONS
442   # Fail fast from now on.
443   - set -e
444   - sftp bison@sftp.lrde.epita.fr:bison-$TRAVIS_BUILD_NUMBER.tar.xz
445   - tar xf bison-$TRAVIS_BUILD_NUMBER.tar.xz
446   - dir=$(tar tf bison-$TRAVIS_BUILD_NUMBER.tar.xz | sed 1q)
447   - cd $dir
448   - mkdir _build
449   - cd _build
450   - ../configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
451   - make -j2 $MAKE_ARGS
452   - if test ${PART-1} = 1; then make check                  VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi
453   - if test ${PART-2} = 2; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
454   - if test ${PART-2} = 2; then make maintainer-check-g++   VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
456 after_script:
457   - uninstall_intel_software || true