sudo: required
dist: trusty
language: cpp

env:
  global:
    - JOBS=4
    - MAKEFLAGS="-j ${JOBS}"
    - POLYBAR_BUILD_TYPE="compile"

# Build configurations can either not specify anything for 'addon' and use this
# default list of packages. Or they can pick and choose which package groups to
# install
addons:
  apt:
    sources: &sources
      - ubuntu-toolchain-r-test
    packages:
      - &gcc
        - g++-5
        - gcc-5
      - &clang
        - libstdc++-5-dev
      - &base_deps
        - libxcb-composite0-dev
        - libxcb-ewmh-dev
        - libxcb-icccm4-dev
        - libxcb-image0-dev
        - libxcb-randr0-dev
        - libxcb-util0-dev
        - python-xcbgen
        - xcb-proto
      - &optional_deps
        - libxcb-xkb-dev
        - libxcb-cursor-dev
        - libxcb1-dev
        - xutils-dev
        - i3-wm
        - libasound2-dev
        - libpulse-dev
        - libcairo2-dev
        - libiw-dev
        - libmpdclient-dev

script: source ${TRAVIS_BUILD_DIR}/common/travis/build.sh

matrix:
  include:
    - compiler: clang
      env: BUILD_TYPE=Release
      addons: {apt: {sources: *sources, packages: [*clang, *base_deps, *optional_deps]}}

    - compiler: gcc
      env: BUILD_TYPE=Coverage POLYBAR_BUILD_TYPE=tests BUILD_TESTS=ON
      addons: {apt: {sources: *sources, packages: [*gcc, *base_deps, *optional_deps]}}
      script: ${TRAVIS_BUILD_DIR}/common/travis/tests.sh
      after_success:
        - cd ${TRAVIS_BUILD_DIR}
        - bash <(curl -s https://codecov.io/bash) -F unittests -a "-ap" -Z || echo "Codecov did not collect coverage reports"

    - compiler: gcc
      env: BUILD_TYPE=Release
      addons: {apt: {sources: *sources, packages: [*gcc, *base_deps, *optional_deps]}}

      # Minimal build, contains no optional dependencies. This makes sure that
      # we properly remove files from compilation that depend on libraries that
      # are not installed
    - compiler: gcc
      env: BUILD_TYPE=Release POLYBAR_BUILD_TYPE=minimal
      addons: {apt: {sources: *sources, packages: [*gcc, *base_deps]}}

cache:
  ccache: true
  apt: true
  directories:
    - ${TRAVIS_BUILD_DIR}/deps/xcb-util-xrm

install:
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  - mkdir -p "${DEPS_DIR}" && cd "${DEPS_DIR}"
  - source ${TRAVIS_BUILD_DIR}/common/travis/environment.sh
  - source ${TRAVIS_BUILD_DIR}/common/travis/install_xcb_xrm.sh

before_script:
  - source ${TRAVIS_BUILD_DIR}/common/travis/summary.sh
  - source ${TRAVIS_BUILD_DIR}/common/travis/configure.sh

# Only fetch the newest 5 commits instead of 50
git:
  depth: 5

notifications:
  email: false
  irc:
    channels:
      - "irc.freenode.org#polybar"
    template:
      - "%{author} pushed #%{commit} \"%{commit_subject}\" to %{repository_name}/%{branch}"
      - "Build #%{build_number} %{result} / %{build_url} (diff: %{compare_url})"
    use_notice: true
    on_success: change
    on_failure: change