language: generic

sudo: false

matrix:
  include:
    # debug+integer-santizer build
    - os: linux
      compiler: clang
      env: CLANG_VERSION='3.8.0' BUILDTYPE=Debug CC="clang-3.8" CXX="clang++-3.8" CXXFLAGS="-fsanitize=integer" CFLAGS="-fsanitize=integer" LDFLAGS="-fsanitize=integer"
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test' ]
          packages: [ 'libstdc++6','libstdc++-5-dev' ]
    # debug+leak+address-sanitizer build
    - os: linux
      compiler: clang
      env: CLANG_VERSION='3.8.0' BUILDTYPE=Debug ASAN_OPTIONS=detect_leaks=1 CC="clang-3.8" CXX="clang++-3.8" CXXFLAGS="-fsanitize=address" CFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address"
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test' ]
          packages: [ 'libstdc++6','libstdc++-5-dev' ]
    # coverage+debug build
    - os: linux
      compiler: clang
      env: CLANG_VERSION='3.8.0' BUILDTYPE=Debug CC="clang-3.8" CXX="clang++-3.8" CXXFLAGS="--coverage" CFLAGS="--coverage" LDFLAGS="--coverage"
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test' ]
          packages: [ 'libstdc++6','libstdc++-5-dev' ]
    # release+linux+g++
    - os: linux
      compiler: gcc
      env: BUILDTYPE=Release CC="gcc-4.9" CXX="g++-4.9"
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: [ 'g++-4.9' ]
    # release+linux+clang++
    - os: linux
      compiler: clang
      env: CLANG_VERSION='3.8.0' BUILDTYPE=Release CC="clang-3.8" CXX="clang++-3.8"
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test' ]
          packages: [ 'libstdc++6','libstdc++-5-dev' ]
    # release+osx
    - os: osx
      compiler: clang
      env: BUILDTYPE=Release
    # debug+osx
    - os: osx
      compiler: clang
      env: BUILDTYPE=Debug

before_install:
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  - export PATH=${DEPS_DIR}/bin:${PATH} && mkdir -p ${DEPS_DIR}
  - |
    if [[ ${CLANG_VERSION:-false} != false ]]; then
      export CCOMPILER='clang'
      export CXXCOMPILER='clang++'
      CLANG_URL="https://mason-binaries.s3.amazonaws.com/${TRAVIS_OS_NAME}-x86_64/clang/${CLANG_VERSION}.tar.gz"
      travis_retry wget --quiet -O - ${CLANG_URL} | tar --strip-components=1 -xz -C ${DEPS_DIR}
    fi

install:
 - BUILDTYPE=${BUILDTYPE} make -j

script:
 - BUILDTYPE=${BUILDTYPE} make test
 - if [ -n "${COVERAGE}" ]; then
       /usr/bin/llvm-cov-3.5 -lp *.o;
       pip install --user cpp-coveralls;
       ~/.local/bin/coveralls --no-gcov -i ./ --exclude clipper;
   fi
