# This file was inspired from https://github.com/google/fruit

#
# General config
#
branches:
  only:
  - master
dist: trusty
language: cpp

# Enable caching
cache:
  timeout: 600
  directories:
  - build
  - travis/mtime_cache

# Enable docker support
services:
- docker
sudo: required

#
# Configurations
#
jobs:
  include:

    ###
    # Stage: Build dependencies
    ###

    # osx
    - stage: Build dependencies
      os: osx
      compiler: clang
      env: BUILD=DefaultDebug COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultDebug BuildDep
    - stage: Build dependencies
      os: osx
      compiler: clang
      env: BUILD=DefaultRelease COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultRelease BuildDep
    # ubuntu-16.10
    - stage: Build dependencies
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultDebug BuildDep
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build dependencies
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultRelease BuildDep
      before_cache:
        docker cp storm:/storm/. .
    # debian-9
    - stage: Build dependencies
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultDebug BuildDep
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build dependencies
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultRelease BuildDep
      before_cache:
        docker cp storm:/storm/. .

    ###
    # Stage: Build library (1st run)
    ###

    # osx
    - stage: Build library (1st run)
      os: osx
      compiler: clang
      env: BUILD=DefaultDebug COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultDebug BuildLib1
    - stage: Build library (1st run)
      os: osx
      compiler: clang
      env: BUILD=DefaultRelease COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultRelease BuildLib1
    # ubuntu-16.10
    - stage: Build library (1st run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultDebug BuildLib1
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build library (1st run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultRelease BuildLib1
      before_cache:
        docker cp storm:/storm/. .
    # debian-9
    - stage: Build library (1st run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultDebug BuildLib1
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build library (1st run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultRelease BuildLib1
      before_cache:
        docker cp storm:/storm/. .

    ###
    # Stage: Build library (2nd run)
    ###

    # osx
    - stage: Build library (2nd run)
      os: osx
      compiler: clang
      env: BUILD=DefaultDebug COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultDebug BuildLib
    - stage: Build library (2nd run)
      os: osx
      compiler: clang
      env: BUILD=DefaultRelease COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultRelease BuildLib
    # ubuntu-16.10
    - stage: Build library (2nd run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultDebug BuildLib
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build library (2nd run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultRelease BuildLib
      before_cache:
        docker cp storm:/storm/. .
    # debian-9
    - stage: Build library (2nd run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultDebug BuildLib
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build library (2nd run)
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultRelease BuildLib
      before_cache:
        docker cp storm:/storm/. .

    ###
    # Stage: Build all
    ###

    # osx
    - stage: Build all
      os: osx
      compiler: clang
      env: BUILD=DefaultDebug COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultDebug BuildAll
    - stage: Build all
      os: osx
      compiler: clang
      env: BUILD=DefaultRelease COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultRelease BuildAll
    # ubuntu-16.10
    - stage: Build all
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultDebug BuildAll
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build all
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultRelease BuildAll
      before_cache:
        docker cp storm:/storm/. .
    # debian-9
    - stage: Build all
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultDebug BuildAll
      before_cache:
        docker cp storm:/storm/. .
    - stage: Build all
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultRelease BuildAll
      before_cache:
        docker cp storm:/storm/. .

    ###
    # Stage: Test all
    ###

    # osx
    - stage: Test all
      os: osx
      compiler: clang
      env: BUILD=DefaultDebug COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultDebug TestAll
    - stage: Test all
      os: osx
      compiler: clang
      env: BUILD=DefaultRelease COMPILER=clang-4.0 STL=libc++
      install: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/install_osx.sh
      script: export OS=osx; export COMPILER='clang-4.0'; export STL='libc++';
        travis/build.sh DefaultRelease TestAll
    # ubuntu-16.10
    - stage: Test all
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultDebug TestAll
      before_cache:
        docker cp storm:/storm/. .
    - stage: Test all
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=ubuntu-16.10
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='ubuntu-16.10';
        travis/build.sh DefaultRelease TestAll
      before_cache:
        docker cp storm:/storm/. .
    # debian-9
    - stage: Test all
      os: linux
      compiler: gcc
      env: BUILD=DefaultDebug COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultDebug TestAll
      before_cache:
        docker cp storm:/storm/. .
    - stage: Test all
      os: linux
      compiler: gcc
      env: BUILD=DefaultRelease COMPILER=gcc-6 LINUX=debian-9
      install: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/install_linux.sh
      script: export OS=linux; export COMPILER='gcc-6'; export LINUX='debian-9';
        travis/build.sh DefaultRelease TestAll
      before_cache:
        docker cp storm:/storm/. .