language: cpp

dist: trusty
sudo: true

env:
  global:
    secure: FNZOWYO89qsT9kQKngrYbpnqCTMCSCSQ2rnZ3l17KHctOfS554TTDS+dfxPYz2XHm6azYDVcyBSs2gWJ6TmXZZZqEfr3X4VV4ooAa9PoeIkvVlT654zjZwxeXPYXrHFXZh/ImLUGWjsxRaUHYOv5SzyNGcZv07dtLKVd0ykhbH4=

matrix:
  include:

  - env: BUILD_TYPE=Debug ASAN=Off RUN_TEST=On EXCEPTIONS=On
    os: osx
    osx_image: xcode8

  - env: BUILD_TYPE=Debug ASAN=Off LLVM_VERSION=3.8.0 RUN_TEST=On EXCEPTIONS=On
    os: linux
    compiler: clang

  - env: BUILD_TYPE=Release ASAN=Off GCC_VERSION=4.9 RUN_TEST=On EXCEPTIONS=On
    os: linux
    compiler: gcc
    addons:
      apt:
        packages:
        - g++-4.9
        sources:
        - ubuntu-toolchain-r-test

  - env: BUILD_TYPE=Release ASAN=Off GCC_VERSION=7 RUN_TEST=On EXCEPTIONS=On
    os: linux
    compiler: gcc
    addons: &gcc7
      apt:
        packages:
          - g++-7
        sources:
          - ubuntu-toolchain-r-test

  - env: BUILD_TYPE=Debug ASAN=Off GCC_VERSION=8 RUN_TEST=On EXCEPTIONS=Off
    os: linux
    compiler: gcc
    addons: &gcc8
      apt:
        packages:
          - g++-8
        sources:
          - ubuntu-toolchain-r-test

  - env: BUILD_TYPE=Release ASAN=Off GCC_VERSION=8 RUN_TEST=On EXCEPTIONS=On
    os: linux
    compiler: gcc
    addons: &gcc8
      apt:
        packages:
          - g++-8
        sources:
          - ubuntu-toolchain-r-test

  - env: BUILD_TYPE=Debug ASAN=Off LLVM_VERSION=3.8.0 RUN_TEST=Off EXCEPTIONS=On PROJECT=doc PUBLISH_DOCS=On DOXYGEN_VERSION=1.8.11
    os: linux
    compiler: clang
    addons:
      apt:
        packages:
        - graphviz
        sources:
        - ubuntu-toolchain-r-test

cache:
  directories:
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.0
    - ${TRAVIS_BUILD_DIR}/deps/cmake-3.5.2
    - ${TRAVIS_BUILD_DIR}/deps/doxygen-1.8.11

