language: cpp
matrix:
  include:
    - compiler: clang
      os: linux
      env: SWIGLANG=
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=
    - compiler: gcc
      os: linux
      env: SWIGLANG=
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG= SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG= SWIG_CC=gcc-6 SWIG_CXX=g++-6
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=csharp
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=d
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=go
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=go VER=1.5
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=guile
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=java
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=javascript ENGINE=node
    - compiler: gcc
      os: linux
      env: SWIGLANG=javascript ENGINE=jsc
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=javascript ENGINE=v8
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=lua
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=lua VER=5.3
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=octave SWIGJOBS=-j2 # 3.8
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.0
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.2 CPP11=1
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=perl5
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=php5
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=php VER=7.0
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=php VER=7.1
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python VER=2.4
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python VER=2.5
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python VER=2.6
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python # 2.7
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python PY3=3 VER=3.2
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python PY3=3 VER=3.3
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python PY3=3 VER=3.4
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python PY3=3 VER=3.5
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-builtin VER=2.6
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-builtin
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-builtin PY3=3 VER=3.4
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-builtin PY3=3 VER=3.5
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-builtin PY3=3 VER=3.5 SWIGOPTPY3=
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-O
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-classic
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=r
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=ruby VER=1.9.3
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=ruby VER=2.0.0
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=ruby VER=2.3.0
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=scilab
      sudo: required
      dist: trusty
    - compiler: gcc
      os: linux
      env: SWIGLANG=tcl
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG=csharp SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG=java SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG=python SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG=csharp SWIG_CC=gcc-6 SWIG_CXX=g++-6 CPP14=1
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG=java SWIG_CC=gcc-6 SWIG_CXX=g++-6 CPP14=1
      sudo: required
      dist: trusty
    - os: linux
      env: SWIGLANG=python SWIG_CC=gcc-6 SWIG_CXX=g++-6 CPP14=1
      sudo: required
      dist: trusty
    - compiler: gcc
      os: osx
      env: SWIGLANG=
    - compiler: clang
      os: osx
      env: SWIGLANG=
    - compiler: clang
      os: osx
      env: SWIGLANG=csharp
    - compiler: clang
      os: osx
      env: SWIGLANG=go
    - compiler: clang
      os: osx
      env: SWIGLANG=guile
    - compiler: clang
      os: osx
      env: SWIGLANG=java
    - compiler: clang
      os: osx
      env: SWIGLANG=lua
    - compiler: clang
      os: osx
      env: SWIGLANG=perl5
    - compiler: clang
      os: osx
      env: SWIGLANG=php5
    - compiler: clang
      os: osx
      env: SWIGLANG=python
    - compiler: clang
      os: osx
      env: SWIGLANG=python PY3=3
    - compiler: clang
      os: osx
      env: SWIGLANG=ruby
    - compiler: clang
      os: osx
      env: SWIGLANG=tcl

  allow_failures:
    # Lots of failing tests currently
    - compiler: gcc
      os: linux
      env: SWIGLANG=ocaml
      sudo: required
      dist: trusty
    # Not quite working yet
    - compiler: gcc
      os: linux
      env: SWIGLANG=python SWIG_FEATURES=-O
      sudo: required
      dist: trusty
before_install:
  - date -u
  - uname -a
  - if test "$TRAVIS_OS_NAME" = "linux"; then lscpu && cat /proc/cpuinfo | grep "model name" && cat /proc/meminfo | grep MemTotal; fi
  - if test "$TRAVIS_OS_NAME" = "osx"; then sysctl -a | grep brand_string; fi
    # Travis overrides CC environment with compiler predefined values
  - if test -n "$SWIG_CC"; then export CC="$SWIG_CC"; fi
  - if test -n "$SWIG_CXX"; then export CXX="$SWIG_CXX"; fi
install:
  - if test "$TRAVIS_OS_NAME" = "linux"; then source Tools/travis-linux-install.sh; fi
  - if test "$TRAVIS_OS_NAME" = "osx"; then source Tools/travis-osx-install.sh; fi
  - if test -n "$CPP11"; then CONFIGOPTS+=(--enable-cpp11-testing --without-maximum-compile-warnings "CXXFLAGS=-std=c++11 -Wall -Wextra" "CFLAGS=-std=c11 -Wall -Wextra") && export CSTD=c11 && export CPPSTD=c++11; fi
  - if test -n "$CPP14"; then CONFIGOPTS+=(--enable-cpp11-testing --without-maximum-compile-warnings "CXXFLAGS=-std=c++14 -Wall -Wextra" "CFLAGS=-std=c11 -Wall -Wextra") && export CSTD=c11 && export CPPSTD=c++14; fi
  - ls -la $(which $CC)
  - ls -la $(which $CXX)
  - $CC --version
  - $CXX --version
script:
  - echo 'Configuring...' && echo -en 'travis_fold:start:script.1\\r'
  - if test -n "$SWIGLANG"; then CONFIGOPTS+=(--without-alllang --with-$WITHLANG); fi
  - echo "${CONFIGOPTS[@]}"
  - ./autogen.sh && mkdir -p build/build && cd build/build && ../../configure "${CONFIGOPTS[@]}"
  - echo -en 'travis_fold:end:script.1\\r'
  - make -s $SWIGJOBS
  - ./swig -version && ./swig -pcreversion
  - if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-ccache; fi
  - if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-errors-test-suite; fi
  - echo 'Installing...' && echo -en 'travis_fold:start:script.2\\r'
  - if test -z "$SWIGLANG"; then sudo make -s install && swig -version && ccache-swig -V; fi
  - echo -en 'travis_fold:end:script.2\\r'
  # Stricter compile flags for examples. Various headers and SWIG generated code prevents full use of -pedantic.
  - if test -n "$SWIGLANG"; then cflags=$($TRAVIS_BUILD_DIR/Tools/testflags.py --language $SWIGLANG --cflags --std=$CSTD --compiler=$CC) && echo $cflags; fi
  - if test -n "$SWIGLANG"; then cxxflags=$($TRAVIS_BUILD_DIR/Tools/testflags.py --language $SWIGLANG --cxxflags --std=$CPPSTD --compiler=$CC) && echo $cxxflags; fi
  - if test -n "$SWIGLANG"; then make -s check-$SWIGLANG-version; fi
  - if test -n "$SWIGLANG"; then make check-$SWIGLANG-enabled; fi
  - if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-examples CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
  - if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-test-suite CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
  - echo 'Cleaning...' && echo -en 'travis_fold:start:script.3\\r'
  - make check-maintainer-clean && ../../configure $CONFIGOPTS
  - echo -en 'travis_fold:end:script.3\\r'
