| # Continuous Integration |
| |
| Here you will find snippets to use Meson with various CI such as |
| Travis and AppVeyor. |
| |
| Please [file an issue](https://github.com/mesonbuild/meson/issues/new) |
| if these instructions don't work for you. |
| |
| ## Travis for OS X and Linux (with Docker) |
| |
| Travis for Linux provides ancient versions of Ubuntu which will likely |
| cause problems building your projects regardless of which build system |
| you're using. We recommend using Docker to get a more-recent version |
| of Ubuntu and installing Ninja, Python3, and Meson inside it. |
| |
| This `yml` file is derived from the [configuration used by Meson for |
| running its own |
| tests](https://github.com/mesonbuild/meson/blob/master/.travis.yml). |
| |
| ```yaml |
| sudo: false |
| |
| os: |
| - linux |
| - osx |
| |
| language: |
| - cpp |
| |
| services: |
| - docker |
| |
| before_install: |
| - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi |
| - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ninja python3; fi |
| - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pip3 install meson; fi |
| - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull YOUR/REPO:yakkety; fi |
| |
| script: |
| - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo FROM YOUR/REPO:yakkety > Dockerfile; fi |
| - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo ADD . /root >> Dockerfile; fi |
| - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build -t withgit .; fi |
| - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true CC=$CC CXX=$CXX meson builddir && ninja -C builddir test"; fi |
| - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then SDKROOT=$(xcodebuild -version -sdk macosx Path) meson builddir && ninja -C builddir test; fi |
| ``` |
| |
| ## AppVeyor for Windows |
| |
| For CI on Windows, [AppVeyor](https://www.appveyor.com/) is probably |
| your best bet. Here's a sample `yml` file for use with that. |
| |
| ```yaml |
| os: Visual Studio 2017 |
| |
| environment: |
| matrix: |
| - arch: x86 |
| compiler: msvc2015 |
| - arch: x64 |
| compiler: msvc2015 |
| - arch: x86 |
| compiler: msvc2017 |
| - arch: x64 |
| compiler: msvc2017 |
| |
| platform: |
| - x64 |
| |
| install: |
| # Download ninja |
| - cmd: mkdir C:\ninja-build |
| - ps: (new-object net.webclient).DownloadFile('https://github.com/mesonbuild/cidata/raw/master/ninja.exe', 'C:\ninja-build\ninja.exe') |
| # Set paths to dependencies (based on architecture) |
| - cmd: if %arch%==x86 (set PYTHON_ROOT=C:\python37) else (set PYTHON_ROOT=C:\python37-x64) |
| # Print out dependency paths |
| - cmd: echo Using Python at %PYTHON_ROOT% |
| # Add neccessary paths to PATH variable |
| - cmd: set PATH=%cd%;C:\ninja-build;%PYTHON_ROOT%;%PYTHON_ROOT%\Scripts;%PATH% |
| # Install meson |
| - cmd: pip install meson |
| # Set up the build environment |
| - cmd: if %compiler%==msvc2015 ( call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %arch% ) |
| - cmd: if %compiler%==msvc2017 ( call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %arch% ) |
| |
| build_script: |
| - cmd: echo Building on %arch% with %compiler% |
| - cmd: meson --backend=ninja builddir |
| - cmd: ninja -C builddir |
| |
| test_script: |
| - cmd: ninja -C builddir test |
| ``` |
| |
| ### Qt |
| |
| For Qt 5, add the following line near the `PYTHON_ROOT` assignment: |
| ```yaml |
| - cmd: if %arch%==x86 (set QT_ROOT=C:\Qt\5.11\%compiler%) else (set QT_ROOT=C:\Qt\5.11\%compiler%_64) |
| ``` |
| And afterwards add `%QT_ROOT%\bin` to the `PATH` variable. |
| |
| You might have to adjust your build matrix as there are, for example, no msvc2017 32-bit builds. Visit the [Build Environment](https://www.appveyor.com/docs/build-environment/) page in the AppVeyor docs for more details. |
| |
| ### Boost |
| |
| The following statement is sufficient for meson to find Boost: |
| ```yaml |
| - cmd: set BOOST_ROOT=C:\Libraries\boost_1_67_0 |
| ``` |
| |
| ## Travis without Docker |
| |
| You can cheat your way around docker by using **python** as language and setting your compiler in the build **matrix**. This example just uses **linux** and **c** but can be easily adapted to **c++** and **osx**. |
| |
| ```yaml |
| sudo: false |
| |
| os: linux |
| dist: trusty |
| |
| language: python |
| |
| python: 3.6 |
| |
| matrix: |
| include: |
| - env: CC=gcc |
| - env: CC=clang |
| |
| install: |
| - export NINJA_LATEST=$(curl -s https://api.github.com/repos/ninja-build/ninja/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep ninja-linux.zip) |
| - wget "$NINJA_LATEST" |
| - unzip -q ninja-linux.zip -d build |
| - export PATH="$PWD/build:$PATH" |
| - pip install meson |
| |
| script: |
| - meson builddir |
| - ninja -C builddir |
| - ninja -C builddir test |
| ``` |
| |
| This setup uses the **beta** group. It is not recommended but included here for completeness: |
| |
| ```yaml |
| sudo: false |
| language: cpp |
| group: beta |
| |
| matrix: |
| include: |
| - os: linux |
| dist: trusty |
| - os: osx |
| |
| install: |
| - export PATH="$(pwd)/build:${PATH}" |
| - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install python3 ninja; fi |
| - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then wget https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-linux.zip && unzip -q ninja-linux.zip -d build; fi |
| - pip3 install meson |
| |
| script: |
| - meson builddir |
| - ninja -C builddir |
| - ninja -C builddir test |
| ``` |