sudo: false
language: cpp
matrix:
  include:
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.4']
      env: SCRIPT=cmake GCC=4.4
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.6']
      env: SCRIPT=cmake GCC=4.6
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.7']
      env: SCRIPT=cmake GCC=4.7
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.8']
      env: SCRIPT=cmake GCC=4.8 SANITIZE=address
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.9']
      env: SCRIPT=cmake GCC=4.9 SANITIZE=leak
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-5']
      env: SCRIPT=cmake GCC=5
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-6']
      env: SCRIPT=cmake GCC=6
    - compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-7']
      env: SCRIPT=cmake GCC=7
    - compiler: clang
      env: SCRIPT=cmake
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.5']
          packages: ['clang-3.5']
      env: SCRIPT=cmake CLANG=3.5 SANITIZE=address
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.6']
          packages: ['clang-3.6']
      env: SCRIPT=cmake CLANG=3.6 SANITIZE=leak
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.7']
          packages: ['clang-3.7']
      env: SCRIPT=cmake CLANG=3.7
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.8']
          packages: ['clang-3.8']
      env: SCRIPT=cmake CLANG=3.8 SANITIZE=undefined
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-trusty-3.9']
          packages: ['clang-3.9']
      env: SCRIPT=cmake CLANG=3.9
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-trusty-4.0']
          packages: ['clang-4.0']
      env: SCRIPT=cmake CLANG=4.0
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-trusty-5.0']
          packages: ['clang-5.0']
      env: SCRIPT=cmake CLANG=5.0
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-trusty-6.0']
          packages: ['clang-6.0']
      env: SCRIPT=cmake CLANG=6.0
    - compiler: gcc
      env: SCRIPT=coverage
    - os: osx
      osx_image: xcode6.4
      compiler: clang
      env: SCRIPT=cmake
    - os: osx
      osx_image: xcode7.3
      compiler: clang
      env: SCRIPT=cmake SANITIZE=address
    - env: SCRIPT=arduino VERSION=1.6.7 BOARD=arduino:avr:uno
    - env: SCRIPT=arduino VERSION=1.8.2 BOARD=arduino:avr:uno
    - env: SCRIPT=platformio BOARD=uno
    - env: SCRIPT=platformio BOARD=esp01
    - compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test','llvm-toolchain-trusty-6.0']
          packages: ['clang-6.0','llvm-6.0']
      env: SCRIPT=fuzz CLANG=6.0
cache:
  directories:
    - "~/.platformio"
script: scripts/travis/$SCRIPT.sh
