language: cpp
matrix:
  include:
# gcc
#   xenial
#   gcc 5 is the default on xenial
    - os: linux
      dist: xenial
      compiler: gcc
      addons:
        apt:
          packages:
            - valgrind
            - cppcheck
            - doxygen
      env: CHECK="true"
#   bionic
    - os: linux
      dist: bionic
      compiler: gcc
      env: MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
    
    # gcc 7 is the default on bionic
    - os: linux
      dist: bionic
      compiler: gcc
      env: CHECK="true"
    - os: linux
      dist: bionic
      compiler: gcc
      env: MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"

# clang      
#   xenial
    - os: linux
      dist: xenial
      compiler: clang
      addons:
        apt:
          sources:
            - llvm-toolchain-xenial-5.0
          packages:
            - clang-5.0
      env: MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"
    - os: linux
      dist: xenial
      compiler: clang
      addons:
        apt:
          sources:
            - llvm-toolchain-xenial-6.0
          packages:
            - clang-6.0
      env: MATRIX_EVAL="CC=clang-6.0 && CXX=clang++-6.0" 

    # clang-7 is the default on xenial and bionic
    - os: linux
      dist: xenial
      compiler: clang
      addons:
        apt:
          packages:
            - valgrind
            - cppcheck
            - doxygen
      env: CHECK="true"

# bionic
    - os: linux
      dist: bionic
      compiler: clang
      env: CHECK="true"
# osx
    - os: osx
      osx_image: xcode9.4
      env: XCODE="true"
    - os: osx
      osx_image: xcode10.1
      env: XCODE="true" CHECK="true"

#  allow_failures:
#    - os: osx

install:
  - sh autogen.sh

before_install:
  - echo $CC
  - echo $LANG
  - echo $LC_ALL
  - set -e
  - if [ "$TRAVIS_OS_NAME" = "linux" ]; then
      eval "${MATRIX_EVAL}";
      if [ -n "$MATRIX_EVAL" ] && [ "$TRAVIS_COMPILER" != "clang" ]; then
        sudo apt-get install -y $CC;
      fi;
    fi

before_script:
  - ./configure

script:
  - make
  # when using bionic, Travis seems to ignore the "addons" section, so installing the packages with apt-get...
  - if [ -n "$CHECK" ]; then
      if [ "$TRAVIS_OS_NAME" = "osx" ]; then
        brew install doxygen;
      else
        if [ "$TRAVIS_DIST" = "bionic" ]; then
          sudo apt-get install -y valgrind cppcheck doxygen;
        fi;
      fi;
      make distcheck;
      if type cppcheck &> /dev/null ; then cppcheck --error-exitcode=1 --quiet *.h *.c tests/ ; fi;
    fi

