1addons:
2  apt:
3    packages:
4    - g++-4.8
5    - ninja-build
6    - lcov
7    - libfaad-dev
8    - libfreetype6-dev
9    - libjpeg-dev
10    - libopenal-dev
11    - libpng12-dev
12    - libdevil-dev
13    - libharfbuzz-dev
14    - libassimp-dev
15
16matrix:
17  include:
18  - language: cpp
19    os: linux
20    dist: xenial
21    compiler: gcc
22    env:
23    - JOBID=linux
24    - TARGET=desktop
25    - CMAKE_CXX_FLAGS="--coverage"
26    - LCOV_EXTRA_OPTS="--gcov-tool /usr/bin/gcov-4.8"
27  - language: cpp
28    os: linux
29    dist: xenial
30    compiler: gcc
31    env:
32    - JOBID=linux-nondeprecated
33    - TARGET=desktop
34    - BUILD_DEPRECATED=OFF
35  - language: cpp
36    os: linux
37    dist: xenial
38    compiler: clang
39    env:
40    - JOBID=linux-sanitizers
41    - TARGET=desktop-sanitizers
42    - CMAKE_CXX_FLAGS=-fsanitize=address
43    addons:
44      apt:
45        sources:
46        - llvm-toolchain-xenial
47        packages:
48        - libgl1-mesa-dev
49        - clang-3.8
50        - ninja-build
51        - libfaad-dev
52        - libfreetype6-dev
53        - libjpeg-dev
54        - libopenal-dev
55        - libpng12-dev
56        - libdevil-dev
57        - libharfbuzz-dev
58        - libassimp-dev
59  - language: cpp
60    os: osx
61    # The new plugin testing workflow is dynamically loading and unloading them
62    # in the tests. When that's combined with coverage and LLVM < 5.0.1, all
63    # such tests crash on exit: https://bugs.llvm.org/show_bug.cgi?id=27224
64    # But only in some cases (for example not at all in tests for Corrade
65    # PluginManager itself). The commit fixing it is from Jan 3 2018 and all
66    # Xcode versions before Xcode 9.3 beta (released on Jan 24) are affected.
67    # https://github.com/llvm-mirror/compiler-rt/commit/860d7953a6f36980f406bfbff76f3c00f15eed57
68    # Xcode 9.3 beta has broken git clone ("unknown protocol version 2") since
69    # Feb 16 2019, so using version 9.3 now.
70    osx_image: xcode9.3
71    compiler: clang
72    env:
73    - JOBID=macos
74    - TARGET=desktop
75    - CMAKE_CXX_FLAGS="--coverage"
76  - language: cpp
77    os: osx
78    osx_image: xcode7.3
79    env:
80    - JOBID=ios
81    - TARGET=ios-simulator
82  - language: cpp
83    os: osx
84    osx_image: xcode9.3
85    env:
86    - JOBID=emscripten
87    - TARGET=emscripten
88  - language: android
89    os: linux
90    # Setting xenial here will cause it to use 12.04, with GCC 4.6 and other
91    # prehistoric nightmares. So staying with 14.04 for the time being.
92    dist: trusty
93    env:
94    - JOBID=android
95    - TARGET=android
96    addons:
97      apt:
98        packages:
99        - ninja-build
100    android:
101      components:
102      - build-tools-22.0.1
103      - android-22
104      - sys-img-armeabi-v7a-android-22
105
106notifications:
107  webhooks:
108    urls:
109      - https://webhooks.gitter.im/e/00ec7a9066bb0fec98f3
110    on_success: change
111    on_failure: always
112    on_start: never
113
114cache:
115  directories:
116  - $HOME/cmake
117
118install:
119- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ]; then export CXX=g++-4.8; fi
120- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-sanitizers" ]; then export CXX=clang++-3.8; fi
121- if [ "$BUILD_DEPRECATED" != "OFF" ]; then export BUILD_DEPRECATED=ON; fi
122- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PLATFORM_GL_API=GLX; fi
123- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ]; then wget -nc https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip && unzip -q android-*.zip; fi
124# Download CMake 3.4.3 to ensure we're still compatible with it (Travis has
125# 3.9 since December 2017). Also, the PATH setting can't be cached, so it's
126# separate (bit me two times already). Android needs CMake 3.7, but
127# https://gitlab.kitware.com/cmake/cmake/issues/17253 is fixed in 3.9.2, so
128# grab that.
129- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "android" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v3.4/cmake-3.4.3-Linux-x86_64.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-3.4.3-Linux-x86_64.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
130- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-3.9.2-Linux-x86_64.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
131- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH=$HOME/cmake/bin:$PATH && cmake --version; fi
132- if [ "$TRAVIS_OS_NAME" == "osx" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja; fi
133- if [ "$TRAVIS_OS_NAME" == "osx" ] && [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install lcov; fi
134- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then export PLATFORM_GL_API=CGL; fi
135- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "ios-simulator" ]; then gem install xcpretty; fi
136- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "emscripten" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install emscripten && export LLVM=/usr/local/opt/emscripten/libexec/llvm/bin && emcc; fi
137
138# FAAD2, HarfBuzz, Assimp, DevIL
139- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install faad2 harfbuzz assimp devil; fi
140
141# Basis Universal
142- export BASIS_VERSION=1cae1d57266e2c95bc011b0bf1ccb9940988c184 && wget -nc https://github.com/BinomialLLC/basis_universal/archive/$BASIS_VERSION.zip && unzip -q $BASIS_VERSION; mv basis_universal-$BASIS_VERSION $HOME/basis_universal
143
144script:
145- if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "desktop" ] || [ "$TARGET" == "desktop-sanitizers" ] ); then ./package/ci/travis-desktop.sh; fi
146- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ]; then ./package/ci/travis-android-arm.sh; fi
147- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then ./package/ci/travis-desktop.sh; fi
148- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "ios-simulator" ]; then ./package/ci/travis-ios-simulator.sh; fi
149- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "emscripten" ]; then ./package/ci/travis-emscripten.sh; fi
150# Travis somehow is not able to gather all output, try to force it using this
151- sync
152
153after_success:
154# Keep in sync with PKBUILD-coverage, please
155- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --directory . --capture --output-file coverage.info > /dev/null; fi
156- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --extract coverage.info "*/src/Magnum*/*" --output-file coverage.info > /dev/null; fi
157- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/src/MagnumExternal/*" --output-file coverage.info > /dev/null; fi
158- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/Test/*" --output-file coverage.info > /dev/null; fi
159- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/build/src/*" --output-file coverage.info > /dev/null; fi
160- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then bash <(curl -s https://codecov.io/bash) -f coverage.info; fi
161