install:
  ############################################################################
  # All the dependencies are installed in ${TRAVIS_BUILD_DIR}/deps/
  ############################################################################
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  - mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}

  ############################################################################
  # Install Clang, libc++ and libc++abi
  ############################################################################
  - |
    if [[ "${LLVM_VERSION}" != "" ]]; then
      LLVM_DIR=${DEPS_DIR}/llvm-${LLVM_VERSION}
      if [[ -z "$(ls -A ${LLVM_DIR})" ]]; then
        LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
        LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz"
        LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz"
        CLANG_URL="http://llvm.org/releases/${LLVM_VERSION}/clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-14.04.tar.xz"
        mkdir -p ${LLVM_DIR} ${LLVM_DIR}/build ${LLVM_DIR}/projects/libcxx ${LLVM_DIR}/projects/libcxxabi ${LLVM_DIR}/clang
        travis_retry wget --quiet -O - ${LLVM_URL}      | tar --strip-components=1 -xJ -C ${LLVM_DIR}
        travis_retry wget --quiet -O - ${LIBCXX_URL}    | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxx
        travis_retry wget --quiet -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxxabi
        travis_retry wget --quiet -O - ${CLANG_URL}     | tar --strip-components=1 -xJ -C ${LLVM_DIR}/clang
        (cd ${LLVM_DIR}/build && cmake .. -DCMAKE_INSTALL_PREFIX=${LLVM_DIR}/install -DCMAKE_CXX_COMPILER=clang++)
        (cd ${LLVM_DIR}/build/projects/libcxx && make install -j2)
        (cd ${LLVM_DIR}/build/projects/libcxxabi && make install -j2)
      fi
      export CXXFLAGS="-nostdinc++ -isystem ${LLVM_DIR}/install/include/c++/v1"
      export LDFLAGS="-L ${LLVM_DIR}/install/lib -l c++ -l c++abi"
      export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_DIR}/install/lib"
      export PATH="${LLVM_DIR}/clang/bin:${PATH}"
      $LLVM_DIR/clang/bin/clang++ --version
    fi

  ############################################################################
  # Use gcc
  ############################################################################
  - |
    if [ -n "$GCC_VERSION" ]; then
      export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}";
      g++-${GCC_VERSION} --version
    fi

  - $CXX --version

  ############################################################################
  # Install a recent Doxygen
  ############################################################################
  - |
    if [ -n "$DOXYGEN_VERSION" ]; then
      DOXYGEN_DIR=${DEPS_DIR}/doxygen-${DOXYGEN_VERSION}
      if [[ -z "$(ls -A ${DOXYGEN_DIR})" ]]; then
        DOXYGEN_URL="https://downloads.sourceforge.net/doxygen/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz"
        mkdir -p ${DOXYGEN_DIR} && travis_retry wget --quiet -O - ${DOXYGEN_URL} | tar --strip-components=1 -xz -C ${DOXYGEN_DIR}
      fi
      export PATH=${DOXYGEN_DIR}/bin:${PATH}
      doxygen --version
    fi

  ############################################################################
  # Install a recent CMake (unless already installed on OS X)
  ############################################################################
  - |
    if [ -z "$CMAKE_VERSION" ]; then
      CMAKE_VERSION=3.5.2;
    fi;
    if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
      CMAKE_DIR=${DEPS_DIR}/cmake-${CMAKE_VERSION}
      if [[ -z "$(ls -A ${CMAKE_DIR})" ]]; then
        CMAKE_URL="http://www.cmake.org/files/v3.5/cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz"
        mkdir -p ${CMAKE_DIR} && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C ${CMAKE_DIR}
      fi
      export PATH=${CMAKE_DIR}/bin:${PATH}
    else
      if ! brew ls --version cmake &>/dev/null; then brew install cmake; fi
    fi
    cmake --version

before_script:
  - |
    if [ -z "$BUILD_TYPE" ]; then
      BUILD_TYPE=Release;
    fi;
    if [ -z "$EXCEPTIONS" ]; then
      EXCEPTIONS=On;
    fi;
    if [[ "${ASAN}" == "On" ]]; then
      export CXXFLAGS="${CXXFLAGS} -fsanitize=address,undefined,integer -fno-omit-frame-pointer -fno-sanitize=unsigned-integer-overflow";
    fi;
    if [ -n "$LLVM_VERSION" ]; then
      export CXXFLAGS="${CXXFLAGS} -D__extern_always_inline=inline";
    fi;

  ############################################################################
  # generate build
  ############################################################################
  - cd ${TRAVIS_BUILD_DIR}
  - cmake . -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DRX_USE_EXCEPTIONS=${EXCEPTIONS}

script:
  ############################################################################
  # Run build
  ############################################################################
  - make VERBOSE=1 $PROJECT

  ############################################################################
  # Test build
  ############################################################################
  - cd build/test/
  - if [[ "${RUN_TEST}" == "On" ]]; then ctest -V; fi
  - cd ../../

after_success:
  ############################################################################
  # Publish documentation
  ############################################################################
  - |
    if [[ "${PUBLISH_DOCS}" == "On" ]]; then
      sh projects/scripts/travis-doxygen.sh;
    fi;

branches:
  only:
  - master

notifications:
  email:
    recipients:
      - kirk.shoop@microsoft.com
    on_success: always
    on_failure: always
  slack: reactivex:eq4FFCchRIzufO2ZmpuuiJ9E
  webhooks:
    urls:
      - https://webhooks.gitter.im/e/fcf05f21f5d4102e12e7
deploy:
  - provider: releases
    api_key:
      secure: sMyo0U4WxZ0kOlQ9SzKfeuU2/5y0Ngt8A0B0N6bb0TcGIyLhQv2q216Q+T0rkQKc04WnLY0Vr1/q9LonAA46nGq7zAiWcC3TY0zVUKRmKWrotQb/QqW1tvVEARKwG7CO+HCcGT3XCeM69XA/L7WiXRskTxS1+5Vy46/tVZBKofg=
    file: ''
    on:
      tags: true
      repo: Reactive-Extensions/RxCpp
