1addons:
2  apt:
3    packages:
4    - libgl1-mesa-dev
5    - g++-4.8
6    - libsdl2-dev
7    - ninja-build
8    - lcov
9
10matrix:
11  include:
12  - language: cpp
13    os: linux
14    dist: xenial
15    compiler: gcc
16    env:
17    - JOBID=linux-gl
18    - TARGET=desktop
19    - CMAKE_CXX_FLAGS="--coverage"
20    - LCOV_EXTRA_OPTS="--gcov-tool /usr/bin/gcov-4.8"
21  - language: cpp
22    os: linux
23    dist: xenial
24    compiler: gcc
25    env:
26    - JOBID=linux-nondeprecated
27    - TARGET=desktop
28    - BUILD_DEPRECATED=OFF
29  - language: cpp
30    os: linux
31    dist: xenial
32    compiler: clang
33    env:
34    - JOBID=linux-sanitizers
35    - TARGET=desktop-sanitizers
36    - CMAKE_CXX_FLAGS=-fsanitize=address
37    addons:
38      apt:
39        sources:
40        - llvm-toolchain-xenial
41        packages:
42        - libgl1-mesa-dev
43        - ninja-build
44        - clang-3.8
45        - libsdl2-dev
46  #- language: cpp
47    #os: linux
48    #dist: xenial
49    #compiler: gcc
50    #env:
51    #- JOBID=linux-gles2
52    #- TARGET=desktop-gles
53    #- TARGET_GLES2=ON
54    #- CMAKE_CXX_FLAGS="--coverage"
55    #- LCOV_EXTRA_OPTS="--gcov-tool /usr/bin/gcov-4.8"
56  - language: cpp
57    os: linux
58    dist: xenial
59    compiler: gcc
60    env:
61    - JOBID=linux-gles3
62    - TARGET=desktop-gles
63    - TARGET_GLES2=OFF
64    - CMAKE_CXX_FLAGS="--coverage"
65    - LCOV_EXTRA_OPTS="--gcov-tool /usr/bin/gcov-4.8"
66  - language: cpp
67    os: osx
68    compiler: clang
69    env:
70    - JOBID=macos-gl
71    - TARGET=desktop
72    - CMAKE_CXX_FLAGS="--coverage"
73  #- language: cpp
74    #os: osx
75    #osx_image: xcode7.3
76    #env:
77    #- JOBID=ios-gles2
78    #- TARGET=ios-simulator
79    #- TARGET_GLES2=ON
80  - language: cpp
81    os: osx
82    osx_image: xcode7.3
83    env:
84    - JOBID=ios-gles3
85    - TARGET=ios-simulator
86    - TARGET_GLES2=OFF
87  #- language: cpp
88    #os: osx
89    #osx_image: xcode9.3
90    #env:
91    #- JOBID=emscripten-webgl1
92    #- TARGET=emscripten
93    #- TARGET_GLES2=ON
94  - language: cpp
95    os: osx
96    osx_image: xcode9.3
97    env:
98    - JOBID=emscripten-webgl2
99    - TARGET=emscripten
100    - TARGET_GLES2=OFF
101  #- language: android
102    #os: linux
103    #dist: xenial
104    #env:
105    #- JOBID=android-gles2
106    #- TARGET=android
107    #- TARGET_GLES2=ON
108    #addons:
109      #apt:
110        #packages:
111        #- ninja-build
112    #android:
113      #components:
114      #- build-tools-22.0.1
115      #- android-22
116      #- sys-img-armeabi-v7a-android-22
117  - language: android
118    os: linux
119    # Setting xenial here will cause it to use 12.04, with GCC 4.6 and other
120    # prehistoric nightmares. So staying with 14.04 for the time being.
121    dist: trusty
122    env:
123    - JOBID=android-gles3
124    - TARGET=android
125    - TARGET_GLES2=OFF
126    addons:
127      apt:
128        packages:
129        - ninja-build
130    android:
131      components:
132      - build-tools-22.0.1
133      - android-22
134      - sys-img-armeabi-v7a-android-22
135
136notifications:
137  webhooks:
138    urls:
139      - https://webhooks.gitter.im/e/00ec7a9066bb0fec98f3
140    on_success: change
141    on_failure: always
142    on_start: never
143
144cache:
145  directories:
146  - $HOME/sdl2
147  - $HOME/swiftshader
148  - $HOME/cmake
149
150install:
151- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ]; then export CXX=g++-4.8; fi
152- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-sanitizers" ]; then export CXX=clang++-3.8; fi
153- if [ "$BUILD_DEPRECATED" != "OFF" ]; then export BUILD_DEPRECATED=ON; fi
154- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PLATFORM_GL_API=GLX; fi
155- 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
156# Download CMake 3.4.3 to ensure we're still compatible with it (Travis has
157# 3.9 since December 2017). Also, the PATH setting can't be cached, so it's
158# separate (bit me two times already). Android needs CMake 3.7, but
159# https://gitlab.kitware.com/cmake/cmake/issues/17253 is fixed in 3.9.2, so
160# grab that.
161- 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
162- 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
163- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH=$HOME/cmake/bin:$PATH && cmake --version; fi
164- if [ "$TRAVIS_OS_NAME" == "osx" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja; fi
165- if [ "$TRAVIS_OS_NAME" == "osx" ] && [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install lcov; fi
166- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then export PLATFORM_GL_API=CGL; fi
167- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "ios-simulator" ]; then gem install xcpretty; fi
168- 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
169- if [ "$TARGET_GLES2" == "ON" ]; then export TARGET_GLES3=OFF; fi
170- if [ "$TARGET_GLES2" == "OFF" ]; then export TARGET_GLES3=ON; fi
171
172# SDL (cached)
173- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install sdl2; fi
174- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "ios-simulator" ]; then curl -O https://www.libsdl.org/release/SDL2-2.0.4.tar.gz && tar -xzvf SDL2-2.0.4.tar.gz && cd SDL2-2.0.4/Xcode-iOS/SDL && xcodebuild -sdk iphonesimulator9.3 | xcpretty && mkdir -p ../../../sdl2/lib && cp build/Release-iphonesimulator/libSDL2.a ../../../sdl2/lib && mkdir -p ../../../sdl2/include/SDL2 && cp -R ../../include/* ../../../sdl2/include/SDL2 && cd ../../..; fi
175
176# SwiftShader on Linux (cached). Taken from Chromium snapshot 587878
177# (swiftshader-bin Arch package).
178- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-gles" ] && [ ! -e "$HOME/swiftshader/libEGL.so" ]; then cd $HOME ; wget https://ci.magnum.graphics/swiftshader-chromium-587878.tar.gz && mkdir -p swiftshader && cd swiftshader && tar -xzf ../swiftshader-chromium-587878.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
179
180# Basis Universal on Emscripten
181- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "emscripten" ]; then 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; fi
182
183script:
184- if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "desktop" ] || [ "$TARGET" == "desktop-sanitizers" ] ); then ./package/ci/travis-desktop.sh; fi
185- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-gles" ]; then ./package/ci/travis-desktop-gles.sh; fi
186- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ]; then ./package/ci/travis-android-arm.sh; fi
187- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then ./package/ci/travis-desktop.sh; fi
188- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "ios-simulator" ]; then ./package/ci/travis-ios-simulator.sh; fi
189- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "emscripten" ]; then ./package/ci/travis-emscripten.sh; fi
190# Travis somehow is not able to gather all output, try to force it using this
191- sync
192
193after_success:
194# Keep in sync with PKBUILD-coverage, please
195- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --directory . --capture --output-file coverage.info > /dev/null; fi
196- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --extract coverage.info "*/src/Magnum*/*" --output-file coverage.info > /dev/null; fi
197- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/Test/*" --output-file coverage.info > /dev/null; fi
198- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/build/src/*" --output-file coverage.info > /dev/null; fi
199- if [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then bash <(curl -s https://codecov.io/bash) -f coverage.info; fi
200