# Copyright (c) 2012-2016 Sebastien Rombauts (sebastien.rombauts@gmail.com)

# request for Ubuntu 14.04 Trusty VM
sudo: true
dist: trusty

cache:
  apt: true

# NOTE: no language, so that we can set CXX and CC env vars as required
#language: cpp

matrix:
  include:
    # gcc default
    - compiler: gcc
      env:
        - CC=gcc
        - CXX=g++
    # gcc 4.9 std=default
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-4.9
      env:
        - CC=gcc-4.9
        - CXX=g++-4.9
    # gcc 5 std=c++03
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-5
      env:
        - CC=gcc-5
        - CXX=g++-5
        - CXXFLAGS="-std=c++03"
    # gcc 5 std=c++11
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-5
      env:
        - CC=gcc-5
        - CXX=g++-5
        - CXXFLAGS="-std=c++11"
    # gcc 5 std=c++14
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-5
      env:
        - CC=gcc-5
        - CXX=g++-5
        - CXXFLAGS="-std=c++14"
    # gcc 5 std=c++1z
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-5
      env:
        - CC=gcc-5
        - CXX=g++-5
        - CXXFLAGS="-std=c++1z"
    # gcc 6 std=c++14
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-6
      env:
        - CXX=g++-6
        - CXXFLAGS="-std=c++14"
    # gcc 6 std=c++1z
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-6
      env:
        - CC=gcc-6
        - CXX=g++-6
        - CXXFLAGS="-std=c++1z"
    # gcc 6 std=c++14 all warnings, pedantic
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-6
      env:
        - CC=gcc-6
        - CXX=g++-6
        - CXXFLAGS="-std=c++14 -Wall -Wextra -pedantic"
    # clang default
    - compiler: clang
      env:
        - CC=clang
        - CXX=clang++
    # clang 3.8
    - compiler: clang
      os: linux
      env:
        - CC=clang
        - CXX=clang++
        - LLVM_VERSION=3.8.0
        - LLVM_ARCHIVE_PATH=$HOME/clang+llvm.tar.xz
        - CPPFLAGS="-I $HOME/clang-$LLVM_VERSION/include/c++/v1"
        - CXXFLAGS=-lc++
        - PATH=$HOME/clang-$LLVM_VERSION/bin:$PATH
        - LD_LIBRARY_PATH=$HOME/clang-$LLVM_VERSION/lib:$LD_LIBRARY_PATH
      before_install:
        - wget http://llvm.org/releases/$LLVM_VERSION/clang+llvm-$LLVM_VERSION-x86_64-linux-gnu-ubuntu-14.04.tar.xz -O $LLVM_ARCHIVE_PATH
        - mkdir $HOME/clang-$LLVM_VERSION
        - tar xf $LLVM_ARCHIVE_PATH -C $HOME/clang-$LLVM_VERSION --strip-components 1
    # os x
    - compiler: clang
      os: osx
      osx_image: xcode8
      install:
        - brew install cmake
      env:
        - CC=clang
        - CXX=clang
        - CXXFLAGS=-lstdc++


before_install:
  - if [[ "$CXX" == "g++" ]]; then pip install --user cpp-coveralls ; fi

# scripts to run before build
before_script:
  - mkdir build
  - cd build
  - cmake -DCMAKE_BUILD_TYPE=Debug -DSQLITECPP_USE_GCOV=ON -DSQLITECPP_BUILD_EXAMPLES=ON -DSQLITECPP_BUILD_TESTS=ON ..

# build examples, and run tests (ie make & make test)
script:
  - cmake --build .
  - ctest --verbose --output-on-failure

# generate and publish GCov coveralls results
after_success:
  - if [[ "$CXX" == "g++" ]]; then coveralls --root .. -e examples -e googletest -e sqlite3 -e tests -E ".*feature_tests.*" -E ".*CompilerId.*" --gcov-options '\-lp' ; fi
