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

# C++ project
language: cpp

dist: trusty
sudo: required
group: edge


###################
# 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
      - CMAKE_OPTIONS=-DJSON_Valgrind=ON
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-4.9', 'valgrind', 'ninja-build']

  # clang sanitizer
  - os: linux
    compiler: clang
    env:
      - COMPILER=clang++-7
      - CMAKE_OPTIONS=-DJSON_Sanitizer=ON
      - UBSAN_OPTIONS=print_stacktrace=1,suppressions=$(pwd)/test/src/UBSAN.supp
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-7']
        packages: ['g++-6', 'clang-7', 'ninja-build']
    before_script:
      - export PATH=$PATH:/usr/lib/llvm-7/bin

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

  # no exceptions
  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - CMAKE_OPTIONS=-DJSON_NoExceptions=ON
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-4.9', 'ninja-build']

  # check amalgamation
  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - SPECIAL=amalgamation
      - MULTIPLE_HEADERS=ON
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-4.9', 'astyle', 'ninja-build']
    after_success:
      - make check-amalgamation

  # 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', 'ninja-build']
    before_script:
      - pip install --user cpp-coveralls
    after_success:
      - coveralls --build-root test --include include/nlohmann --gcov 'gcov-4.9' --gcov-options '\-lp'
    env:
      - COMPILER=g++-4.9
      - CMAKE_OPTIONS=-DJSON_Coverage=ON
      - MULTIPLE_HEADERS=ON

  # 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:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6']
        packages: ['g++-6', 'clang-3.6', 'ninja-build']
      coverity_scan:
        project:
          name: "nlohmann/json"
          description: "Build submitted via Travis CI"
        notification_email: niels.lohmann@gmail.com
        build_command_prepend: "mkdir coverity_build ; cd coverity_build ; cmake .. ; cd .."
        build_command: "make -C coverity_build"
        branch_pattern: coverity_scan
    env:
      - SPECIAL=coverity
      - COMPILER=clang++-3.6

  # OSX / Clang

  - os: osx
    osx_image: xcode8.3

  - os: osx
    osx_image: xcode9

  - os: osx
    osx_image: xcode9.1

  - os: osx
    osx_image: xcode9.2

  - os: osx
    osx_image: xcode9.3

  - os: osx
    osx_image: xcode9.4

  - os: osx
    osx_image: xcode10

  - os: osx
    osx_image: xcode10.1

  - os: osx
    osx_image: xcode10.2

  # Linux / GCC

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

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

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

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

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

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

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

  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-9
      - CXXFLAGS=-std=c++2a
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-9', 'ninja-build']

  # Linux / Clang

  - os: linux
    compiler: clang
    env: COMPILER=clang++-3.5
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.5']
        packages: ['g++-6', 'clang-3.5', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-3.6
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6']
        packages: ['g++-6', 'clang-3.6', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-3.7
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7']
        packages: ['g++-6', 'clang-3.7', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-3.8
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-6', 'clang-3.8', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-3.9
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-6', 'clang-3.9', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-4.0
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-4.0']
        packages: ['g++-6', 'clang-4.0', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-5.0
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-5.0']
        packages: ['g++-6', 'clang-5.0', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-6.0
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-6.0']
        packages: ['g++-6', 'clang-6.0', 'ninja-build']

  - os: linux
    compiler: clang
    env: COMPILER=clang++-7
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-7']
        packages: ['g++-6', 'clang-7', 'ninja-build']

  - os: linux
    compiler: clang
    env:
      - COMPILER=clang++-7
      - CXXFLAGS=-std=c++1z
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-7']
        packages: ['g++-6', 'clang-7', 'ninja-build']

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

script:
  # get CMake and Ninja (only for systems with brew - macOS)
  - |
     if [[ (-x $(which brew)) ]]; then
       brew update
       brew install cmake ninja
       brew upgrade cmake
       cmake --version
     fi

  # make sure CXX is correctly set
  - if [[ "${COMPILER}" != "" ]]; then export CXX=${COMPILER}; fi
  # by default, use the single-header version
  - if [[ "${MULTIPLE_HEADERS}" == "" ]]; then export MULTIPLE_HEADERS=OFF; fi

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

  # compile and execute unit tests
  - mkdir -p build && cd build
  - cmake .. ${CMAKE_OPTIONS} -DJSON_MultipleHeaders=${MULTIPLE_HEADERS} -GNinja && cmake --build . --config Release
  - ctest -C Release --timeout 2700 -V -j
  - 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
