dist: trusty
sudo: false
language: c++

env:
  global:
  - COMPILER=g++

addons:
  apt:
    sources: &apt_sources
      - ubuntu-toolchain-r-test
      - llvm-toolchain-precise-3.5
      - llvm-toolchain-precise-3.6
      - llvm-toolchain-precise-3.7
      - llvm-toolchain-precise-3.8
      - llvm-toolchain-trusty-3.9
      - llvm-toolchain-trusty-4.0
      - llvm-toolchain-trusty-5.0

compiler: clang
os: linux

matrix:
  fast_finish: true
  include:
    - env: COMPILER=g++-5
      compiler: gcc
      addons: &gcc5
        apt:
          packages: ["g++-5"]
          sources: *apt_sources

    - env: COMPILER=g++-6
      compiler: gcc
      addons: &gcc6
        apt:
          packages: ["g++-6"]
          sources: *apt_sources

    - env: COMPILER=g++-7
      compiler: gcc
      addons: &gcc7
        apt:
          packages: ["g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-3.5
      addons: &clang35
        apt:
          packages: ["clang-3.5", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-3.6
      addons: &clang36
        apt:
          packages: ["clang-3.6", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-3.7
      addons: &clang37
        apt:
          packages: ["clang-3.7", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-3.8
      addons: &clang38
        apt:
          packages: ["clang-3.8", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-3.9
      addons: &clang39
        apt:
          packages: ["clang-3.9", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-4.0
      addons: &clang40
        apt:
          packages: ["clang-4.0", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++-5.0
      addons: &clang50
        apt:
          packages: ["clang-5.0", "g++-7"]
          sources: *apt_sources

    - env: COMPILER=clang++
      osx_image: xcode6.4
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode7.3
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode8
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode8.1
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode8.2
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode8.3
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode9
      os: osx

    - env: COMPILER=clang++
      osx_image: xcode9.1
      os: osx

    - env: COMPILER=g++-5
      compiler: gcc
      osx_image: xcode9.1
      os: osx

    - env: COMPILER=g++-6
      compiler: gcc
      osx_image: xcode9.1
      os: osx

    - env: COMPILER=g++-7
      compiler: gcc
      osx_image: xcode9.1
      os: osx

  allow_failures:

    - env: COMPILER=g++-5
      compiler: gcc

    - env: COMPILER=g++-6
      compiler: gcc

    - env: COMPILER=g++-7
      compiler: gcc

    - env: COMPILER=g++-5
      compiler: gcc
      osx_image: xcode9.1
      os: osx

    - env: COMPILER=g++-6
      compiler: gcc
      osx_image: xcode9.1
      os: osx

    - env: COMPILER=g++-7
      compiler: gcc
      osx_image: xcode9.1
      os: osx

install:
  - |
    if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
      if [[ "${COMPILER}" = "g++-5" ]]; then
        brew install gcc5
      fi
      if [[ "${COMPILER}" = "g++-6" ]]; then
        brew install gcc6
      fi
      if [[ "${COMPILER}" = "g++-7" ]]; then
        brew install gcc7
      fi
    fi

  - export CXX="${COMPILER}"

before_script:
  - ${CXX} --version

script:
  - ./waf configure
  - ./waf build