bistromathic: do not display parse errors on completion
[bison.git] / .travis.yml
blob4626a5b6a944678f88266d4bba05ec18c62a58e8
1 version: ~> 1.0
3 # If the language is set to C or C++, Travis defines and exports CC
4 # and CXX *after* we have defined our environment variables via 'env'.
5 language: minimal
7 # Run in two steps:
8 # 1. Build the tarball
9 #    On a modern distro, with all the needed dependencies, including the whole git history.
10 # 2. Check it on various environments.
11 #    Less dependencies, and little git content (we would like to have none, but it's not
12 #    an option on Travis).
13 stages:
14   - dist
15   - check
17 # The 'check' jobs do not need the repo at all, only the 'dist'
18 # does.  Let's save time, bandwith, energy, and polar bears.
19 git:
20   clone: false
22 # matrix.include and jobs.include are aliases
23 # (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/).
24 jobs:
25   include:
26     - stage: dist
27       name: "Make dist"
28       git:
29         clone: true
30       dist: bionic
31       script:
32         - sudo apt-get install -qq autoconf automake autopoint flex gettext gperf graphviz help2man m4 texinfo
33         - autoconf --version
34         - automake --version
35         - autopoint --version
36         - dot -V
37         - gettext --version
38         - gperf --version
39         - help2man --version
40         - makeinfo --version
41         - m4 --version
43         # Travis makes a shallow clone, but we need it in full to build the ChangeLog and apply the fixes in git-log-fix.
44         - git fetch --unshallow || true
45         - git submodule update --init --recursive
47         - ./bootstrap
48         - ./configure --enable-gcc-warnings || { cat config.log && false; }
49         - make -j2
50         - make -j2 dist-xz
51         # Can help understanding why we get "dirty" tarballs.
52         - git status
53         - dist=$(echo bison*.xz)
55         # Unfortunately we cannot deterministically know the name of the tarball without the full
56         # git history (because git describe --abbrev=4 may use more than 4 characters if there are
57         # conflicts).
58         #
59         # So for the sake of the 'check' jobs (that don't even have the repo at all), also expose this
60         # tarball on a name that only depends on the Travis build number.
61         #
62         # Without -b -, exit status is always 0.
63         #
64         # If we rerun a job that was already uploaded, 'ln -s' will fail: remove beforehand.
65         - 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"
67     ## ------- ##
68     ## First.  ##
69     ## ------- ##
71     # Start with three completely different environments, to get errors asap.
73     - name: "GCC 10 -O3"
74       stage: check
75       os: linux
76       dist: bionic
77       addons: &gcc10
78         apt:
79           sources:
80             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
81             - sourceline: 'ppa:ubuntu-toolchain-r/test'
82           packages: g++-10
83       env:
84         - CC=gcc-10
85         - CXX=g++-10
86         - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
88     # ASAN is time consuming, and we timeout the 50min granted by
89     # Travis if we run all the tests in one go.  Run in two parts.
90     - name: "Clang 10 libc++ and ASAN part 1"
91       stage: check
92       os: linux
93       dist: bionic
94       addons: &clang10
95         apt:
96           sources:
97             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
98             - sourceline: 'ppa:ubuntu-toolchain-r/test'
99             - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main'
100               key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
101           packages:
102             - clang-10
103             - libc++-10-dev
104             - libc++abi-10-dev
105       env:
106         # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
107         - CC='clang-10 -fsanitize=address'
108         - CXX='clang++-10 -fsanitize=address -stdlib=libc++'
109         - PART=1
111     - name: "Clang 10 libc++ and ASAN part 2"
112       stage: check
113       os: linux
114       dist: bionic
115       addons: *clang10
116       env:
117         # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
118         - CC='clang-10 -fsanitize=address'
119         - CXX='clang++-10 -fsanitize=address -stdlib=libc++'
120         - PART=2
122     - name: "ICC"
123       stage: check
124       os: linux
125       compiler: icc
126       env:
127         - CC=icc
128         - CXX=icpc
129       install:
130         - source /opt/intel/inteloneapi/compiler/latest/env/vars.sh
131       addons:
132         apt:
133           sources:
134           - sourceline: 'deb https://apt.repos.intel.com/oneapi all main'
135             key_url: 'https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB'
136           packages:
137           - intel-oneapi-icc
139     - name: "ARM64: GCC 10 -O2 part 1"
140       stage: check
141       os: linux
142       arch: arm64
143       dist: bionic
144       addons: *gcc10
145       env:
146         - CC=gcc-10
147         - CXX=g++-10
148         - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O2 CXXFLAGS=-O2'
149         - PART=1
151     - name: "PPC64le: GCC 10 -O2 part 1"
152       stage: check
153       os: linux
154       arch: ppc64le
155       dist: bionic
156       addons:
157         apt:
158           sources:
159             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
160             - sourceline: 'ppa:ubuntu-toolchain-r/test'
161           packages: g++-10
162       env:
163         - CC=gcc-10
164         - CXX=g++-10
165         - CONFIGUREFLAGS='CFLAGS=-O2 CXXFLAGS=-O2'
166         - PART=1
168     - name: "s390x: GCC 10 -O2 part 1"
169       stage: check
170       os: linux
171       arch: s390x
172       dist: bionic
173       addons: *gcc10
174       env:
175         - CC=gcc-10
176         - CXX=g++-10
177         - CONFIGUREFLAGS='CFLAGS=-O2 CXXFLAGS=-O2'
178         - PART=1
180     ## ----- ##
181     ## GCC.  ##
182     ## ----- ##
184     - name: "GCC 9 with sanitizers part 1"
185       stage: check
186       os: linux
187       dist: bionic
188       addons:
189         apt:
190           sources:
191             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
192             - sourceline: 'ppa:ubuntu-toolchain-r/test'
193           packages: g++-9
194       env:
195         - CC='gcc-9 -fsanitize=undefined,address -fno-omit-frame-pointer'
196         - CXX='g++-9 -fsanitize=undefined,address -fno-omit-frame-pointer'
197         - CONFIGUREFLAGS='CFLAGS=-O1 CXXFLAGS=-O1'
198         - PART=1
200     - name: "GCC 8"
201       stage: check
202       os: linux
203       dist: bionic
204       addons:
205         apt:
206           packages: g++-8
207       env:
208         - CC=gcc-8
209         - CXX=g++-8
211     - name: "GCC 7"
212       stage: check
213       os: linux
214       dist: bionic
215       addons:
216         apt:
217           packages: g++-7
218       env:
219         - CC=gcc-7
220         - CXX=g++-7
222     - name: "GCC 6"
223       stage: check
224       os: linux
225       dist: xenial
226       addons:
227         apt:
228           sources: ubuntu-toolchain-r-test
229           packages: g++-6
230       env:
231         - CC=gcc-6
232         - CXX=g++-6
234     - name: "GCC 5"
235       stage: check
236       os: linux
237       dist: xenial
238       addons:
239         apt:
240           sources: ubuntu-toolchain-r-test
241           packages: g++-5
242       env:
243          - CC=gcc-5
244          - CXX=g++-5
246     - name: "GCC 4.9"
247       stage: check
248       os: linux
249       dist: xenial
250       addons:
251         apt:
252           sources: ubuntu-toolchain-r-test
253           packages: g++-4.9
254       env:
255          - CC=gcc-4.9
256          - CXX=g++-4.9
258     - name: "GCC 4.8"
259       stage: check
260       os: linux
261       dist: xenial
262       addons:
263         apt:
264           sources: ubuntu-toolchain-r-test
265           packages: g++-4.8
266       env:
267          - CC=gcc-4.8
268          - CXX=g++-4.8
270     - name: "GCC 4.7"
271       stage: check
272       os: linux
273       dist: xenial
274       addons:
275         apt:
276           sources: ubuntu-toolchain-r-test
277           packages: g++-4.7
278       env:
279          - CC=gcc-4.7
280          - CXX=g++-4.7
282     - name: "GCC 4.6"
283       stage: check
284       os: linux
285       dist: xenial
286       addons:
287         apt:
288           sources: ubuntu-toolchain-r-test
289           packages: g++-4.6
290       env:
291          - CC=gcc-4.6
292          - CXX=g++-4.6
294     ## ------- ##
295     ## Clang.  ##
296     ## ------- ##
298     - name: "Clang 9 -O3"
299       stage: check
300       os: linux
301       dist: bionic
302       addons:
303         apt:
304           sources:
305             # See https://github.com/travis-ci/apt-source-safelist/issues/410.
306             - sourceline: 'ppa:ubuntu-toolchain-r/test'
307             - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main'
308               key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
309           packages:
310             - clang-9
311             - libc++-9-dev
312             - libc++abi-9-dev
313       env:
314         - CC='clang-9'
315         - CXX='clang++-9 -stdlib=libc++'
316         - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
318     - name: "Clang 8"
319       stage: check
320       os: linux
321       dist: bionic
322       addons:
323         apt:
324           packages:
325             - clang-8
326             - libc++-8-dev
327             - libc++abi-8-dev
328       env:
329         - CC=clang-8
330         - CXX='clang++-8 -stdlib=libc++'
332     - name: "Clang 7"
333       stage: check
334       os: linux
335       dist: bionic
336       addons:
337         apt:
338           packages:
339             - clang-7
340             - libc++-7-dev
341             - libc++abi-7-dev
342       env:
343         - CC=clang-7
344         - CXX='clang++-7 -stdlib=libc++'
346     - name: "Clang 6 and libc++"
347       stage: check
348       os: linux
349       dist: xenial
350       addons:
351         apt:
352           sources:
353             - llvm-toolchain-xenial-6.0
354             - ubuntu-toolchain-r-test
355           packages:
356             - clang-6.0
357             - libc++-dev
358       env:
359         - CC=clang-6.0
360         - CXX='clang++-6.0 -stdlib=libc++'
362     - name: "Clang 5"
363       stage: check
364       os: linux
365       dist: xenial
366       addons:
367         apt:
368           sources: llvm-toolchain-xenial-5.0
369           packages:
370             - clang-5.0
371             - libc++-dev
372       env:
373         - CC='clang-5.0'
374         - CXX='clang++-5.0'
376     - name: "Clang 4"
377       stage: check
378       os: linux
379       dist: xenial
380       addons:
381         apt:
382           sources: llvm-toolchain-xenial-4.0
383           packages: clang-4.0
384       env:
385         - CC=clang-4.0
386         - CXX=clang++-4.0
388     - name: "Clang 3.9"
389       stage: check
390       os: linux
391       dist: xenial
392       addons:
393         apt:
394           sources: llvm-toolchain-xenial-3.9
395           packages: clang-3.9
396       env:
397         - CC=clang-3.9
398         - CXX=clang++-3.9
400     - name: "Clang 3.8"
401       stage: check
402       os: linux
403       dist: xenial
404       addons:
405         apt:
406           sources:
407             - ubuntu-toolchain-r-test
408             - llvm-toolchain-precise-3.8
409           packages: clang-3.8
410       env:
411         - CC=clang-3.8
412         - CXX=clang++-3.8
414     - name: "CLang 3.7"
415       stage: check
416       os: linux
417       dist: xenial
418       addons:
419         apt:
420           sources:
421             - ubuntu-toolchain-r-test
422             - llvm-toolchain-precise-3.7
423           packages: clang-3.7
424       env:
425         - CC=clang-3.7
426         - CXX=clang++-3.7
428     - name: "Clang 3.6"
429       stage: check
430       os: linux
431       dist: xenial
432       addons:
433         apt:
434           sources:
435             - ubuntu-toolchain-r-test
436             - llvm-toolchain-precise-3.6
437           packages: clang-3.6
438       env:
439         - CC=clang-3.6
440         - CXX=clang++-3.6
442     - name: "Clang 3.5"
443       stage: check
444       os: linux
445       dist: xenial
446       addons:
447         apt:
448           sources:
449             - ubuntu-toolchain-r-test
450             - llvm-toolchain-precise-3.5
451           packages: clang-3.5
452       env:
453         - CC=clang-3.5
454         - CXX=clang++-3.5
456     - name: "Clang 3.4"
457       stage: check
458       os: linux
459       # Not available on Xenial.
460       dist: trusty
461       addons:
462         apt:
463           packages: clang-3.4
464       env:
465         # No versioned name installed, but beware that Travis installs
466         # a more modern clang earlier in the default PATH.
467         - CC=/usr/bin/clang
468         - CXX=/usr/bin/clang++
470     - name: "Clang 3.3"
471       stage: check
472       os: linux
473       # Not available on Xenial.
474       dist: trusty
475       addons:
476         apt:
477           packages: clang-3.3
478       env:
479         # See comment for 3.4.
480         - CC=/usr/bin/clang
481         - CXX=/usr/bin/clang++
483 ## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor.
484 ## Applies to Travis too.  Applied to all the 'script's (of all the jobs).
485 before_script:
486   - 'which ssh-agent || ( sudo apt-get install openssh-client -y )'
487   - eval "$(ssh-agent -s)"
488   # $SSH_PRIVATE_KEY is multiline.  Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'.
489   - echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa
490   - chmod 600 /tmp/key.id_rsa
491   - ssh-add /tmp/key.id_rsa </dev/null
492   - mkdir -p ~/.ssh
493   - chmod 700 ~/.ssh
494   - echo '|1|bpc51UGxoDZjCPiwRlCStW32trI=|rfh6mLoLZv/vAvOVrpZXI1hTLxg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIR+ckMoJTNXHvAQLHWSfrRnrNJGW2ZR6kr5pBVDGCkz1v1RcQ5rleq0NAt9kS3v4hgnuLiEVnK7KDRzcEH3ikc=' >>~/.ssh/known_hosts
495   - chmod 600 ~/.ssh/known_hosts
497 # Applies only to the jobs that don't have a 'script', i.e., applies to all the 'check' jobs, but not the 'dist' one.
498 script:
499   # Beware not too leak $SSH_PRIVATE_KEY.
500   # - env
501   - sudo apt-get install -qq doxygen flex m4
502   # Install and activate dmd.
503   - mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh
504   - source $(source ~/dlang/install.sh dmd -a) || true
506   - $CC --version
507   - $CXX --version
508   - dmd --version || true
509   - doxygen --version
510   - flex --version
511   - ld --version
512   - m4 --version
514   - if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
515   # Unset this variable, otherwise, Java programs' stderr is cluttered
516   # with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes
517   # the test suite fail.
518   - unset _JAVA_OPTIONS
520   # Fail fast from now on.
521   - set -e
522   - sftp bison@sftp.lrde.epita.fr:bison-$TRAVIS_BUILD_NUMBER.tar.xz
523   - tar xf bison-$TRAVIS_BUILD_NUMBER.tar.xz
524   - dir=$(tar tf bison-$TRAVIS_BUILD_NUMBER.tar.xz | sed 1q)
525   - cd $dir
526   - mkdir _build
527   - cd _build
528   - ../configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
529   - make -j2 $MAKE_ARGS
530   - if test ${PART-1} = 1; then make check                  VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi
531   - if test ${PART-2} = 2; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
532   - if test ${PART-2} = 2; then make maintainer-check-g++   VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi