dist: trusty
sudo: false
language: c

env:
  global:
    # Set "false" to force rebuild of third-party dependencies.
    - CACHE_ENABLE=true
    # 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"
    # Nvim log file.
    - NVIM_LOG_FILE="$BUILD_DIR/.nvimlog"
    # Default CMake flags.
    - CMAKE_FLAGS="-DTRAVIS_CI_BUILD=ON
                   -DCMAKE_BUILD_TYPE=Debug
                   -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX
                   -DBUSTED_OUTPUT_TYPE=nvim
                   -DDEPS_PREFIX=$DEPS_BUILD_DIR/usr
                   -DMIN_LOG_LEVEL=3"
    - 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"
    - TSAN_OPTIONS="log_path=$LOG_DIR/tsan"
    - UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
    # Environment variables for Valgrind.
    - VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
    # If this file exists, the cache is valid (compile was successful).
    - CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker"
    # default target name for functional tests
    - FUNCTIONALTEST=functionaltest
    - CI_TARGET=tests

jobs:
  include:
    - stage: normal builds
      os: linux
      compiler: clang
      env: >
        CLANG_SANITIZER=ASAN_UBSAN
        CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
      sudo: true
    - os: linux
      compiler: gcc
      env: >
        FUNCTIONALTEST=functionaltest-lua
        CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
        DEPS_CMAKE_FLAGS="$DEPS_CMAKE_FLAGS -DUSE_BUNDLED_LUAJIT=OFF"
    - os: linux
      # Travis creates a cache per compiler. Set a different value here to
      # store 32-bit dependencies in a separate cache.
      compiler: gcc -m32
      env: BUILD_32BIT=ON
    - os: osx
      compiler: clang
      osx_image: xcode7.3  # macOS 10.11
    - os: osx
      compiler: gcc
      osx_image: xcode7.3  # macOS 10.11
    - os: linux
      env: CI_TARGET=lint
    - stage: Flaky builds
      os: linux
      compiler: gcc
      env: GCOV=gcov CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
    - os: linux
      compiler: clang
      env: CLANG_SANITIZER=TSAN
  allow_failures:
    - env: GCOV=gcov CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
    - env: CLANG_SANITIZER=TSAN
  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:
    packages:
      - autoconf
      - automake
      - apport
      - build-essential
      - clang
      - cmake
      - cscope
      - g++-multilib
      - gcc-multilib
      - gdb
      - language-pack-tr
      - libc6-dev-i386
      - libtool
      - locales
      - ninja-build
      - pkg-config
      - unzip
      - valgrind
      - xclip

branches:
  except:
    - nightly

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

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