language: cpp

os:
  - osx
  - linux

dist: xenial
sudo: required

compiler:
  - clang
  - gcc

env:
  global:
    - CCACHE_MAXSIZE=800M

  matrix:
    - BUILD_MODE="shared"
    - BUILD_MODE="coverage"
    - BUILD_MODE="fuzzers"
    - BUILD_MODE="valgrind"
    - BUILD_MODE="cross-i386"
    - BUILD_MODE="cross-ppc32"
    - BUILD_MODE="cross-ppc64"
    - BUILD_MODE="cross-arm32"
    - BUILD_MODE="cross-arm64"
    - BUILD_MODE="cross-mips64"
    - BUILD_MODE="cross-win64"
    - BUILD_MODE="gcc4.8"
    - BUILD_MODE="static"
    - BUILD_MODE="mini-shared"
    - BUILD_MODE="bsi"
    - BUILD_MODE="nist"
    - BUILD_MODE="docs"
    - BUILD_MODE="lint"

matrix:
  exclude:
    # Skip GCC on OS X entirely
    - os: osx
      compiler: gcc

    # XCode 9.4 ICEs on 32-bit ARM builds
    - os: osx
      env: BUILD_MODE="cross-arm32"

    # Run static, docs, lint, bsi, nist, fuzzers, coverage, valgrind,
    # sanitizer, minimized and non-ARM cross builds only on Linux/gcc.
    # The sanitizer builds under Clang run the tests very slowly and
    # cause CI timeouts.

    - compiler: clang
      env: BUILD_MODE="static"
    - compiler: clang
      env: BUILD_MODE="bsi"
    - compiler: clang
      env: BUILD_MODE="nist"
    - compiler: clang
      env: BUILD_MODE="lint"
    - compiler: clang
      env: BUILD_MODE="docs"
    - compiler: clang
      env: BUILD_MODE="coverage"
    - compiler: clang
      env: BUILD_MODE="fuzzers"
    - compiler: clang
      env: BUILD_MODE="valgrind"
    - compiler: clang
      env: BUILD_MODE="mini-shared"
    - compiler: clang
      env: BUILD_MODE="cross-win64"
    - compiler: clang
      env: BUILD_MODE="cross-ppc32"
    - compiler: clang
      env: BUILD_MODE="cross-ppc64"
    - compiler: clang
      env: BUILD_MODE="cross-mips64"
    - compiler: clang
      env: BUILD_MODE="cross-i386"
    - compiler: clang
      env: BUILD_MODE="gcc4.8"

   # No ARM Clang compiler on Linux
    - os: linux
      compiler: clang
      env: BUILD_MODE="cross-arm32"
    - os: linux
      compiler: clang
      env: BUILD_MODE="cross-arm64"

install:
  - ./src/scripts/ci/setup_travis.sh

script:
  - ./src/scripts/ci_build.py --os=$TRAVIS_OS_NAME --cc=$CC --cc-bin=$CXX --without-pylint3 --pkcs11-lib=/tmp/softhsm/lib/softhsm/libsofthsm2.so $BUILD_MODE

# whitelist branches to avoid testing feature branches twice (as branch and as pull request)
branches:
  only:
    - master
    - release-2
    - coverity_scan

git:
  depth: 10

cache:
  ccache: true

addons:
  coverity_scan:
    project:
      name: "randombit/botan"
    notification_email: jack@randombit.net
    build_command_prepend: "./configure.py --no-optimizations --with-zlib --with-openssl"
    build_command: "make -j2"
    branch_pattern: coverity_scan
