sudo: false
language: c

env:
  global:
    # To force rebuilding of third-party dependencies, set this to 'true'.
    - BUILD_NVIM_DEPS=false
    # Travis has 1.5 virtual cores according to
    # http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
    - MAKE_CMD="make -j2"
    # Update PATH for pip.
    - PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
    # LLVM symbolizer path.
    - LLVM_SYMBOLIZER="$(which llvm-symbolizer-3.4)"
    # Build directory for Neovim.
    - BUILD_DIR="$TRAVIS_BUILD_DIR/build"
    # Build directory for third-party dependencies.
    - DEPS_BUILD_DIR="$HOME/nvim-deps"
    # Directory where third-party dependency sources are downloaded to.
    - DEPS_DOWNLOAD_DIR="$TRAVIS_BUILD_DIR/deps-downloads"
    # Install directory for Neovim.
    - INSTALL_PREFIX="$HOME/nvim-install"
    # Log directory for Clang sanitizers and Valgrind.
    - LOG_DIR="$BUILD_DIR/log"
    # Default CMake flags.
    - CMAKE_FLAGS="-DTRAVIS_CI_BUILD=ON
                   -DCMAKE_BUILD_TYPE=Debug
                   -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX
                   -DBUSTED_OUTPUT_TYPE=gtest
                   -DDEPS_PREFIX=$DEPS_BUILD_DIR/usr
                   -DMIN_LOG_LEVEL=0"
    - DEPS_CMAKE_FLAGS="-DDEPS_DOWNLOAD_DIR:PATH=$DEPS_DOWNLOAD_DIR"
    # Additional CMake flags for 32-bit builds.
    - CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32
                         -DCMAKE_IGNORE_PATH=/lib:/usr/lib:/usr/local/lib
                         -DCMAKE_TOOLCHAIN_FILE=$TRAVIS_BUILD_DIR/cmake/i386-linux-gnu.toolchain.cmake"
    # Environment variables for Clang sanitizers.
    - ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan"
    - ASAN_SYMBOLIZER_PATH="$LLVM_SYMBOLIZER"
    - TSAN_OPTIONS="external_symbolizer_path=$LLVM_SYMBOLIZER log_path=$LOG_DIR/tsan"
    - UBSAN_OPTIONS="log_path=$LOG_DIR/ubsan"
    # Environment variables for Valgrind.
    - VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
    # Cache marker for third-party dependencies cache.
    # If this file exists, we know that the cache contains compiled
    # dependencies and we can use it.
    - CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker"
    # Test success marker. If this file exists, we know that all tests
    # were successful. Required because we only want to update the cache
    # if the tests were successful, but don't have this information
    # available in before_cache (which is run before after_success).
    - SUCCESS_MARKER="$BUILD_DIR/.tests_successful"
    # default target name for functional tests
    - FUNCTIONALTEST=functionaltest

matrix:
  include:
    - os: linux
      env: CI_TARGET=lint
    - os: linux
      compiler: gcc-5
      env: GCOV=gcov-5 CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
    - os: linux
      compiler: gcc-5
      env: FUNCTIONALTEST=functionaltest-lua
    - os: linux
      # Travis creates a cache per compiler.
      # Set a different value here to store 32-bit
      # dependencies in a separate cache.
      compiler: gcc-5 -m32
      env: BUILD_32BIT=ON
    - os: linux
      compiler: clang
      env: CLANG_SANITIZER=ASAN_UBSAN
    - os: linux
      compiler: clang
      env: CLANG_SANITIZER=TSAN
    - os: osx
      compiler: clang
    - os: osx
      compiler: gcc-4.9
  fast_finish: true

before_install: .ci/before_install.sh
install:        .ci/install.sh
before_script:  .ci/before_script.sh
script:         .ci/script.sh
before_cache:   .ci/before_cache.sh
after_success:  .ci/after_success.sh

addons:
  apt:
    sources:
      # TODO: Remove PPA when Travis gets Python >=3.3.
      - deadsnakes
      - ubuntu-toolchain-r-test
    packages:
      - autoconf
      - automake
      - build-essential
      - clang-3.4
      - cmake
      - g++-5-multilib
      - g++-multilib
      - gcc-5-multilib
      - gcc-multilib
      - gdb
      - libc6-dev-i386
      - libtool
      - llvm-3.4-dev
      - pkg-config
      - python3.3-dev
      - unzip
      - valgrind
      - xclip

branches:
  except:
    - nightly

cache:
  apt: true
  directories:
    - "$HOME/.cache/pip"
    - "$HOME/.cache/nvim-deps"

notifications:
  webhooks:
    urls:
      - https://webhooks.gitter.im/e/b5c38c99f9677aa3d031