#########################
# project configuration #
#########################

# C++ project
language: cpp

dist: trusty
sudo: required


###################
# global settings #
###################

env:
  global:
   # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
   #   via the "travis encrypt" command using the project repo's public key
   - secure: "m89SSgE+ASLO38rSKx7MTXK3n5NkP9bIx95jwY71YEiuFzib30PDJ/DifKnXxBjvy/AkCGztErQRk/8ZCvq+4HXozU2knEGnL/RUitvlwbhzfh2D4lmS3BvWBGS3N3NewoPBrRmdcvnT0xjOGXxtZaJ3P74TkB9GBnlz/HmKORA="


################
# build matrix #
################

matrix:
  include:

  # Valgrind

  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - SPECIAL=valgrind
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: [g++-4.9, valgrind]
    after_success:
      - make check TEST_PREFIX="valgrind --error-exitcode=1 --leak-check=full " TEST_PATTERN=""

  # cLang sanitizer
  # note: sadly clang's libc++ has errors when running with sanitize,
  # so we use clang with gcc's libstdc++ which doesn't give those error.
  # that's why we need to install g++-6 to get the lastest version
  - os: linux
    env:
      - LLVM_VERSION=3.8.1
      - SPECIAL=sanitizer
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: g++-6
    compiler: clang
    before_script:
      - make clang_sanitize

  # cppcheck

  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - SPECIAL=cppcheck
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: [g++-4.9, cppcheck]
    after_success:
      - make cppcheck

  # no exceptions

  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - SPECIAL=no_exceptions
      - TEST_PATTERN=-e \"*\"
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: [g++-4.9, cppcheck]
    before_script:
      - CPPFLAGS="-DJSON_NOEXCEPTION" make

  # Coveralls (http://gronlier.fr/blog/2015/01/adding-code-coverage-to-your-c-project/)

  - os: linux
    compiler: gcc
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-4.9', 'ruby']
    before_script:
      - wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz
      - tar xf lcov_1.11.orig.tar.gz
      - sudo make -C lcov-1.11/ install
      - gem install coveralls-lcov
      - pip install --user cpp-coveralls
    after_success:
      - make clean
      - CXXFLAGS="--coverage -g -O0" CPPFLAGS="-DNDEBUG" make json_unit
      - test/json_unit "*"
      - coveralls --build-root test --exclude src/catch.hpp --exclude src/unit-algorithms.cpp --exclude src/unit-allocator.cpp --exclude src/unit-capacity.cpp --exclude src/unit-class_const_iterator.cpp --exclude src/unit-class_iterator.cpp --exclude src/unit-class_lexer.cpp --exclude src/unit-class_parser.cpp --exclude src/unit-comparison.cpp --exclude src/unit-concepts.cpp --exclude src/unit-constructor1.cpp --exclude src/unit-constructor2.cpp --exclude src/unit-convenience.cpp --exclude src/unit-conversions.cpp --exclude src/unit-deserialization.cpp --exclude src/unit-element_access1.cpp --exclude src/unit-element_access2.cpp --exclude src/unit-inspection.cpp --exclude src/unit-iterator_wrapper.cpp --exclude src/unit-iterators1.cpp --exclude src/unit-iterators2.cpp --exclude src/unit-json_patch.cpp --exclude src/unit-json_pointer.cpp --exclude src/unit-modifiers.cpp --exclude src/unit-pointer_access.cpp --exclude src/unit-readme.cpp --exclude src/unit-reference_access.cpp --exclude src/unit-regression.cpp --exclude src/unit-serialization.cpp --exclude src/unit-testsuites.cpp --exclude src/unit-unicode.cpp --include ../src/json.hpp --gcov-options '\-lp' --gcov 'gcov-4.9'
      - lcov --directory src --directory test/src --capture --output-file coverage.info --rc lcov_branch_coverage=1 --no-external
      - lcov --remove coverage.info 'test/src/*' --output-file coverage.info --rc lcov_branch_coverage=1
      - lcov --list coverage.info --rc lcov_branch_coverage=1
      - coveralls-lcov --repo-token F9bs4Nop10JRgqPQXRcifyQKYhb3FczkS coverage.info
    env:
      - COMPILER=g++-4.9
      - SPECIAL=coveralls

  # Coverity (only for branch coverity_scan)

  - os: linux
    compiler: clang
    before_install: echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
    addons:
      coverity_scan:
        project:
          name: "nlohmann/json"
          description: "Build submitted via Travis CI"
        notification_email: niels.lohmann@gmail.com
        build_command_prepend: "make clean"
        build_command: "make"
        branch_pattern: coverity_scan
    env:
      - LLVM_VERSION=3.6.0
      - SPECIAL=coverity

  # OSX / Clang

  - os: osx
    osx_image: xcode6.4

  - os: osx
    osx_image: xcode7.3

  - os: osx
    osx_image: xcode8

  - os: osx
    osx_image: xcode8.1

  - os: osx
    osx_image: xcode8.2

  # Linux / GCC

  - os: linux
    compiler: gcc
    env: COMPILER=g++-4.9
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: g++-4.9

  - os: linux
    compiler: gcc
    env: COMPILER=g++-5
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: g++-5

  - os: linux
    compiler: gcc
    env: COMPILER=g++-6
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: g++-6

  # Linux / Clang

  - os: linux
    env: LLVM_VERSION=3.6.0
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.6.1
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.6.2
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.7.0
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.7.1
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.8.0
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.8.1
    compiler: clang

