111986Sandreas.sandberg@arm.comlanguage: cpp 211986Sandreas.sandberg@arm.commatrix: 311986Sandreas.sandberg@arm.com include: 412391Sjason@lowepower.com # This config does a few things: 512391Sjason@lowepower.com # - Checks C++ and Python code styles (check-style.sh and flake8). 612391Sjason@lowepower.com # - Makes sure sphinx can build the docs without any errors or warnings. 712391Sjason@lowepower.com # - Tests setup.py sdist and install (all header files should be present). 812391Sjason@lowepower.com # - Makes sure that everything still works without optional deps (numpy/scipy/eigen) and 912391Sjason@lowepower.com # also tests the automatic discovery functions in CMake (Python version, C++ standard). 1012391Sjason@lowepower.com - os: linux 1114299Sbbruce@ucdavis.edu dist: xenial # Necessary to run doxygen 1.8.15 1214299Sbbruce@ucdavis.edu name: Style, docs, and pip 1312391Sjason@lowepower.com cache: false 1412391Sjason@lowepower.com before_install: 1512391Sjason@lowepower.com - pyenv global $(pyenv whence 2to3) # activate all python versions 1612391Sjason@lowepower.com - PY_CMD=python3 1714299Sbbruce@ucdavis.edu - $PY_CMD -m pip install --user --upgrade pip wheel setuptools 1812391Sjason@lowepower.com install: 1912391Sjason@lowepower.com - $PY_CMD -m pip install --user --upgrade sphinx sphinx_rtd_theme breathe flake8 pep8-naming pytest 2014299Sbbruce@ucdavis.edu - curl -fsSL https://sourceforge.net/projects/doxygen/files/rel-1.8.15/doxygen-1.8.15.linux.bin.tar.gz/download | tar xz 2114299Sbbruce@ucdavis.edu - export PATH="$PWD/doxygen-1.8.15/bin:$PATH" 2212391Sjason@lowepower.com script: 2312391Sjason@lowepower.com - tools/check-style.sh 2412391Sjason@lowepower.com - flake8 2512391Sjason@lowepower.com - $PY_CMD -m sphinx -W -b html docs docs/.build 2612391Sjason@lowepower.com - | 2712391Sjason@lowepower.com # Make sure setup.py distributes and installs all the headers 2812391Sjason@lowepower.com $PY_CMD setup.py sdist 2912391Sjason@lowepower.com $PY_CMD -m pip install --user -U ./dist/* 3012391Sjason@lowepower.com installed=$($PY_CMD -c "import pybind11; print(pybind11.get_include(True) + '/pybind11')") 3112391Sjason@lowepower.com diff -rq $installed ./include/pybind11 3212391Sjason@lowepower.com - | 3312391Sjason@lowepower.com # Barebones build 3414299Sbbruce@ucdavis.edu cmake -DCMAKE_BUILD_TYPE=Debug -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(which $PY_CMD) . 3512391Sjason@lowepower.com make pytest -j 2 3612391Sjason@lowepower.com make cpptest -j 2 3712391Sjason@lowepower.com # The following are regular test configurations, including optional dependencies. 3812391Sjason@lowepower.com # With regard to each other they differ in Python version, C++ standard and compiler. 3911986Sandreas.sandberg@arm.com - os: linux 4014299Sbbruce@ucdavis.edu dist: trusty 4114299Sbbruce@ucdavis.edu name: Python 2.7, c++11, gcc 4.8 4211986Sandreas.sandberg@arm.com env: PYTHON=2.7 CPP=11 GCC=4.8 4311986Sandreas.sandberg@arm.com addons: 4411986Sandreas.sandberg@arm.com apt: 4514299Sbbruce@ucdavis.edu packages: 4614299Sbbruce@ucdavis.edu - cmake=2.\* 4714299Sbbruce@ucdavis.edu - cmake-data=2.\* 4811986Sandreas.sandberg@arm.com - os: linux 4914299Sbbruce@ucdavis.edu dist: trusty 5014299Sbbruce@ucdavis.edu name: Python 3.6, c++11, gcc 4.8 5112391Sjason@lowepower.com env: PYTHON=3.6 CPP=11 GCC=4.8 5211986Sandreas.sandberg@arm.com addons: 5311986Sandreas.sandberg@arm.com apt: 5414299Sbbruce@ucdavis.edu sources: 5514299Sbbruce@ucdavis.edu - deadsnakes 5614299Sbbruce@ucdavis.edu packages: 5714299Sbbruce@ucdavis.edu - python3.6-dev 5814299Sbbruce@ucdavis.edu - python3.6-venv 5914299Sbbruce@ucdavis.edu - cmake=2.\* 6014299Sbbruce@ucdavis.edu - cmake-data=2.\* 6114299Sbbruce@ucdavis.edu - os: linux 6214299Sbbruce@ucdavis.edu dist: trusty 6312391Sjason@lowepower.com env: PYTHON=2.7 CPP=14 GCC=6 CMAKE=1 6414299Sbbruce@ucdavis.edu name: Python 2.7, c++14, gcc 4.8, CMake test 6512391Sjason@lowepower.com addons: 6612391Sjason@lowepower.com apt: 6714299Sbbruce@ucdavis.edu sources: 6814299Sbbruce@ucdavis.edu - ubuntu-toolchain-r-test 6914299Sbbruce@ucdavis.edu packages: 7014299Sbbruce@ucdavis.edu - g++-6 7114299Sbbruce@ucdavis.edu - os: linux 7214299Sbbruce@ucdavis.edu dist: trusty 7314299Sbbruce@ucdavis.edu name: Python 3.5, c++14, gcc 6, Debug build 7414299Sbbruce@ucdavis.edu # N.B. `ensurepip` could be installed transitively by `python3.5-venv`, but 7514299Sbbruce@ucdavis.edu # seems to have apt conflicts (at least for Trusty). Use Docker instead. 7614299Sbbruce@ucdavis.edu services: docker 7714299Sbbruce@ucdavis.edu env: DOCKER=debian:stretch PYTHON=3.5 CPP=14 GCC=6 DEBUG=1 7814299Sbbruce@ucdavis.edu - os: linux 7914299Sbbruce@ucdavis.edu dist: xenial 8014299Sbbruce@ucdavis.edu env: PYTHON=3.6 CPP=17 GCC=7 8114299Sbbruce@ucdavis.edu name: Python 3.6, c++17, gcc 7 8214299Sbbruce@ucdavis.edu addons: 8314299Sbbruce@ucdavis.edu apt: 8414299Sbbruce@ucdavis.edu sources: 8514299Sbbruce@ucdavis.edu - deadsnakes 8614299Sbbruce@ucdavis.edu - ubuntu-toolchain-r-test 8714299Sbbruce@ucdavis.edu packages: 8814299Sbbruce@ucdavis.edu - g++-7 8914299Sbbruce@ucdavis.edu - python3.6-dev 9014299Sbbruce@ucdavis.edu - python3.6-venv 9114299Sbbruce@ucdavis.edu - os: linux 9214299Sbbruce@ucdavis.edu dist: xenial 9314299Sbbruce@ucdavis.edu env: PYTHON=3.6 CPP=17 CLANG=7 9414299Sbbruce@ucdavis.edu name: Python 3.6, c++17, Clang 7 9514299Sbbruce@ucdavis.edu addons: 9614299Sbbruce@ucdavis.edu apt: 9714299Sbbruce@ucdavis.edu sources: 9814299Sbbruce@ucdavis.edu - deadsnakes 9914299Sbbruce@ucdavis.edu - llvm-toolchain-xenial-7 10014299Sbbruce@ucdavis.edu packages: 10114299Sbbruce@ucdavis.edu - python3.6-dev 10214299Sbbruce@ucdavis.edu - python3.6-venv 10314299Sbbruce@ucdavis.edu - clang-7 10414299Sbbruce@ucdavis.edu - libclang-7-dev 10514299Sbbruce@ucdavis.edu - llvm-7-dev 10614299Sbbruce@ucdavis.edu - lld-7 10714299Sbbruce@ucdavis.edu - libc++-7-dev 10814299Sbbruce@ucdavis.edu - libc++abi-7-dev # Why is this necessary??? 10912391Sjason@lowepower.com - os: osx 11014299Sbbruce@ucdavis.edu name: Python 2.7, c++14, AppleClang 7.3, CMake test 11112391Sjason@lowepower.com osx_image: xcode7.3 11212391Sjason@lowepower.com env: PYTHON=2.7 CPP=14 CLANG CMAKE=1 11312391Sjason@lowepower.com - os: osx 11414299Sbbruce@ucdavis.edu name: Python 3.7, c++14, AppleClang 9, Debug build 11514299Sbbruce@ucdavis.edu osx_image: xcode9 11614299Sbbruce@ucdavis.edu env: PYTHON=3.7 CPP=14 CLANG DEBUG=1 11712391Sjason@lowepower.com # Test a PyPy 2.7 build 11812391Sjason@lowepower.com - os: linux 11914299Sbbruce@ucdavis.edu dist: trusty 12012391Sjason@lowepower.com env: PYPY=5.8 PYTHON=2.7 CPP=11 GCC=4.8 12114299Sbbruce@ucdavis.edu name: PyPy 5.8, Python 2.7, c++11, gcc 4.8 12212391Sjason@lowepower.com addons: 12312391Sjason@lowepower.com apt: 12414299Sbbruce@ucdavis.edu packages: 12514299Sbbruce@ucdavis.edu - libblas-dev 12614299Sbbruce@ucdavis.edu - liblapack-dev 12714299Sbbruce@ucdavis.edu - gfortran 12812391Sjason@lowepower.com # Build in 32-bit mode and tests against the CMake-installed version 12914299Sbbruce@ucdavis.edu - os: linux 13014299Sbbruce@ucdavis.edu dist: trusty 13112037Sandreas.sandberg@arm.com services: docker 13214299Sbbruce@ucdavis.edu env: DOCKER=i386/debian:stretch PYTHON=3.5 CPP=14 GCC=6 INSTALL=1 13314299Sbbruce@ucdavis.edu name: Python 3.4, c++14, gcc 6, 32-bit 13412037Sandreas.sandberg@arm.com script: 13512037Sandreas.sandberg@arm.com - | 13614299Sbbruce@ucdavis.edu # Consolidated 32-bit Docker Build + Install 13714299Sbbruce@ucdavis.edu set -ex 13814299Sbbruce@ucdavis.edu $SCRIPT_RUN_PREFIX sh -c " 13914299Sbbruce@ucdavis.edu set -ex 14014299Sbbruce@ucdavis.edu cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 . 14114299Sbbruce@ucdavis.edu make install 14214299Sbbruce@ucdavis.edu cp -a tests /pybind11-tests 14314299Sbbruce@ucdavis.edu mkdir /build-tests && cd /build-tests 14414299Sbbruce@ucdavis.edu cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON 14514299Sbbruce@ucdavis.edu make pytest -j 2" 14614299Sbbruce@ucdavis.edu set +ex 14711986Sandreas.sandberg@arm.comcache: 14811986Sandreas.sandberg@arm.com directories: 14912391Sjason@lowepower.com - $HOME/.local/bin 15012391Sjason@lowepower.com - $HOME/.local/lib 15112391Sjason@lowepower.com - $HOME/.local/include 15212391Sjason@lowepower.com - $HOME/Library/Python 15311986Sandreas.sandberg@arm.combefore_install: 15411986Sandreas.sandberg@arm.com- | 15511986Sandreas.sandberg@arm.com # Configure build variables 15614299Sbbruce@ucdavis.edu set -ex 15711986Sandreas.sandberg@arm.com if [ "$TRAVIS_OS_NAME" = "linux" ]; then 15812037Sandreas.sandberg@arm.com if [ -n "$CLANG" ]; then 15912391Sjason@lowepower.com export CXX=clang++-$CLANG CC=clang-$CLANG 16014299Sbbruce@ucdavis.edu EXTRA_PACKAGES+=" clang-$CLANG llvm-$CLANG-dev" 16112037Sandreas.sandberg@arm.com else 16212391Sjason@lowepower.com if [ -z "$GCC" ]; then GCC=4.8 16314299Sbbruce@ucdavis.edu else EXTRA_PACKAGES+=" g++-$GCC" 16412037Sandreas.sandberg@arm.com fi 16512037Sandreas.sandberg@arm.com export CXX=g++-$GCC CC=gcc-$GCC 16612037Sandreas.sandberg@arm.com fi 16711986Sandreas.sandberg@arm.com elif [ "$TRAVIS_OS_NAME" = "osx" ]; then 16811986Sandreas.sandberg@arm.com export CXX=clang++ CC=clang; 16911986Sandreas.sandberg@arm.com fi 17012391Sjason@lowepower.com if [ -n "$CPP" ]; then CPP=-std=c++$CPP; fi 17112391Sjason@lowepower.com if [ "${PYTHON:0:1}" = "3" ]; then PY=3; fi 17214299Sbbruce@ucdavis.edu if [ -n "$DEBUG" ]; then CMAKE_EXTRA_ARGS+=" -DCMAKE_BUILD_TYPE=Debug"; fi 17314299Sbbruce@ucdavis.edu set +ex 17411986Sandreas.sandberg@arm.com- | 17512037Sandreas.sandberg@arm.com # Initialize environment 17614299Sbbruce@ucdavis.edu set -ex 17712391Sjason@lowepower.com if [ -n "$DOCKER" ]; then 17811986Sandreas.sandberg@arm.com docker pull $DOCKER 17912037Sandreas.sandberg@arm.com 18012391Sjason@lowepower.com containerid=$(docker run --detach --tty \ 18111986Sandreas.sandberg@arm.com --volume="$PWD":/pybind11 --workdir=/pybind11 \ 18211986Sandreas.sandberg@arm.com --env="CC=$CC" --env="CXX=$CXX" --env="DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \ 18311986Sandreas.sandberg@arm.com --env=GCC_COLORS=\ \ 18411986Sandreas.sandberg@arm.com $DOCKER) 18512391Sjason@lowepower.com SCRIPT_RUN_PREFIX="docker exec --tty $containerid" 18612037Sandreas.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' 18711986Sandreas.sandberg@arm.com else 18812391Sjason@lowepower.com if [ "$PYPY" = "5.8" ]; then 18912391Sjason@lowepower.com curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.8.0-linux64.tar.bz2 | tar xj 19012391Sjason@lowepower.com PY_CMD=$(echo `pwd`/pypy2-v5.8.0-linux64/bin/pypy) 19114299Sbbruce@ucdavis.edu CMAKE_EXTRA_ARGS+=" -DPYTHON_EXECUTABLE:FILEPATH=$PY_CMD" 19212391Sjason@lowepower.com else 19312391Sjason@lowepower.com PY_CMD=python$PYTHON 19412391Sjason@lowepower.com if [ "$TRAVIS_OS_NAME" = "osx" ]; then 19512391Sjason@lowepower.com if [ "$PY" = "3" ]; then 19614299Sbbruce@ucdavis.edu brew update && brew upgrade python 19712391Sjason@lowepower.com else 19812391Sjason@lowepower.com curl -fsSL https://bootstrap.pypa.io/get-pip.py | $PY_CMD - --user 19912391Sjason@lowepower.com fi 20011986Sandreas.sandberg@arm.com fi 20111986Sandreas.sandberg@arm.com fi 20212391Sjason@lowepower.com if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then 20312391Sjason@lowepower.com $PY_CMD -m ensurepip --user 20412391Sjason@lowepower.com fi 20514299Sbbruce@ucdavis.edu $PY_CMD --version 20612391Sjason@lowepower.com $PY_CMD -m pip install --user --upgrade pip wheel 20711986Sandreas.sandberg@arm.com fi 20814299Sbbruce@ucdavis.edu set +ex 20911986Sandreas.sandberg@arm.cominstall: 21011986Sandreas.sandberg@arm.com- | 21111986Sandreas.sandberg@arm.com # Install dependencies 21214299Sbbruce@ucdavis.edu set -ex 21314299Sbbruce@ucdavis.edu cmake --version 21411986Sandreas.sandberg@arm.com if [ -n "$DOCKER" ]; then 21512037Sandreas.sandberg@arm.com if [ -n "$DEBUG" ]; then 21612391Sjason@lowepower.com PY_DEBUG="python$PYTHON-dbg python$PY-scipy-dbg" 21714299Sbbruce@ucdavis.edu CMAKE_EXTRA_ARGS+=" -DPYTHON_EXECUTABLE=/usr/bin/python${PYTHON}dm" 21812037Sandreas.sandberg@arm.com fi 21912037Sandreas.sandberg@arm.com $SCRIPT_RUN_PREFIX sh -c "for s in 0 15; do sleep \$s; \ 22012391Sjason@lowepower.com apt-get -qy --no-install-recommends install \ 22112391Sjason@lowepower.com $PY_DEBUG python$PYTHON-dev python$PY-pytest python$PY-scipy \ 22214299Sbbruce@ucdavis.edu libeigen3-dev libboost-dev cmake make ${EXTRA_PACKAGES} && break; done" 22312391Sjason@lowepower.com else 22412037Sandreas.sandberg@arm.com 22514299Sbbruce@ucdavis.edu if [ "$CLANG" = "7" ]; then 22614299Sbbruce@ucdavis.edu export CXXFLAGS="-stdlib=libc++" 22712391Sjason@lowepower.com fi 22812037Sandreas.sandberg@arm.com 22912391Sjason@lowepower.com export NPY_NUM_BUILD_JOBS=2 23012391Sjason@lowepower.com echo "Installing pytest, numpy, scipy..." 23114299Sbbruce@ucdavis.edu local PIP_CMD="" 23214299Sbbruce@ucdavis.edu if [ -n $PYPY ]; then 23314299Sbbruce@ucdavis.edu # For expediency, install only versions that are available on the extra index. 23414299Sbbruce@ucdavis.edu travis_wait 30 \ 23514299Sbbruce@ucdavis.edu $PY_CMD -m pip install --user --upgrade --extra-index-url https://imaginary.ca/trusty-pypi \ 23614299Sbbruce@ucdavis.edu pytest numpy==1.15.4 scipy==1.2.0 23714299Sbbruce@ucdavis.edu else 23814299Sbbruce@ucdavis.edu $PY_CMD -m pip install --user --upgrade pytest numpy scipy 23914299Sbbruce@ucdavis.edu fi 24012391Sjason@lowepower.com echo "done." 24111986Sandreas.sandberg@arm.com 24214299Sbbruce@ucdavis.edu mkdir eigen 24314299Sbbruce@ucdavis.edu curl -fsSL https://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2 | \ 24414299Sbbruce@ucdavis.edu tar --extract -j --directory=eigen --strip-components=1 24514299Sbbruce@ucdavis.edu export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH:+$CMAKE_INCLUDE_PATH:}$PWD/eigen" 24611986Sandreas.sandberg@arm.com fi 24714299Sbbruce@ucdavis.edu set +ex 24811986Sandreas.sandberg@arm.comscript: 24914299Sbbruce@ucdavis.edu- | 25014299Sbbruce@ucdavis.edu # CMake Configuration 25114299Sbbruce@ucdavis.edu set -ex 25214299Sbbruce@ucdavis.edu $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS} \ 25314299Sbbruce@ucdavis.edu -DPYBIND11_PYTHON_VERSION=$PYTHON \ 25414299Sbbruce@ucdavis.edu -DPYBIND11_CPP_STANDARD=$CPP \ 25514299Sbbruce@ucdavis.edu -DPYBIND11_WERROR=${WERROR:-ON} \ 25614299Sbbruce@ucdavis.edu -DDOWNLOAD_CATCH=${DOWNLOAD_CATCH:-ON} \ 25714299Sbbruce@ucdavis.edu . 25814299Sbbruce@ucdavis.edu set +ex 25914299Sbbruce@ucdavis.edu- | 26014299Sbbruce@ucdavis.edu # pytest 26114299Sbbruce@ucdavis.edu set -ex 26214299Sbbruce@ucdavis.edu $SCRIPT_RUN_PREFIX make pytest -j 2 VERBOSE=1 26314299Sbbruce@ucdavis.edu set +ex 26414299Sbbruce@ucdavis.edu- | 26514299Sbbruce@ucdavis.edu # cpptest 26614299Sbbruce@ucdavis.edu set -ex 26714299Sbbruce@ucdavis.edu $SCRIPT_RUN_PREFIX make cpptest -j 2 26814299Sbbruce@ucdavis.edu set +ex 26914299Sbbruce@ucdavis.edu- | 27014299Sbbruce@ucdavis.edu # CMake Build Interface 27114299Sbbruce@ucdavis.edu set -ex 27214299Sbbruce@ucdavis.edu if [ -n "$CMAKE" ]; then $SCRIPT_RUN_PREFIX make test_cmake_build; fi 27314299Sbbruce@ucdavis.edu set +ex 27412391Sjason@lowepower.comafter_failure: cat tests/test_cmake_build/*.log* 27511986Sandreas.sandberg@arm.comafter_script: 27614299Sbbruce@ucdavis.edu- | 27714299Sbbruce@ucdavis.edu # Cleanup (Docker) 27814299Sbbruce@ucdavis.edu set -ex 27914299Sbbruce@ucdavis.edu if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi 28014299Sbbruce@ucdavis.edu set +ex 281