language: cpp matrix: include: - env: variant=test_release lang=cpp11 sim=0 coverage=1 docs=1 - env: variant=test_debug lang=sanitizer sim=1 coverage=0 - env: variant=test_debug lang=cpp98 sim=0 coverage=0 - env: variant=test_barebones lang=cpp11 sim=0 coverage=0 autotools=1 - env: variant=test_debug lang=cpp11 sim=0 coverage=0 docs=1 target=osx-tests ios=1 os: osx osx_image: xcode8.3 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++-5 before_install: - git submodule update --init --recursive - if [ $TRAVIS_OS_NAME == "osx" ]; then brew update > /dev/null && brew install ccache boost-build; fi - 'if [[ $TRAVIS_OS_NAME == "osx" ]]; then travis_retry brew install boost-python python2; fi' # we have to use python from brew rather than the system provided python # because of OSX System Integrity Protection, which prevents injecting # user-libraries (i.e. python modules) into system binaries (i.e. /usr/bin/python) - 'if [[ $TRAVIS_OS_NAME == "osx" && $docs = "1" ]]; then pip install docutils; pip install Pygments; brew install graphviz hunspell; fi' # disable simulations on OSX for now. It hangs on travis - if [ $TRAVIS_OS_NAME == "osx" ]; then export toolset="darwin-${lang}"; 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 - 'if [[ $lang == "sanitizer" ]]; then export test_args=testing.arg="--no-stderr-redirect"; fi' - 'echo "toolset: " ${toolset}' - 'echo "target: " ${target}' - 'echo "coverage_toolset: " ${coverage_toolset}' - 'echo "test_args: " ${test_args}' - 'echo "variant: " ${variant}' # disable leak checking for now. it reports some suspicious reports against some # tests - export ASAN_OPTIONS=detect_leaks=0; install: - 'if [[ $toolset == "gcc" ]]; then g++-5 --version; fi' - 'echo "using gcc : cpp11 : ccache g++-5 : -std=c11 -std=c++11 ;" > ~/user-config.jam' - 'echo "using gcc : sanitizer : ccache g++-5 : -std=c11 -std=c++11 -fsanitize=address,undefined -fno-sanitize-recover=undefined -fuse-ld=gold -fsanitize=address,undefined -fno-sanitize-recover=undefined ;" >> ~/user-config.jam' - 'echo "using gcc : coverage : ccache g++-5 : -std=c11 -std=c++11 --coverage --coverage ;" >> ~/user-config.jam' - 'echo "using gcc : cpp98 : ccache g++-5 : -std=c99 -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++ : -std=c11 -std=c++11 -Wno-deprecated-declarations ;" >> ~/user-config.jam' - 'echo "using darwin : cpp98 : ccache clang++ : off -std=c99 -std=c++98 -Wno-deprecated-declarations ;" >> ~/user-config.jam' - 'echo "using darwin : ios_sim : ccache clang++ : -std=c11 -std=c++11 -Wno-deprecated-declarations \"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk\" -mios-simulator-version-min=7 -fobjc-abi-version=2 \"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk\" -mios-simulator-version-min=7 -fobjc-abi-version=2 ;" >>~/user-config.jam' - 'echo "using darwin : ios : ccache clang++ : -std=c11 -std=c++11 -Wno-deprecated-declarations \"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk\" -mios-version-min=7 \"-arch armv7\" -fobjc-abi-version=2 \"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk\" -mios-version-min=7 \"-arch armv7\" -fobjc-abi-version=2 ;" >>~/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 - cat ~/user-config.jam - which python2 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 spell-check RST2HTML=rst2html.py AAFIGURE=echo; fi - cd .. - cd test # if we're building with code coverage, report it as soon as possible - if [[ $tests != "0" ]]; then bjam --hash -j3 warnings-as-errors=on invariant-checks=full variant=$variant -l900 $coverage_toolset $target $test_args && if [[ $TRAVIS_OS_NAME == "linux" && $coverage == "1" ]]; then codecov --root .. --gcov-exec gcov-4.8; fi; fi - cd ../examples - bjam --hash -j3 warnings-as-errors=on debug-iterators=on picker-debugging=on invariant-checks=full variant=$variant $coverage_toolset link=shared && if [[ $lang == "cpp11" ]]; then bjam --hash -j3 warnings-as-errors=on debug-iterators=on picker-debugging=on invariant-checks=full variant=$variant $coverage_toolset link=shared bt-get bt-get2; fi - cd .. # run through autotools and ./configure to make sure it works - if [[ "$autotools" == "1" ]]; then ./autotool.sh && export CXX=g++-5 && export CC=gcc-5 && export CXXFLAGS="-Werror -Wno-deprecated-declarations" && ./configure --enable-debug --enable-encryption --enable-examples --enable-tests --enable-python-binding && make -j2; fi - if [[ $ios == "1" ]]; then bjam darwin-ios darwin-ios_sim -j2 -q link=static; fi # 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 debug-iterators=on picker-debugging=on invariant-checks=full variant=$variant $coverage_toolset install location=./lib; # here we specify the temporary lib dir as a path to look for the main library # a binary built with sanitizer does not interact well with python - cd bindings/python - if [[ $lang != "sanitizer" ]]; then bjam --hash -j3 warnings-as-errors=on debug-iterators=on picker-debugging=on invariant-checks=full variant=$variant $coverage_toolset stage_module stage_dependencies libtorrent-link=shared install-type=LIB dll-path=../../lib && if [[ $TRAVIS_OS_NAME == "osx" ]]; then DYLD_LIBRARY_PATH=./dependencies python2 test.py; else LD_LIBRARY_PATH=./dependencies python test.py; fi; fi - cd ../.. - cd simulation - if [ $sim = "1" ]; then bjam --hash -j2 crypto=built-in warnings-as-errors=on $coverage_toolset $test_args; fi - cd .. - ccache --show-stats