#####################
# installation step #
#####################

# set directories to cache
cache:
  directories:
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.2
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.1
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.0
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.0
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.1
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.0
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.1


install:
  # create deps dir if not existing
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  - mkdir -p ${DEPS_DIR}

  # make sure CXX is correctly set
  - if [[ "${COMPILER}" != "" ]]; then export CXX=${COMPILER}; fi

  # get CMake (only for systems with brew - macOS)
  - |
     if [[ !(-x $(which cmake)) && (-x $(which brew)) ]]; then
       brew update
       brew install cmake
       cmake --version
     fi

  # install LLVM/clang when LLVM_VERSION is set
  - |
     if [[ "${LLVM_VERSION}" != "" ]]; then
       LLVM_DIR=${DEPS_DIR}/llvm-${LLVM_VERSION}
       if [[ -z "$(ls -A ${LLVM_DIR})" ]]; then
         travis_retry wget --quiet https://cmake.org/files/v3.6/cmake-3.6.1.tar.gz
         tar xfz cmake-3.6.1.tar.gz
         (cd cmake-3.6.1 && ./configure --prefix=${LLVM_DIR}/cmake && make install)
         export PATH="${LLVM_DIR}/cmake/bin:${PATH}"
         LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
         LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz"
         LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz"
         CLANG_URL="http://llvm.org/releases/${LLVM_VERSION}/clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-14.04.tar.xz"
         mkdir -p ${LLVM_DIR} ${LLVM_DIR}/build ${LLVM_DIR}/projects/libcxx ${LLVM_DIR}/projects/libcxxabi ${LLVM_DIR}/clang
         travis_retry wget --quiet -O - ${LLVM_URL}      | tar --strip-components=1 -xJ -C ${LLVM_DIR}
         travis_retry wget --quiet -O - ${LIBCXX_URL}    | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxx
         travis_retry wget --quiet -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxxabi
         travis_retry wget --quiet -O - ${CLANG_URL}     | tar --strip-components=1 -xJ -C ${LLVM_DIR}/clang
         (cd ${LLVM_DIR}/build && cmake .. -DCMAKE_INSTALL_PREFIX=${LLVM_DIR}/install -DCMAKE_CXX_COMPILER=clang++)
         (cd ${LLVM_DIR}/build/projects/libcxx && make install -j2)
         (cd ${LLVM_DIR}/build/projects/libcxxabi && make install -j2)
       fi
       export CXXFLAGS="-nostdinc++ -isystem ${LLVM_DIR}/install/include/c++/v1"
       export LDFLAGS="-L ${LLVM_DIR}/install/lib -l c++ -l c++abi"
       export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_DIR}/install/lib"
       export PATH="${LLVM_DIR}/clang/bin:${PATH}"
     fi

################
# build script #
################

script:
  # show OS/compiler version
  - uname -a
  - $CXX --version

  # compile and execute unit tests
  - mkdir -p build && cd build
  - cmake .. && cmake --build . --config Release -- -j4
  - ctest -C Release -V
  - cd ..

  # check if homebrew works (only checks develop branch)
  - if [ `which brew` ]; then
    brew update ;
    brew tap nlohmann/json ;
    brew install nlohmann_json --HEAD ;
    brew test nlohmann_json ;
    fi
