sudo: required
dist: trusty
language: cpp

compiler:
  - clang
# - gcc

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
      - llvm-toolchain-precise-3.8
    packages:
      - gcc-5
      - g++-5
      - clang-3.8

env:
  global:
    - BUILD_TYPE="Release"
    - LLVM_VERSION="3.8.1"
    - 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"
    - CMAKE_URL="https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz"

cache:
  directories:
    - ${TRAVIS_BUILD_DIR}/deps/cmake
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.1/install

before_install:
  - sudo apt-add-repository -y "ppa:george-edison55/george-edison"
  - sudo apt-get -qq update

  # Install packages : core
  #--------------------------------------------------------------------------x
  - sudo apt-get install -y cmake cmake-data libboost-dev

  # Install packages : xcb
  #--------------------------------------------------------------------------x
  - sudo apt-get install -y libxcb1-dev libxcb-util0-dev libxcb-randr0-dev libxcb-ewmh-dev libxcb-icccm4-dev xcb-proto python-xcbgen libfreetype6-dev

  # Install packages : optional
  #--------------------------------------------------------------------------x
  - sudo apt-get install -y i3-wm libiw-dev libasound2-dev libmpdclient-dev

install:
  # Install dependencies in ${TRAVIS_BUILD_DIR}/deps
  #--------------------------------------------------------------------------x
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  - LLVM_ROOT="${DEPS_DIR}/llvm-${LLVM_VERSION}"
  - mkdir -p "${DEPS_DIR}"

  # Update python path to make sure we find the xcbgen module
  #--------------------------------------------------------------------------x
  - export PYTHONPATH="/usr/lib/python2.7/dist-packages:${PYTHONPATH}"

  # Install a later version of cmake
  #--------------------------------------------------------------------------x
  - |
    cd "${DEPS_DIR}"
    if [[ -z "$(ls -A ${DEPS_DIR}/cmake/bin 2>/dev/null)" ]]; then
      mkdir -p cmake && travis_retry wget --no-check-certificate --quiet -O - "${CMAKE_URL}" | tar --strip-components=1 -xz -C cmake
    fi
  - export PATH="${DEPS_DIR}/cmake/bin:${PATH}"

  # Install LLVM libc++
  #--------------------------------------------------------------------------x
  - |
    if [[ "${CXX}" == "clang++" ]] && [[ -z "$(ls -A ${LLVM_ROOT}/install/include 2>/dev/null)" ]]; then
      mkdir -p "${LLVM_ROOT}" "${LLVM_ROOT}/build" "${LLVM_ROOT}/projects/libcxx" "${LLVM_ROOT}/projects/libcxxabi"
      travis_retry wget --quiet -O - "${LLVM_URL}" | tar --strip-components=1 -xJ -C "${LLVM_ROOT}"
      travis_retry wget --quiet -O - "${LIBCXX_URL}" | tar --strip-components=1 -xJ -C "${LLVM_ROOT}/projects/libcxx"
      travis_retry wget --quiet -O - "${LIBCXXABI_URL}" | tar --strip-components=1 -xJ -C "${LLVM_ROOT}/projects/libcxxabi"
      (cd "${LLVM_ROOT}/build" && cmake .. -DCMAKE_CXX_COMPILER=clang++ && make cxxabi cxx -j2)
      (cd "${LLVM_ROOT}/build/projects/libcxx" && make install)
      (cd "${LLVM_ROOT}/build/projects/libcxxabi" && make install)
      export CXXFLAGS="${CXXFLAGS} -I${LLVM_ROOT}/install/include"
      export CXXFLAGS="${CXXFLAGS} -I${LLVM_ROOT}/install/include/c++/v1"
      export CXXFLAGS="${CXXFLAGS} -stdlib=libc++"
      export LDFLAGS="${LDFLAGS} -L${LLVM_ROOT}/install/lib"
      export LDFLAGS="${LDFLAGS} -lc++"
      export LDFLAGS="${LDFLAGS} -lc++abi"
      export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_ROOT}/install/lib"
    fi

  # Set compiler's
  #--------------------------------------------------------------------------x
  - if [[ "${CXX}" == "clang++" ]]; then export CXX="clang++-3.8" CC="clang-3.8"; fi
# - if [[ "${CXX}" == "g++" ]]; then export CXX="g++-5" CC="gcc-5"; fi

before_script:
  - eval "${CXX} --version"
  - eval "${CC} --version"
  - cmake --version
  - mkdir -p "${TRAVIS_BUILD_DIR}/build"
  - cd "${TRAVIS_BUILD_DIR}/build"
  - cmake -DCMAKE_C_COMPILER="${CC}" -DCMAKE_CXX_COMPILER="${CXX}" -DCMAKE_CXX_FLAGS="${CXXFLAGS}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" -DENABLE_CCACHE=OFF ..

script: make

notifications:
  irc:
    channels:
      - "irc.freenode.net#lemonbuddy"
    template:
      - "%{author} pushed #%{commit} \"%{commit_subject}\" -> %{repository_name}/%{branch}"
      - "Build #%{build_number}: %{result} // Compare at %{compare_url}"
    use_notice: true
    skip_join: true