language: cpp

os:
  - linux
  - osx

env:
  - variant=test_release lang=cpp11 sim=0 coverage=1 docs=1
  - variant=test_debug lang=cpp11 sim=1 coverage=0
  - variant=test_debug lang=cpp98 sim=0 coverage=0
  - variant=test_barebones lang=cpp11 sim=0 coverage=0

git:
  submodules: false

branches:
  only:
    - master
    - RC_1_1
    - RC_1_0

# container-based builds
sudo: false
cache:
  directories:
    - $HOME/.ccache

# sources  list: https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json,
# packages list: https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
addons:
  apt:
    sources:
    - boost-latest
    - ubuntu-toolchain-r-test
    packages:
    - libboost1.55-all-dev
    - libboost1.55-tools-dev
    - python2.7-dev
    - g++-4.8

before_install:
  - git submodule update --init --recursive
  - if [ $TRAVIS_OS_NAME == "osx" ]; then brew update > /dev/null && brew install --quiet ccache boost-build boost-python; fi
  - 'if [[ $TRAVIS_OS_NAME == "osx" && $docs = "1" ]]; then
    brew install --quiet https://raw.githubusercontent.com/catap/homebrew/docutils/Library/Formula/docutils.rb;
    mkdir -p /Users/travis/Library/Python/2.7/lib/python/site-packages;
    echo ''import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")'' >> /Users/travis/Library/Python/2.7/lib/python/site-packages/homebrew.pth;
    sudo easy_install Pygments;
    sudo easy_install -U aafigure;
    fi'

# disable simulations on OSX for now. It hangs on travis
  - if [ $TRAVIS_OS_NAME == "osx" ]; then export toolset="darwin-${lang}"; export sim="0"; fi
  - if [ $TRAVIS_OS_NAME == "osx" ]; then export target="osx-tests"; fi
  - if [ $TRAVIS_OS_NAME == "linux" ]; then export toolset="gcc-${lang}"; fi
  - if [[ $TRAVIS_OS_NAME == "linux" && $coverage == "1" ]]; then
    export coverage_toolset=gcc-coverage;
    pip install --user codecov;
    else
    export coverage_toolset=$toolset;
    fi
  - 'echo "using toolset: " ${toolset}'

install:
  - g++-4.8 --version
  - 'echo "using gcc : cpp11 : ccache g++-4.8 : <cflags>-std=c11 <cxxflags>-std=c++11 ;" > ~/user-config.jam'
  - 'echo "using gcc : coverage : ccache g++-4.8 : <cflags>-std=c11 <cxxflags>-std=c++11 <compileflags>--coverage <linkflags>--coverage ;" >> ~/user-config.jam'
  - 'echo "using gcc : cpp98 : ccache g++-4.8 : <cflags>-std=c99 <cxxflags>-std=c++98 ;" >> ~/user-config.jam'

# osx builds need to disable the deprecated warning because of the openssl
# shipping with the system having marked all functions as deprecated. Since
# we're building with -Werror, we can't have those warnings
  - 'echo "using darwin : cpp11 : ccache clang++ : <cflags>-std=c11 <cxxflags>-std=c++11 <compileflags>-Wno-deprecated-declarations ;" >> ~/user-config.jam'
  - 'echo "using darwin : cpp98 : ccache clang++ : <cflags>-std=c99 <cxxflags>-std=c++98 <compileflags>-Wno-deprecated-declarations ;" >> ~/user-config.jam'
  - 'echo "using python : 2.7 ;" >> ~/user-config.jam'
  - ccache -V && ccache --show-stats && ccache --zero-stats
  - if [[ $docs == "1" && $TRAVIS_OS_NAME == "osx" ]]; then rst2html.py --version; fi

script:
# disable invoking docutils for now, until we can have a modern version of it
  - cd docs
  - if [[ $docs == "1" && $TRAVIS_OS_NAME == "osx" ]]; then make RST2HTML=rst2html.py; fi
  - cd ..

  - cd test
  - bjam --hash -j3 warnings-as-errors=on variant=$variant -l900 $coverage_toolset $target
# if we're building with code coverage, report it as soon as possible
  - if [[ $TRAVIS_OS_NAME == "linux" && $coverage == "1" ]]; then
    codecov --root .. --gcov-exec gcov-4.8;
    fi

  - cd ../examples
  - bjam --hash -j3 warnings-as-errors=on variant=$variant $toolset link=shared
  - cd ..

# build libtorrent separately and install it in a temporary (well known) dir
# we have to do this because on linux the name of the python module is the same
# as the main library, so we can't stage them to the same directory
  - bjam --hash -j3 warnings-as-errors=on link=shared variant=$variant $toolset install location=./lib

  - cd bindings/python
# here we specify the temporary lib dir as a path to look for the main library
  - bjam --hash -j3 warnings-as-errors=on variant=$variant $toolset stage_module libtorrent-link=shared install-type=LIB dll-path=../../lib
  - LD_LIBRARY_PATH=../../lib DYLD_LIBRARY_PATH=../../lib python test.py
  - cd ../..

  - cd simulation
  - if [ $sim = "1" ]; then
    bjam --hash -j2 crypto=built-in $coverage_toolset;
    fi
  - cd ..
  - ccache --show-stats

