language: cpp matrix: include: - env: variant=test_release coverage=1 toolset=gcc-coverage - env: variant=test_debug sim=1 ssl=openssl crypto=libcrypto toolset=gcc - env: variant=test_barebones toolset=gcc - env: analyze=1 autotools=1 toolset=gcc - os: osx osx_image: xcode6.4 env: variant=test_release docs=1 toolset=darwin - os: osx osx_image: xcode6.4 env: variant=test_debug ssl=openssl crypto=libcrypto toolset=darwin - os: osx osx_image: xcode6.4 env: variant=test_barebones toolset=darwin - dist: trusty env: arch=arm toolset=gcc-arm git: submodules: false depth: 1 branches: only: - master - RC_1_1 - RC_1_0 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 - cppcheck before_install: - git submodule update --init --recursive - 'if [[ $ssl == "" ]]; then export ssl=off; fi' - 'if [[ $crypto == "" ]]; then export crypto=built-in; fi' - 'if [[ $TRAVIS_OS_NAME == "osx" && "$variant" != "" ]]; then brew update > /dev/null && brew install --quiet ccache boost-build boost-python; fi' - 'if [ "$docs" = "1" ]; then brew install --quiet docutils; 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; brew install --quiet graphviz; brew install --quiet Homebrew/python/pillow; fi' - if [ "$coverage" == "1" ]; then pip install --user codecov; fi - 'echo "using toolset: " ${toolset}' install: - touch ~/user-config.jam - 'if [[ $toolset == "gcc" ]]; then g++-5 --version; echo "using gcc : : ccache g++-5 : -std=c++11 ;" >> ~/user-config.jam; fi' - 'if [[ $toolset == "gcc-coverage" ]]; then echo "using gcc : coverage : ccache g++-5 --coverage : -std=c++11 --coverage ;" >> ~/user-config.jam; fi' - 'if [[ $toolset == "gcc-arm" ]]; then echo "using gcc : arm : ccache armv8l-linux-gnueabihf-g++ : \"-std=c++11 -fsigned-char -march=armv8-a+crc -mfpu=crypto-neon-fp-armv8 -DTORRENT_FORCE_ARM_CRC32\" -lm ;" >> ~/user-config.jam; fi;' - 'echo "using darwin : : ccache clang++ : -std=c11 -std=c++11 -Wno-deprecated-declarations ;" >> ~/user-config.jam' - 'echo "using python : 2.7 ;" >> ~/user-config.jam' - if [ "$docs" == "1" ]; then rst2html.py --version; fi # 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 - 'if [[ "$variant" != "" ]]; then ccache -V && ccache --show-stats && ccache --zero-stats; fi' - 'if [ $arch == "arm" ]; then cd test; wget https://releases.linaro.org/components/toolchain/binaries/latest-5/armv8l-linux-gnueabihf/gcc-linaro-5.3-2016.02-x86_64_armv8l-linux-gnueabihf.tar.xz; tar xf gcc-linaro-5.3-2016.02-x86_64_armv8l-linux-gnueabihf.tar.xz; export PATH=${PWD}/gcc-linaro-5.3-2016.02-x86_64_armv8l-linux-gnueabihf/bin:${PATH}; armv8l-linux-gnueabihf-g++ --version; wget -O boost.zip http://pilotfiber.dl.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.zip; unzip -qq boost.zip; export BOOST_ROOT=$PWD/boost_1_55_0; sudo apt-get install -y qemu-user-static debootstrap; sudo debootstrap --variant=minbase --arch armhf --foreign --include=build-essential testing rootfs; sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/; sudo chroot rootfs /debootstrap/debootstrap --second-stage; sudo chroot rootfs mount -t proc none /proc; cd ..; fi' script: - cd docs - 'if [ "$docs" == "1" ]; then make RST2HTML=rst2html.py; fi' - cd .. # if variant is not set, we do not want to build anything # if we are building with code coverage, report it as soon as possible # libtorrent is the name of the test suite target - cd test - 'if [ "$variant" != "" ]; then bjam -j3 warnings-as-errors=on ssl=$ssl crypto=$crypto debug-iterators=on picker-debugging=on invariant-checks=full $toolset variant=$variant libtorrent test_natpmp enum_if -l300 && if [ "$coverage" == "1" ]; then codecov --root .. --gcov-exec gcov-5; fi; fi' - cd ../examples - 'if [ "$variant" != "" ]; then bjam -j3 warnings-as-errors=on ssl=$ssl crypto=$crypto debug-iterators=on picker-debugging=on invariant-checks=full $toolset variant=$variant link=shared; fi' - cd .. - cd tools - 'if [ "$variant" != "" ]; then bjam -j3 warnings-as-errors=on ssl=$ssl crypto=$crypto debug-iterators=on picker-debugging=on invariant-checks=full $toolset variant=$variant link=shared; fi' - 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 cannot stage them to the same directory # here we specify the temporary lib dir as a path to look for the main library - 'if [ "$variant" != "" ]; then bjam -j3 warnings-as-errors=on ssl=$ssl crypto=$crypto debug-iterators=on picker-debugging=on invariant-checks=full $toolset variant=$variant link=shared install location=./lib; fi' - cd bindings/python - 'if [ "$variant" != "" ]; then bjam -j3 warnings-as-errors=on ssl=$ssl crypto=$crypto debug-iterators=on picker-debugging=on invariant-checks=full $toolset variant=$variant stage_module libtorrent-link=shared install-type=LIB dll-path=../../lib && LD_LIBRARY_PATH=../../lib DYLD_LIBRARY_PATH=../../lib python test.py; fi' - cd ../..; # simulation - cd simulation - 'if [[ "$variant" != "" && "$sim" == "1" ]]; then bjam -j2 crypto=built-in ssl=off warnings-as-errors=on debug-iterators=on picker-debugging=on invariant-checks=full $toolset; fi' - cd .. # run through autotools and ./confiture to make sure it works - 'if [[ "$autotools" == "1" ]]; then ./autotool.sh && ./configure; fi' # run cppcheck if enabled - 'if [[ "$analyze" == "1" ]]; then cppcheck --version && find src test examples tools -type f | grep ".*\.cpp$" >cppcheck.files && find simulation -maxdepth 1 -type f | grep ".*\.cpp$" >>cppcheck.files && cppcheck -DTORRENT_USE_IPV6="1" -DTORRENT_USE_I2P="1" -DTORRENT_USE_OPENSSL="1" -DTORRENT_USE_INVARIANT_CHECKS="1" -DTORRENT_EXPENSIVE_INVARIANT_CHECKS="1" -DTORRENT_USE_ASSERTS="1" -UTORRENT_DISABLE_MUTABLE_TORRENTS -UTORRENT_DISABLE_LOGGING -UTORRENT_DEBUG_BUFFERS -UTORRENT_EXPORT_EXTRA --suppress=preprocessorErrorDirective --suppress=uninitVar --suppress=arrayIndexOutOfBounds --suppress=unusedStructMember --suppress=operatorEqVarError --suppress=noConstructor --suppress=syntaxError --enable=style --template "{file}({line}): {severity} ({id}): {message}" --inline-suppr --force --std=c++11 -j2 -I include -I /usr/local/include -I test -I simulation/libsimulator/include --file-list=cppcheck.files 2> cppcheck.txt && if [ -s cppcheck.txt ]; then echo " ======= CPPCHECK ERRORS ====="; cat cppcheck.txt; exit 1; fi; fi' - 'if [[ "$variant" != "" ]]; then ccache --show-stats; fi' - cd test - 'if [ $arch == "arm" ]; then bjam arm-tests warnings-as-errors=on ssl=$ssl crypto=$crypto variant=test_arm $toolset target-os=linux link=static testing.launcher="sudo cp -R bin rootfs/; sudo chroot rootfs"; fi' - cd ..