1b8bc0d8aSopenharmony_ci# Travis CI configuration file
2b8bc0d8aSopenharmony_ci
3b8bc0d8aSopenharmony_cisudo: false
4b8bc0d8aSopenharmony_ci
5b8bc0d8aSopenharmony_cilanguage: c
6b8bc0d8aSopenharmony_ci
7b8bc0d8aSopenharmony_cigit:
8b8bc0d8aSopenharmony_ci  # Set to 10 instead of 1 to avoid problems when the most recent commits have [skip ci]
9b8bc0d8aSopenharmony_ci  depth: 10
10b8bc0d8aSopenharmony_ci
11b8bc0d8aSopenharmony_ci# Install autopoint on Ubuntu (needed for gettext)
12b8bc0d8aSopenharmony_ci# This is ignored on bionic for some reason (see below).
13b8bc0d8aSopenharmony_ciaddons:
14b8bc0d8aSopenharmony_ci  apt:
15b8bc0d8aSopenharmony_ci    packages:
16b8bc0d8aSopenharmony_ci    - autopoint
17b8bc0d8aSopenharmony_ci
18b8bc0d8aSopenharmony_cienv:
19b8bc0d8aSopenharmony_ci  # More configurations are configured in the matrix section
20b8bc0d8aSopenharmony_ci  matrix:
21b8bc0d8aSopenharmony_ci    - CONFIG=normal
22b8bc0d8aSopenharmony_ci    - CONFIG=c90
23b8bc0d8aSopenharmony_ci    - CONFIG=stackprotect
24b8bc0d8aSopenharmony_ci    - CONFIG=disable-nls
25b8bc0d8aSopenharmony_ci  global:
26b8bc0d8aSopenharmony_ci    - MAKEFLAGS='-j 2'
27b8bc0d8aSopenharmony_ci
28b8bc0d8aSopenharmony_cicompiler:
29b8bc0d8aSopenharmony_ci  - clang
30b8bc0d8aSopenharmony_ci  - gcc
31b8bc0d8aSopenharmony_ci
32b8bc0d8aSopenharmony_cios:
33b8bc0d8aSopenharmony_ci  - linux
34b8bc0d8aSopenharmony_ci  - osx
35b8bc0d8aSopenharmony_ci
36b8bc0d8aSopenharmony_cimatrix:
37b8bc0d8aSopenharmony_ci  include:
38b8bc0d8aSopenharmony_ci  - env: CONFIG=normal DIST=bionic
39b8bc0d8aSopenharmony_ci    os: linux
40b8bc0d8aSopenharmony_ci    dist: bionic
41b8bc0d8aSopenharmony_ci    compiler: gcc
42b8bc0d8aSopenharmony_ci  - env: CONFIG=normal DIST=bionic
43b8bc0d8aSopenharmony_ci    os: linux
44b8bc0d8aSopenharmony_ci    dist: bionic
45b8bc0d8aSopenharmony_ci    compiler: clang
46b8bc0d8aSopenharmony_ci  - env: CONFIG=normal DIST=focal
47b8bc0d8aSopenharmony_ci    os: linux
48b8bc0d8aSopenharmony_ci    dist: focal
49b8bc0d8aSopenharmony_ci    compiler: gcc
50b8bc0d8aSopenharmony_ci  - env: CONFIG=normal DIST=focal
51b8bc0d8aSopenharmony_ci    os: linux
52b8bc0d8aSopenharmony_ci    dist: focal
53b8bc0d8aSopenharmony_ci    compiler: clang
54b8bc0d8aSopenharmony_ci  - env: CONFIG=clang6 DIST=xenial
55b8bc0d8aSopenharmony_ci    os: linux
56b8bc0d8aSopenharmony_ci    dist: xenial
57b8bc0d8aSopenharmony_ci    compiler: clang
58b8bc0d8aSopenharmony_ci    addons:
59b8bc0d8aSopenharmony_ci      apt:
60b8bc0d8aSopenharmony_ci        packages:
61b8bc0d8aSopenharmony_ci          - autopoint
62b8bc0d8aSopenharmony_ci          - clang-6.0
63b8bc0d8aSopenharmony_ci  - env: CONFIG=clang8 DIST=xenial
64b8bc0d8aSopenharmony_ci    os: linux
65b8bc0d8aSopenharmony_ci    dist: xenial
66b8bc0d8aSopenharmony_ci    compiler: clang
67b8bc0d8aSopenharmony_ci    addons:
68b8bc0d8aSopenharmony_ci      apt:
69b8bc0d8aSopenharmony_ci        sources:
70b8bc0d8aSopenharmony_ci          - llvm-toolchain-trusty-8
71b8bc0d8aSopenharmony_ci        packages:
72b8bc0d8aSopenharmony_ci          - autopoint
73b8bc0d8aSopenharmony_ci          - clang-8
74b8bc0d8aSopenharmony_ci  - env: CONFIG=clang9 DIST=xenial
75b8bc0d8aSopenharmony_ci    os: linux
76b8bc0d8aSopenharmony_ci    dist: xenial
77b8bc0d8aSopenharmony_ci    compiler: clang
78b8bc0d8aSopenharmony_ci    addons:
79b8bc0d8aSopenharmony_ci      apt:
80b8bc0d8aSopenharmony_ci        sources:
81b8bc0d8aSopenharmony_ci          sourceline:
82b8bc0d8aSopenharmony_ci            - deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main
83b8bc0d8aSopenharmony_ci          key_url:
84b8bc0d8aSopenharmony_ci            - https://apt.llvm.org/llvm-snapshot.gpg.key
85b8bc0d8aSopenharmony_ci        packages:
86b8bc0d8aSopenharmony_ci          - autopoint
87b8bc0d8aSopenharmony_ci          - clang-9
88b8bc0d8aSopenharmony_ci  - env: CONFIG=clang10 DIST=xenial
89b8bc0d8aSopenharmony_ci    os: linux
90b8bc0d8aSopenharmony_ci    dist: xenial
91b8bc0d8aSopenharmony_ci    compiler: clang
92b8bc0d8aSopenharmony_ci    addons:
93b8bc0d8aSopenharmony_ci      apt:
94b8bc0d8aSopenharmony_ci        sources:
95b8bc0d8aSopenharmony_ci          sourceline:
96b8bc0d8aSopenharmony_ci            - deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main
97b8bc0d8aSopenharmony_ci          key_url:
98b8bc0d8aSopenharmony_ci            - https://apt.llvm.org/llvm-snapshot.gpg.key
99b8bc0d8aSopenharmony_ci        packages:
100b8bc0d8aSopenharmony_ci          - autopoint
101b8bc0d8aSopenharmony_ci          - clang-10
102b8bc0d8aSopenharmony_ci  - env: CONFIG=gcc8 DIST=xenial
103b8bc0d8aSopenharmony_ci    os: linux
104b8bc0d8aSopenharmony_ci    dist: xenial
105b8bc0d8aSopenharmony_ci    compiler: gcc
106b8bc0d8aSopenharmony_ci    addons:
107b8bc0d8aSopenharmony_ci      apt:
108b8bc0d8aSopenharmony_ci        sources:
109b8bc0d8aSopenharmony_ci          sourceline:
110b8bc0d8aSopenharmony_ci            - ppa:ubuntu-toolchain-r/test
111b8bc0d8aSopenharmony_ci        packages:
112b8bc0d8aSopenharmony_ci          - autopoint
113b8bc0d8aSopenharmony_ci          - g++-8
114b8bc0d8aSopenharmony_ci  - env: CONFIG=gcc9 DIST=xenial
115b8bc0d8aSopenharmony_ci    os: linux
116b8bc0d8aSopenharmony_ci    dist: xenial
117b8bc0d8aSopenharmony_ci    compiler: gcc
118b8bc0d8aSopenharmony_ci    addons:
119b8bc0d8aSopenharmony_ci      apt:
120b8bc0d8aSopenharmony_ci        sources:
121b8bc0d8aSopenharmony_ci          sourceline:
122b8bc0d8aSopenharmony_ci            - ppa:ubuntu-toolchain-r/test
123b8bc0d8aSopenharmony_ci        packages:
124b8bc0d8aSopenharmony_ci          - autopoint
125b8bc0d8aSopenharmony_ci          - g++-9
126b8bc0d8aSopenharmony_ci  - env: CONFIG=arm-cross DIST=xenial
127b8bc0d8aSopenharmony_ci    os: linux
128b8bc0d8aSopenharmony_ci    dist: xenial
129b8bc0d8aSopenharmony_ci    compiler: gcc
130b8bc0d8aSopenharmony_ci    addons:
131b8bc0d8aSopenharmony_ci      apt:
132b8bc0d8aSopenharmony_ci        packages:
133b8bc0d8aSopenharmony_ci          - autopoint
134b8bc0d8aSopenharmony_ci          - gcc-4.8-arm-linux-gnueabihf
135b8bc0d8aSopenharmony_ci          - libc6-dev-armhf-cross
136b8bc0d8aSopenharmony_ci  - env: CONFIG=musl DIST=xenial
137b8bc0d8aSopenharmony_ci    os: linux
138b8bc0d8aSopenharmony_ci    dist: xenial
139b8bc0d8aSopenharmony_ci    compiler: gcc
140b8bc0d8aSopenharmony_ci    addons:
141b8bc0d8aSopenharmony_ci      apt:
142b8bc0d8aSopenharmony_ci        packages:
143b8bc0d8aSopenharmony_ci          - autopoint
144b8bc0d8aSopenharmony_ci          - musl-tools
145b8bc0d8aSopenharmony_ci  - env: CONFIG=sanitize DIST=xenial
146b8bc0d8aSopenharmony_ci    os: linux
147b8bc0d8aSopenharmony_ci    dist: xenial
148b8bc0d8aSopenharmony_ci    compiler: clang
149b8bc0d8aSopenharmony_ci    addons:
150b8bc0d8aSopenharmony_ci      apt:
151b8bc0d8aSopenharmony_ci        sources:
152b8bc0d8aSopenharmony_ci          sourceline:
153b8bc0d8aSopenharmony_ci            - deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main
154b8bc0d8aSopenharmony_ci          key_url:
155b8bc0d8aSopenharmony_ci            - https://apt.llvm.org/llvm-snapshot.gpg.key
156b8bc0d8aSopenharmony_ci        packages:
157b8bc0d8aSopenharmony_ci          - autopoint
158b8bc0d8aSopenharmony_ci          - clang-10
159b8bc0d8aSopenharmony_ci          - libtool
160b8bc0d8aSopenharmony_ci    # Required for -fsanitize=undefined
161b8bc0d8aSopenharmony_ci    # see https://github.com/travis-ci/travis-ci/issues/9033
162b8bc0d8aSopenharmony_ci    sudo: required
163b8bc0d8aSopenharmony_ci  - env: CONFIG=coverage DIST=xenial
164b8bc0d8aSopenharmony_ci    os: linux
165b8bc0d8aSopenharmony_ci    dist: xenial
166b8bc0d8aSopenharmony_ci    compiler: gcc
167b8bc0d8aSopenharmony_ci    addons:
168b8bc0d8aSopenharmony_ci      apt:
169b8bc0d8aSopenharmony_ci        packages:
170b8bc0d8aSopenharmony_ci          - autopoint
171b8bc0d8aSopenharmony_ci          - libpopt-dev
172b8bc0d8aSopenharmony_ci          - subversion
173b8bc0d8aSopenharmony_ci    cache:
174b8bc0d8aSopenharmony_ci      directories:
175b8bc0d8aSopenharmony_ci        - $HOME/failmalloc
176b8bc0d8aSopenharmony_ci  - env: CONFIG=normal DIST=bionic
177b8bc0d8aSopenharmony_ci    arch: arm64
178b8bc0d8aSopenharmony_ci    os: linux
179b8bc0d8aSopenharmony_ci    dist: bionic
180b8bc0d8aSopenharmony_ci    compiler: gcc
181b8bc0d8aSopenharmony_ci  - env: CONFIG=normal DIST=bionic
182b8bc0d8aSopenharmony_ci    arch: ppc64le
183b8bc0d8aSopenharmony_ci    os: linux
184b8bc0d8aSopenharmony_ci    dist: bionic
185b8bc0d8aSopenharmony_ci    compiler: gcc
186b8bc0d8aSopenharmony_ci
187b8bc0d8aSopenharmony_cibefore_install:
188b8bc0d8aSopenharmony_ci  # The apt addons section is ignored on bionic for some reason
189b8bc0d8aSopenharmony_ci  - if [ "$DIST" = "bionic" ] ; then sudo apt-get install -y autopoint gettext libtool; fi
190b8bc0d8aSopenharmony_ci
191b8bc0d8aSopenharmony_ciinstall:
192b8bc0d8aSopenharmony_ci  - |
193b8bc0d8aSopenharmony_ci    if [ "$CONFIG" = "coverage" ] ; then
194b8bc0d8aSopenharmony_ci      set -e
195b8bc0d8aSopenharmony_ci      pip install --user cpp-coveralls
196b8bc0d8aSopenharmony_ci      cd "$HOME"
197b8bc0d8aSopenharmony_ci      git clone --depth=1 https://github.com/libexif/libexif-testsuite.git
198b8bc0d8aSopenharmony_ci      cd libexif-testsuite
199b8bc0d8aSopenharmony_ci      mkdir src
200b8bc0d8aSopenharmony_ci      ln -s "$TRAVIS_BUILD_DIR" src/libexif
201b8bc0d8aSopenharmony_ci      ./build-config.sh
202b8bc0d8aSopenharmony_ci      autoreconf -sivf
203b8bc0d8aSopenharmony_ci      cd "$HOME"
204b8bc0d8aSopenharmony_ci      # Failmalloc for improved test coverage
205b8bc0d8aSopenharmony_ci      if [ ! -e "$HOME/failmalloc/lib/libfailmalloc.so.0" ] ; then
206b8bc0d8aSopenharmony_ci        curl -fsSORL --retry 8 https://download.savannah.nongnu.org/releases/failmalloc/failmalloc-1.0.tar.gz
207b8bc0d8aSopenharmony_ci        tar xaf failmalloc-1.0.tar.gz
208b8bc0d8aSopenharmony_ci        cd failmalloc-1.0
209b8bc0d8aSopenharmony_ci        # Fix compiling with modern glibc
210b8bc0d8aSopenharmony_ci        sed -i -e 's/\(__malloc_initialize_hook\)/volatile \1/' failmalloc.c
211b8bc0d8aSopenharmony_ci        # Disable failmalloc on program exit so system code can run unimpeded
212b8bc0d8aSopenharmony_ci        sed -i -e '/failmalloc_init/,${/failmalloc_install/aatexit(failmalloc_uninstall);
213b8bc0d8aSopenharmony_ci        }' failmalloc.c
214b8bc0d8aSopenharmony_ci        ./configure --prefix="$HOME/failmalloc" --disable-dependency-tracking
215b8bc0d8aSopenharmony_ci        make
216b8bc0d8aSopenharmony_ci        make install
217b8bc0d8aSopenharmony_ci      fi
218b8bc0d8aSopenharmony_ci      cd "$TRAVIS_BUILD_DIR"
219b8bc0d8aSopenharmony_ci    fi
220b8bc0d8aSopenharmony_ci
221b8bc0d8aSopenharmony_ciscript:
222b8bc0d8aSopenharmony_ci  # Ensure brew gettext is in the PATH so autopoint is found on OS X
223b8bc0d8aSopenharmony_ci  - PATH="$PATH:/usr/local/opt/gettext/bin" autoreconf -sivf
224b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "normal" ] ; then CFLAGS='-Wall -Wextra -O3'; fi
225b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "c90" ] ; then CFLAGS='-std=iso9899:1990 -D_XOPEN_SOURCE=500 -Wall -Wextra -O3'; fi
226b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "stackprotect" ] ; then CFLAGS='-g -O0 -fstack-protector-all'; fi
227b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "disable-nls" ] ; then CFLAGS='-Wall -Wextra -O3'; CONFIGURE_OPTS='--disable-nls'; fi
228b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "clang6" ] ; then CFLAGS='-Wall -Wextra -O3'; export CC=clang-6.0; fi
229b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "clang8" ] ; then CFLAGS='-Wall -Wextra -Wno-error=switch -O3'; MAKE_OPTS="CFLAGS+=-Werror CFLAGS+=${CFLAGS// / CFLAGS+=}"; export CC=clang-8; fi
230b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "clang9" ] ; then CFLAGS='-Wall -Wextra -Wno-error=switch -O3'; MAKE_OPTS="CFLAGS+=-Werror CFLAGS+=${CFLAGS// / CFLAGS+=}"; export CC=clang-9; fi
231b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "clang10" ] ; then CFLAGS='-Wall -Wextra -Wno-error=switch -O3'; MAKE_OPTS="CFLAGS+=-Werror CFLAGS+=${CFLAGS// / CFLAGS+=}"; export CC=clang-10; fi
232b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "gcc8" ] ; then CFLAGS='-Wall -Wextra -Wno-error=switch -Wno-error=implicit-fallthrough -O3'; MAKE_OPTS="CFLAGS+=-Werror CFLAGS+=${CFLAGS// / CFLAGS+=}"; export CC=gcc-8; fi
233b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "gcc9" ] ; then CFLAGS='-Wall -Wextra -Wno-error=switch -Wno-error=implicit-fallthrough -O3'; MAKE_OPTS="CFLAGS+=-Werror CFLAGS+=${CFLAGS// / CFLAGS+=}"; export CC=gcc-9; fi
234b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "arm-cross" ] ; then CFLAGS='-Wall -Wextra -O3'; export CC=arm-linux-gnueabihf-gcc-4.8; CONFIGURE_OPTS='--host=arm-linux-gnueabihf'; fi
235b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "musl" ] ; then CFLAGS='-Wall -Wextra -O3'; export CC=musl-gcc; CONFIGURE_OPTS='--disable-shared'; fi
236b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "sanitize" ] ; then CFLAGS='-g -Wall -Wextra -fsanitize=address -fsanitize=undefined -fsanitize-address-use-after-scope'; export CC=clang-10; export ASAN_OPTIONS=strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1:detect_leaks=1; fi
237b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "coverage" ] ; then cd "$HOME"/libexif-testsuite; CFLAGS=--coverage; CONFIGURE_OPTS="LDFLAGS=--coverage --with-failmalloc=$HOME/failmalloc/lib"; fi
238b8bc0d8aSopenharmony_ci  - ./configure --prefix="$HOME"/install --disable-dependency-tracking CFLAGS="$CFLAGS" $CONFIGURE_OPTS || { tail -n 300 config.log; false; }
239b8bc0d8aSopenharmony_ci
240b8bc0d8aSopenharmony_ci  - make V=1 $MAKE_OPTS
241b8bc0d8aSopenharmony_ci  # Skip tests when cross compiling.
242b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" != "arm-cross" ] ; then make V=1 $MAKE_OPTS check || { tail -n 300 test*/test-suite.log src/libexif/test*/test-suite.log; false; }; fi
243b8bc0d8aSopenharmony_ci  - make V=1 $MAKE_OPTS install
244b8bc0d8aSopenharmony_ci
245b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "coverage" ] ; then cd "$TRAVIS_BUILD_DIR"; fi
246b8bc0d8aSopenharmony_ci
247b8bc0d8aSopenharmony_ciafter_success:
248b8bc0d8aSopenharmony_ci  - if [ "$CONFIG" = "coverage" ] ; then coveralls --build-root libexif --exclude test --exclude contrib --gcov-options '\-lp'; fi
249