.travis.yml revision 12391
111986Sandreas.sandberg@arm.comlanguage: cpp 212391Sjason@lowepower.comdist: trusty 311986Sandreas.sandberg@arm.comsudo: false 411986Sandreas.sandberg@arm.commatrix: 511986Sandreas.sandberg@arm.com include: 612391Sjason@lowepower.com # This config does a few things: 712391Sjason@lowepower.com # - Checks C++ and Python code styles (check-style.sh and flake8). 812391Sjason@lowepower.com # - Makes sure sphinx can build the docs without any errors or warnings. 912391Sjason@lowepower.com # - Tests setup.py sdist and install (all header files should be present). 1012391Sjason@lowepower.com # - Makes sure that everything still works without optional deps (numpy/scipy/eigen) and 1112391Sjason@lowepower.com # also tests the automatic discovery functions in CMake (Python version, C++ standard). 1212391Sjason@lowepower.com - os: linux 1312391Sjason@lowepower.com env: STYLE DOCS PIP 1412391Sjason@lowepower.com cache: false 1512391Sjason@lowepower.com before_install: 1612391Sjason@lowepower.com - pyenv global $(pyenv whence 2to3) # activate all python versions 1712391Sjason@lowepower.com - PY_CMD=python3 1812391Sjason@lowepower.com - $PY_CMD -m pip install --user --upgrade pip wheel 1912391Sjason@lowepower.com install: 2012391Sjason@lowepower.com - $PY_CMD -m pip install --user --upgrade sphinx sphinx_rtd_theme breathe flake8 pep8-naming pytest 2112391Sjason@lowepower.com - curl -fsSL ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.12.linux.bin.tar.gz | tar xz 2212391Sjason@lowepower.com - export PATH="$PWD/doxygen-1.8.12/bin:$PATH" 2312391Sjason@lowepower.com script: 2412391Sjason@lowepower.com - tools/check-style.sh 2512391Sjason@lowepower.com - flake8 2612391Sjason@lowepower.com - $PY_CMD -m sphinx -W -b html docs docs/.build 2712391Sjason@lowepower.com - | 2812391Sjason@lowepower.com # Make sure setup.py distributes and installs all the headers 2912391Sjason@lowepower.com $PY_CMD setup.py sdist 3012391Sjason@lowepower.com $PY_CMD -m pip install --user -U ./dist/* 3112391Sjason@lowepower.com installed=$($PY_CMD -c "import pybind11; print(pybind11.get_include(True) + '/pybind11')") 3212391Sjason@lowepower.com diff -rq $installed ./include/pybind11 3312391Sjason@lowepower.com - | 3412391Sjason@lowepower.com # Barebones build 3512391Sjason@lowepower.com cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON 3612391Sjason@lowepower.com make pytest -j 2 3712391Sjason@lowepower.com make cpptest -j 2 3812391Sjason@lowepower.com # The following are regular test configurations, including optional dependencies. 3912391Sjason@lowepower.com # With regard to each other they differ in Python version, C++ standard and compiler. 4011986Sandreas.sandberg@arm.com - os: linux 4111986Sandreas.sandberg@arm.com env: PYTHON=2.7 CPP=11 GCC=4.8 4211986Sandreas.sandberg@arm.com addons: 4311986Sandreas.sandberg@arm.com apt: 4412391Sjason@lowepower.com packages: [cmake=2.\*, cmake-data=2.\*] 4511986Sandreas.sandberg@arm.com - os: linux 4612391Sjason@lowepower.com env: PYTHON=3.6 CPP=11 GCC=4.8 4711986Sandreas.sandberg@arm.com addons: 4811986Sandreas.sandberg@arm.com apt: 4912391Sjason@lowepower.com sources: [deadsnakes] 5012391Sjason@lowepower.com packages: [python3.6-dev python3.6-venv, cmake=2.\*, cmake-data=2.\*] 5111986Sandreas.sandberg@arm.com - sudo: true 5211986Sandreas.sandberg@arm.com services: docker 5312391Sjason@lowepower.com env: PYTHON=2.7 CPP=14 GCC=6 CMAKE=1 5411986Sandreas.sandberg@arm.com - sudo: true 5511986Sandreas.sandberg@arm.com services: docker 5611986Sandreas.sandberg@arm.com env: PYTHON=3.5 CPP=14 GCC=6 DEBUG=1 5712037Sandreas.sandberg@arm.com - sudo: true 5812037Sandreas.sandberg@arm.com services: docker 5912391Sjason@lowepower.com env: PYTHON=3.6 CPP=17 GCC=7 6012391Sjason@lowepower.com - os: linux 6112391Sjason@lowepower.com env: PYTHON=3.6 CPP=17 CLANG=5.0 6212391Sjason@lowepower.com addons: 6312391Sjason@lowepower.com apt: 6412391Sjason@lowepower.com sources: [deadsnakes, llvm-toolchain-trusty-5.0, ubuntu-toolchain-r-test] 6512391Sjason@lowepower.com packages: [python3.6-dev python3.6-venv clang-5.0 llvm-5.0-dev, lld-5.0] 6612391Sjason@lowepower.com - os: osx 6712391Sjason@lowepower.com osx_image: xcode7.3 6812391Sjason@lowepower.com env: PYTHON=2.7 CPP=14 CLANG CMAKE=1 6912391Sjason@lowepower.com - os: osx 7012391Sjason@lowepower.com osx_image: xcode8.3 7112391Sjason@lowepower.com env: PYTHON=3.6 CPP=14 CLANG DEBUG=1 7212391Sjason@lowepower.com # Test a PyPy 2.7 build 7312391Sjason@lowepower.com - os: linux 7412391Sjason@lowepower.com env: PYPY=5.8 PYTHON=2.7 CPP=11 GCC=4.8 7512391Sjason@lowepower.com addons: 7612391Sjason@lowepower.com apt: 7712391Sjason@lowepower.com packages: [libblas-dev, liblapack-dev, gfortran] 7812391Sjason@lowepower.com # Build in 32-bit mode and tests against the CMake-installed version 7912037Sandreas.sandberg@arm.com - sudo: true 8012037Sandreas.sandberg@arm.com services: docker 8112391Sjason@lowepower.com env: ARCH=i386 PYTHON=3.5 CPP=14 GCC=6 INSTALL=1 8212037Sandreas.sandberg@arm.com script: 8312037Sandreas.sandberg@arm.com - | 8412037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c "set -e 8512037Sandreas.sandberg@arm.com cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 8612037Sandreas.sandberg@arm.com make install 8712037Sandreas.sandberg@arm.com cp -a tests /pybind11-tests 8812037Sandreas.sandberg@arm.com mkdir /build-tests && cd /build-tests 8912037Sandreas.sandberg@arm.com cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON 9012037Sandreas.sandberg@arm.com make pytest -j 2" 9111986Sandreas.sandberg@arm.comcache: 9211986Sandreas.sandberg@arm.com directories: 9312391Sjason@lowepower.com - $HOME/.local/bin 9412391Sjason@lowepower.com - $HOME/.local/lib 9512391Sjason@lowepower.com - $HOME/.local/include 9612391Sjason@lowepower.com - $HOME/Library/Python 9711986Sandreas.sandberg@arm.combefore_install: 9811986Sandreas.sandberg@arm.com- | 9911986Sandreas.sandberg@arm.com # Configure build variables 10011986Sandreas.sandberg@arm.com if [ "$TRAVIS_OS_NAME" = "linux" ]; then 10112037Sandreas.sandberg@arm.com if [ -n "$CLANG" ]; then 10212391Sjason@lowepower.com export CXX=clang++-$CLANG CC=clang-$CLANG 10312391Sjason@lowepower.com COMPILER_PACKAGES="clang-$CLANG llvm-$CLANG-dev" 10412037Sandreas.sandberg@arm.com else 10512391Sjason@lowepower.com if [ -z "$GCC" ]; then GCC=4.8 10612391Sjason@lowepower.com else COMPILER_PACKAGES=g++-$GCC 10712037Sandreas.sandberg@arm.com fi 10812037Sandreas.sandberg@arm.com export CXX=g++-$GCC CC=gcc-$GCC 10912037Sandreas.sandberg@arm.com fi 11012391Sjason@lowepower.com if [ "$GCC" = "6" ]; then DOCKER=${ARCH:+$ARCH/}debian:stretch 11112391Sjason@lowepower.com elif [ "$GCC" = "7" ]; then DOCKER=debian:buster 11212037Sandreas.sandberg@arm.com fi 11311986Sandreas.sandberg@arm.com elif [ "$TRAVIS_OS_NAME" = "osx" ]; then 11411986Sandreas.sandberg@arm.com export CXX=clang++ CC=clang; 11511986Sandreas.sandberg@arm.com fi 11612391Sjason@lowepower.com if [ -n "$CPP" ]; then CPP=-std=c++$CPP; fi 11712391Sjason@lowepower.com if [ "${PYTHON:0:1}" = "3" ]; then PY=3; fi 11812391Sjason@lowepower.com if [ -n "$DEBUG" ]; then CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=Debug"; fi 11911986Sandreas.sandberg@arm.com- | 12012037Sandreas.sandberg@arm.com # Initialize environment 12112391Sjason@lowepower.com set -e 12212391Sjason@lowepower.com if [ -n "$DOCKER" ]; then 12311986Sandreas.sandberg@arm.com docker pull $DOCKER 12412037Sandreas.sandberg@arm.com 12512391Sjason@lowepower.com containerid=$(docker run --detach --tty \ 12611986Sandreas.sandberg@arm.com --volume="$PWD":/pybind11 --workdir=/pybind11 \ 12711986Sandreas.sandberg@arm.com --env="CC=$CC" --env="CXX=$CXX" --env="DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \ 12811986Sandreas.sandberg@arm.com --env=GCC_COLORS=\ \ 12911986Sandreas.sandberg@arm.com $DOCKER) 13012391Sjason@lowepower.com SCRIPT_RUN_PREFIX="docker exec --tty $containerid" 13112037Sandreas.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' 13211986Sandreas.sandberg@arm.com else 13312391Sjason@lowepower.com if [ "$PYPY" = "5.8" ]; then 13412391Sjason@lowepower.com curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.8.0-linux64.tar.bz2 | tar xj 13512391Sjason@lowepower.com PY_CMD=$(echo `pwd`/pypy2-v5.8.0-linux64/bin/pypy) 13612391Sjason@lowepower.com CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYTHON_EXECUTABLE:FILEPATH=$PY_CMD" 13712391Sjason@lowepower.com else 13812391Sjason@lowepower.com PY_CMD=python$PYTHON 13912391Sjason@lowepower.com if [ "$TRAVIS_OS_NAME" = "osx" ]; then 14012391Sjason@lowepower.com if [ "$PY" = "3" ]; then 14112391Sjason@lowepower.com brew install python$PY; 14212391Sjason@lowepower.com else 14312391Sjason@lowepower.com curl -fsSL https://bootstrap.pypa.io/get-pip.py | $PY_CMD - --user 14412391Sjason@lowepower.com fi 14511986Sandreas.sandberg@arm.com fi 14611986Sandreas.sandberg@arm.com fi 14712391Sjason@lowepower.com if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then 14812391Sjason@lowepower.com $PY_CMD -m ensurepip --user 14912391Sjason@lowepower.com fi 15012391Sjason@lowepower.com $PY_CMD -m pip install --user --upgrade pip wheel 15111986Sandreas.sandberg@arm.com fi 15212391Sjason@lowepower.com set +e 15311986Sandreas.sandberg@arm.cominstall: 15411986Sandreas.sandberg@arm.com- | 15511986Sandreas.sandberg@arm.com # Install dependencies 15612391Sjason@lowepower.com set -e 15711986Sandreas.sandberg@arm.com if [ -n "$DOCKER" ]; then 15812037Sandreas.sandberg@arm.com if [ -n "$DEBUG" ]; then 15912391Sjason@lowepower.com PY_DEBUG="python$PYTHON-dbg python$PY-scipy-dbg" 16012391Sjason@lowepower.com CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYTHON_EXECUTABLE=/usr/bin/python${PYTHON}dm" 16112037Sandreas.sandberg@arm.com fi 16212037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c "for s in 0 15; do sleep \$s; \ 16312391Sjason@lowepower.com apt-get -qy --no-install-recommends install \ 16412391Sjason@lowepower.com $PY_DEBUG python$PYTHON-dev python$PY-pytest python$PY-scipy \ 16512391Sjason@lowepower.com libeigen3-dev libboost-dev cmake make ${COMPILER_PACKAGES} && break; done" 16612391Sjason@lowepower.com else 16712037Sandreas.sandberg@arm.com 16812391Sjason@lowepower.com if [ "$CLANG" = "5.0" ]; then 16912391Sjason@lowepower.com if ! [ -d ~/.local/include/c++/v1 ]; then 17012391Sjason@lowepower.com # Neither debian nor llvm provide a libc++ 5.0 deb; luckily it's fairly quick 17112391Sjason@lowepower.com # to build, install (and cache), so do it ourselves: 17212391Sjason@lowepower.com git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source 17312391Sjason@lowepower.com git clone https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx -b release_50 17412391Sjason@lowepower.com git clone https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi -b release_50 17512391Sjason@lowepower.com mkdir llvm-build && cd llvm-build 17612391Sjason@lowepower.com # Building llvm requires a newer cmake than is provided by the trusty container: 17712391Sjason@lowepower.com CMAKE_VER=cmake-3.8.0-Linux-x86_64 17812391Sjason@lowepower.com curl https://cmake.org/files/v3.8/$CMAKE_VER.tar.gz | tar xz 17912391Sjason@lowepower.com ./$CMAKE_VER/bin/cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/.local ../llvm-source 18012391Sjason@lowepower.com make -j2 install-cxxabi install-cxx 18112391Sjason@lowepower.com cp -a include/c++/v1/*cxxabi*.h ~/.local/include/c++/v1 18212391Sjason@lowepower.com cd .. 18312391Sjason@lowepower.com fi 18412391Sjason@lowepower.com export CXXFLAGS="-isystem $HOME/.local/include/c++/v1 -stdlib=libc++" 18512391Sjason@lowepower.com export LDFLAGS="-L$HOME/.local/lib -fuse-ld=lld-$CLANG" 18612391Sjason@lowepower.com export LD_LIBRARY_PATH="$HOME/.local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" 18712391Sjason@lowepower.com if [ "$CPP" = "-std=c++17" ]; then CPP="-std=c++1z"; fi 18812391Sjason@lowepower.com fi 18912037Sandreas.sandberg@arm.com 19012391Sjason@lowepower.com export NPY_NUM_BUILD_JOBS=2 19112391Sjason@lowepower.com echo "Installing pytest, numpy, scipy..." 19212391Sjason@lowepower.com ${PYPY:+travis_wait 30} $PY_CMD -m pip install --user --upgrade pytest numpy scipy \ 19312391Sjason@lowepower.com ${PYPY:+--extra-index-url https://imaginary.ca/trusty-pypi} 19412391Sjason@lowepower.com echo "done." 19511986Sandreas.sandberg@arm.com 19612391Sjason@lowepower.com wget -q -O eigen.tar.gz https://bitbucket.org/eigen/eigen/get/3.3.3.tar.gz 19711986Sandreas.sandberg@arm.com tar xzf eigen.tar.gz 19812391Sjason@lowepower.com export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH:+:}$PWD/eigen-eigen-67e894c6cd8f" 19911986Sandreas.sandberg@arm.com fi 20012391Sjason@lowepower.com set +e 20111986Sandreas.sandberg@arm.comscript: 20211986Sandreas.sandberg@arm.com- $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS} 20311986Sandreas.sandberg@arm.com -DPYBIND11_PYTHON_VERSION=$PYTHON 20411986Sandreas.sandberg@arm.com -DPYBIND11_CPP_STANDARD=$CPP 20512037Sandreas.sandberg@arm.com -DPYBIND11_WERROR=${WERROR:-ON} 20612391Sjason@lowepower.com -DDOWNLOAD_CATCH=ON 20711986Sandreas.sandberg@arm.com- $SCRIPT_RUN_PREFIX make pytest -j 2 20812391Sjason@lowepower.com- $SCRIPT_RUN_PREFIX make cpptest -j 2 20912391Sjason@lowepower.com- if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi 21012391Sjason@lowepower.comafter_failure: cat tests/test_cmake_build/*.log* 21111986Sandreas.sandberg@arm.comafter_script: 21211986Sandreas.sandberg@arm.com- if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi 213