.travis.yml revision 12037
111986Sandreas.sandberg@arm.comlanguage: cpp 211986Sandreas.sandberg@arm.comsudo: false 311986Sandreas.sandberg@arm.commatrix: 411986Sandreas.sandberg@arm.com include: 511986Sandreas.sandberg@arm.com - os: linux 611986Sandreas.sandberg@arm.com env: PYTHON=2.7 CPP=11 GCC=4.8 711986Sandreas.sandberg@arm.com addons: 811986Sandreas.sandberg@arm.com apt: 911986Sandreas.sandberg@arm.com sources: [ubuntu-toolchain-r-test, kubuntu-backports] 1011986Sandreas.sandberg@arm.com packages: [g++-4.8, cmake] 1111986Sandreas.sandberg@arm.com - os: linux 1211986Sandreas.sandberg@arm.com env: PYTHON=3.5 CPP=11 GCC=4.8 1311986Sandreas.sandberg@arm.com addons: 1411986Sandreas.sandberg@arm.com apt: 1511986Sandreas.sandberg@arm.com sources: [ubuntu-toolchain-r-test, kubuntu-backports, deadsnakes] 1611986Sandreas.sandberg@arm.com packages: [g++-4.8, cmake, python3.5-dev] 1711986Sandreas.sandberg@arm.com - sudo: true 1811986Sandreas.sandberg@arm.com services: docker 1911986Sandreas.sandberg@arm.com env: PYTHON=2.7 CPP=14 GCC=6 2011986Sandreas.sandberg@arm.com - sudo: true 2111986Sandreas.sandberg@arm.com services: docker 2211986Sandreas.sandberg@arm.com env: PYTHON=3.5 CPP=14 GCC=6 DEBUG=1 2312037Sandreas.sandberg@arm.com - sudo: true 2412037Sandreas.sandberg@arm.com services: docker 2512037Sandreas.sandberg@arm.com env: PYTHON=3.5 CPP=17 GCC=7 2612037Sandreas.sandberg@arm.com - sudo: true 2712037Sandreas.sandberg@arm.com services: docker 2812037Sandreas.sandberg@arm.com env: PYTHON=3.5 CPP=17 CLANG=4.0 2911986Sandreas.sandberg@arm.com - os: osx 3011986Sandreas.sandberg@arm.com osx_image: xcode7.3 3111986Sandreas.sandberg@arm.com env: PYTHON=2.7 CPP=14 CLANG 3211986Sandreas.sandberg@arm.com - os: osx 3311986Sandreas.sandberg@arm.com osx_image: xcode7.3 3412037Sandreas.sandberg@arm.com env: PYTHON=3.6 CPP=14 CLANG 3512037Sandreas.sandberg@arm.com # Test a PyPy 2.7 build 3612037Sandreas.sandberg@arm.com - os: linux 3712037Sandreas.sandberg@arm.com dist: trusty 3812037Sandreas.sandberg@arm.com env: PYPY=5.7 PYTHON=2.7 CPP=11 GCC=4.8 3912037Sandreas.sandberg@arm.com addons: 4012037Sandreas.sandberg@arm.com apt: 4112037Sandreas.sandberg@arm.com packages: [g++-4.8, cmake] 4212037Sandreas.sandberg@arm.com - sudo: true 4312037Sandreas.sandberg@arm.com services: docker 4412037Sandreas.sandberg@arm.com env: ARCH=i386 PYTHON=3.5 CPP=14 GCC=6 4512037Sandreas.sandberg@arm.com # This next one does a make install *before* testing, then builds the tests against the installed version: 4612037Sandreas.sandberg@arm.com - sudo: true 4712037Sandreas.sandberg@arm.com services: docker 4812037Sandreas.sandberg@arm.com env: PYTHON=3.5 CPP=14 CLANG=3.9 INSTALL=1 4912037Sandreas.sandberg@arm.com script: 5012037Sandreas.sandberg@arm.com - | 5112037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c "set -e 5212037Sandreas.sandberg@arm.com cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 5312037Sandreas.sandberg@arm.com make install 5412037Sandreas.sandberg@arm.com cp -a tests /pybind11-tests 5512037Sandreas.sandberg@arm.com mkdir /build-tests && cd /build-tests 5612037Sandreas.sandberg@arm.com cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON 5712037Sandreas.sandberg@arm.com make pytest -j 2" 5811986Sandreas.sandberg@arm.com # A barebones build makes sure everything still works without optional deps (numpy/scipy/eigen) 5911986Sandreas.sandberg@arm.com # and also tests the automatic discovery functions in CMake (Python version, C++ standard). 6011986Sandreas.sandberg@arm.com - os: linux 6111986Sandreas.sandberg@arm.com env: BAREBONES 6211986Sandreas.sandberg@arm.com addons: 6311986Sandreas.sandberg@arm.com apt: 6411986Sandreas.sandberg@arm.com sources: [ubuntu-toolchain-r-test, kubuntu-backports] 6511986Sandreas.sandberg@arm.com packages: [g++-4.8, cmake] 6611986Sandreas.sandberg@arm.com install: pip install pytest 6711986Sandreas.sandberg@arm.com # Documentation build: 6811986Sandreas.sandberg@arm.com - os: linux 6911986Sandreas.sandberg@arm.com language: docs 7011986Sandreas.sandberg@arm.com env: DOCS STYLE LINT 7111986Sandreas.sandberg@arm.com install: 7211986Sandreas.sandberg@arm.com - pip install --upgrade sphinx sphinx_rtd_theme flake8 pep8-naming 7312037Sandreas.sandberg@arm.com - | 7412037Sandreas.sandberg@arm.com curl -fsSL ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.12.linux.bin.tar.gz | tar xz 7512037Sandreas.sandberg@arm.com export PATH="$PWD/doxygen-1.8.12/bin:$PATH" 7612037Sandreas.sandberg@arm.com pip install https://github.com/michaeljones/breathe/archive/master.zip 7711986Sandreas.sandberg@arm.com script: 7811986Sandreas.sandberg@arm.com - make -C docs html SPHINX_OPTIONS=-W 7911986Sandreas.sandberg@arm.com - tools/check-style.sh 8011986Sandreas.sandberg@arm.com - flake8 8112037Sandreas.sandberg@arm.com allow_failures: 8212037Sandreas.sandberg@arm.com - env: PYTHON=3.5 CPP=17 GCC=7 8312037Sandreas.sandberg@arm.com - env: PYTHON=3.5 CPP=17 CLANG=4.0 8411986Sandreas.sandberg@arm.comcache: 8511986Sandreas.sandberg@arm.com directories: 8611986Sandreas.sandberg@arm.com - $HOME/.cache/pip 8711986Sandreas.sandberg@arm.com - $HOME/Library/Caches/pip 8811986Sandreas.sandberg@arm.combefore_install: 8911986Sandreas.sandberg@arm.com- | 9011986Sandreas.sandberg@arm.com # Configure build variables 9111986Sandreas.sandberg@arm.com if [ "$TRAVIS_OS_NAME" = "linux" ]; then 9212037Sandreas.sandberg@arm.com if [ -n "$CLANG" ]; then 9312037Sandreas.sandberg@arm.com export CXX=clang++-$CLANG CC=clang-$CLANG COMPILER_PACKAGES="clang-$CLANG llvm-$CLANG-dev" 9412037Sandreas.sandberg@arm.com if [ "$CLANG" = "4.0" ]; then export CXXFLAGS="-stdlib=libc++"; fi 9512037Sandreas.sandberg@arm.com else 9612037Sandreas.sandberg@arm.com if [ -z "$GCC" ]; then export GCC=4.8 9712037Sandreas.sandberg@arm.com else export COMPILER_PACKAGES=g++-$GCC 9812037Sandreas.sandberg@arm.com fi 9912037Sandreas.sandberg@arm.com export CXX=g++-$GCC CC=gcc-$GCC 10012037Sandreas.sandberg@arm.com fi 10112037Sandreas.sandberg@arm.com if [ "$CLANG" = "4.0" ]; then export DOCKER=debian:sid 10212037Sandreas.sandberg@arm.com elif [ "$GCC" = "6" ] || [ -n "$CLANG" ]; then export DOCKER=${ARCH:+$ARCH/}debian:testing 10312037Sandreas.sandberg@arm.com elif [ "$GCC" = "7" ]; then export DOCKER=debian:experimental APT_GET_EXTRA="-t experimental" 10412037Sandreas.sandberg@arm.com fi 10511986Sandreas.sandberg@arm.com elif [ "$TRAVIS_OS_NAME" = "osx" ]; then 10611986Sandreas.sandberg@arm.com export CXX=clang++ CC=clang; 10711986Sandreas.sandberg@arm.com fi 10811986Sandreas.sandberg@arm.com if [ -n "$CPP" ]; then export CPP=-std=c++$CPP; fi 10911986Sandreas.sandberg@arm.com if [ "${PYTHON:0:1}" = "3" ]; then export PY=3; fi 11012037Sandreas.sandberg@arm.com if [ "$PYPY" = "5.7" ]; then 11112037Sandreas.sandberg@arm.com curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.7.0-linux64.tar.bz2 | tar -xj 11212037Sandreas.sandberg@arm.com export PYPY_BINARY=$(echo `pwd`/pypy2-v5.7.0-linux64/bin/pypy) 11312037Sandreas.sandberg@arm.com export CMAKE_EXTRA_ARGS="-DPYTHON_EXECUTABLE:FILEPATH=$PYPY_BINARY" 11412037Sandreas.sandberg@arm.com fi 11511986Sandreas.sandberg@arm.com if [ -n "$DEBUG" ]; then export CMAKE_EXTRA_ARGS="-DCMAKE_BUILD_TYPE=Debug"; fi 11611986Sandreas.sandberg@arm.com- | 11712037Sandreas.sandberg@arm.com # Initialize environment 11812037Sandreas.sandberg@arm.com if [ -n "$PYPY" ]; then 11912037Sandreas.sandberg@arm.com $PYPY_BINARY -m ensurepip 12012037Sandreas.sandberg@arm.com $PYPY_BINARY -m pip install pytest 12112037Sandreas.sandberg@arm.com elif [ -n "$DOCKER" ]; then 12211986Sandreas.sandberg@arm.com docker pull $DOCKER 12312037Sandreas.sandberg@arm.com # Disable LTO with gcc until gcc 79296 is fixed: 12412037Sandreas.sandberg@arm.com if [ -n "$GCC" ]; then export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYBIND11_LTO_CXX_FLAGS="; fi 12512037Sandreas.sandberg@arm.com 12611986Sandreas.sandberg@arm.com export containerid=$(docker run --detach --tty \ 12711986Sandreas.sandberg@arm.com --volume="$PWD":/pybind11 --workdir=/pybind11 \ 12812037Sandreas.sandberg@arm.com --env="CXXFLAGS=$CXXFLAGS" \ 12911986Sandreas.sandberg@arm.com --env="CC=$CC" --env="CXX=$CXX" --env="DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \ 13011986Sandreas.sandberg@arm.com --env=GCC_COLORS=\ \ 13111986Sandreas.sandberg@arm.com $DOCKER) 13211986Sandreas.sandberg@arm.com export SCRIPT_RUN_PREFIX="docker exec --tty $containerid" 13312037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c 'for s in 0 15; do sleep $s; apt-get update && apt-get -qy dist-upgrade && break; done' 13412037Sandreas.sandberg@arm.com # gcc-7 currently generates warnings; some are upstream bugs, so just turn off -Werror for now 13512037Sandreas.sandberg@arm.com if [ "$GCC" = "7" ]; then WERROR=off; fi 13611986Sandreas.sandberg@arm.com else 13711986Sandreas.sandberg@arm.com if [ "$TRAVIS_OS_NAME" = "linux" ]; then 13811986Sandreas.sandberg@arm.com pip install --user --upgrade pip virtualenv 13911986Sandreas.sandberg@arm.com virtualenv -p python$PYTHON venv 14011986Sandreas.sandberg@arm.com elif [ "$TRAVIS_OS_NAME" = "osx" ]; then 14111986Sandreas.sandberg@arm.com if [ "$PY" = "3" ]; then 14211986Sandreas.sandberg@arm.com brew update; brew install python$PY; 14311986Sandreas.sandberg@arm.com else 14411986Sandreas.sandberg@arm.com curl -fsSL -O https://bootstrap.pypa.io/get-pip.py 14511986Sandreas.sandberg@arm.com sudo -H python get-pip.py 14611986Sandreas.sandberg@arm.com fi 14711986Sandreas.sandberg@arm.com pip$PY install --user --upgrade pip virtualenv 14811986Sandreas.sandberg@arm.com python$PY -m virtualenv venv 14911986Sandreas.sandberg@arm.com fi 15011986Sandreas.sandberg@arm.com source venv/bin/activate 15111986Sandreas.sandberg@arm.com fi 15211986Sandreas.sandberg@arm.cominstall: 15311986Sandreas.sandberg@arm.com- | 15411986Sandreas.sandberg@arm.com # Install dependencies 15511986Sandreas.sandberg@arm.com if [ -n "$DOCKER" ]; then 15612037Sandreas.sandberg@arm.com if [ -n "$DEBUG" ]; then 15712037Sandreas.sandberg@arm.com PY_DEBUG="python$PY-dbg python$PY-scipy-dbg" 15812037Sandreas.sandberg@arm.com export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYTHON_EXECUTABLE=/usr/bin/python${PYTHON}dm" 15912037Sandreas.sandberg@arm.com fi 16012037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c "for s in 0 15; do sleep \$s; \ 16112037Sandreas.sandberg@arm.com apt-get -qy --no-install-recommends $APT_GET_EXTRA install \ 16212037Sandreas.sandberg@arm.com $PY_DEBUG python$PY-dev python$PY-pytest python$PY-scipy \ 16312037Sandreas.sandberg@arm.com libeigen3-dev cmake make ${COMPILER_PACKAGES} && break; done" 16412037Sandreas.sandberg@arm.com 16512037Sandreas.sandberg@arm.com if [ "$CLANG" = "4.0" ]; then 16612037Sandreas.sandberg@arm.com # Neither debian nor llvm provide a libc++ deb; luckily it's fairly quick 16712037Sandreas.sandberg@arm.com # to build and install, so do it ourselves: 16812037Sandreas.sandberg@arm.com git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source 16912037Sandreas.sandberg@arm.com git clone https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx -b release_40 17012037Sandreas.sandberg@arm.com git clone https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi -b release_40 17112037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c "mkdir llvm-build && cd llvm-build && \ 17212037Sandreas.sandberg@arm.com CXXFLAGS= cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../llvm-source && \ 17312037Sandreas.sandberg@arm.com make -j2 install-cxxabi install-cxx && \ 17412037Sandreas.sandberg@arm.com cp -a include/c++/v1/*cxxabi*.h /usr/include/c++/v1" 17512037Sandreas.sandberg@arm.com 17612037Sandreas.sandberg@arm.com if [ "$CPP" = "-std=c++17" ]; then export CPP="-std=c++1z"; fi 17712037Sandreas.sandberg@arm.com fi 17812037Sandreas.sandberg@arm.com elif [ -z "$PYPY" ]; then 17911986Sandreas.sandberg@arm.com pip install numpy scipy pytest 18011986Sandreas.sandberg@arm.com 18111986Sandreas.sandberg@arm.com wget -q -O eigen.tar.gz https://bitbucket.org/eigen/eigen/get/3.3.0.tar.gz 18211986Sandreas.sandberg@arm.com tar xzf eigen.tar.gz 18311986Sandreas.sandberg@arm.com export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_INCLUDE_PATH=$PWD/eigen-eigen-26667be4f70b" 18411986Sandreas.sandberg@arm.com fi 18511986Sandreas.sandberg@arm.comscript: 18611986Sandreas.sandberg@arm.com- $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS} 18711986Sandreas.sandberg@arm.com -DPYBIND11_PYTHON_VERSION=$PYTHON 18811986Sandreas.sandberg@arm.com -DPYBIND11_CPP_STANDARD=$CPP 18912037Sandreas.sandberg@arm.com -DPYBIND11_WERROR=${WERROR:-ON} 19011986Sandreas.sandberg@arm.com- $SCRIPT_RUN_PREFIX make pytest -j 2 19112037Sandreas.sandberg@arm.com- $SCRIPT_RUN_PREFIX make test_cmake_build 19212037Sandreas.sandberg@arm.comafter_failure: cat tests/test_cmake_build/*.log 19311986Sandreas.sandberg@arm.comafter_script: 19411986Sandreas.sandberg@arm.com- if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi 195