language: node_js
node_js:
  - "6"

sudo: false

matrix:
  include:
    # test on docker+centos7
    - os: linux
      compiler: clang
      services:
       - docker
      sudo: true
      dist: trusty
      env: DOCKERFILE=Dockerfile.centos7
      before_install: []
      install:
        - docker build -t tippecanoe-image -f ${DOCKERFILE} .
      script:
        - docker run -it tippecanoe-image
    # test on docker+ubuntu
    - os: linux
      compiler: clang
      services:
       - docker
      sudo: true
      dist: trusty
      env: DOCKERFILE=Dockerfile
      before_install: []
      install:
        - docker build -t tippecanoe-image -f ${DOCKERFILE} .
      script:
        - docker run -it tippecanoe-image
    # 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,undefined" CFLAGS="-fsanitize=address,undefined" LDFLAGS="-fsanitize=address,undefined" FEWER=true
      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"
      after_script:
        - mason install llvm-cov 3.9.1
        - mason link llvm-cov 3.9.1
        - which llvm-cov
        - curl -S -f https://codecov.io/bash -o codecov
        - chmod +x codecov
        - ./codecov -x "llvm-cov gcov" -Z
      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:
 - npm install geobuf
 - if [ -n "${FEWER}" ]; then
       BUILDTYPE=${BUILDTYPE} make fewer-tests; else
       BUILDTYPE=${BUILDTYPE} make test geobuf-test;
   fi
