mirror of
https://github.com/RYDE-WORK/pybind11.git
synced 2026-02-04 06:23:30 +08:00
This applies several changes to the non-docker travis-ci builds: - Make all builds use trusty rather than precise. pybind can't really build in precise anyway (we install essentially the entire toolchain backported from trusty on every build), and so this saves needing to install all the backported packages during the build setup. - Updated the 3.5 build to 3.6 (via deadsnakes, which didn't backport 3.6 to ubuntu releases earlier than trusty). - As a result of the switch to trusty, the BAREBONES build now picks up the (default installed) python 3.5 installation. - Invoke pip everywhere via $PYTHON -m pip rather than the pip executable, which saves us having to figure out what the pip executable is, and ensures that we are using the correct pip. - Install packages with `pip --user` rather than in a virtualenv. - Add the local user python package archive to the travis-ci cache (rather than the pip cache). This saves needing to install packages during installation (unless there are updates, in which case the package and the cache are updated). - Install numpy and scipy on the pypy build. This has to build from source (and so blas and fortran need to be installed on the build), but given the above caching, the build will only be slow for the first build after a new numpy/scipy release. This testing is valuable: numpy has various behaviour differences under pypy. - Added set -e/+e around the before_install/install blocks so that a failure here (e.g. a pip install failure or dependency download failure) triggers a build failure. - Update eigen version to latest (3.3.3), mainly to be consistent with the appveyor build. - The travis trusty environment has an upgraded cmake, so this downgrades cmake (to the stock trusty version) on the first couple jobs so that we're still including some cmake 2.8.12 testing.
191 lines
6.8 KiB
YAML
191 lines
6.8 KiB
YAML
language: cpp
|
|
dist: trusty
|
|
sudo: false
|
|
matrix:
|
|
include:
|
|
- os: linux
|
|
env: PYTHON=2.7 CPP=11 GCC=4.8
|
|
addons:
|
|
apt:
|
|
packages: [cmake=2.\*, cmake-data=2.\*]
|
|
- os: linux
|
|
env: PYTHON=3.6 CPP=11 GCC=4.8
|
|
addons:
|
|
apt:
|
|
sources: [deadsnakes]
|
|
packages: [python3.6-dev python3.6-venv, cmake=2.\*, cmake-data=2.\*]
|
|
- sudo: true
|
|
services: docker
|
|
env: PYTHON=2.7 CPP=14 GCC=6
|
|
- sudo: true
|
|
services: docker
|
|
env: PYTHON=3.5 CPP=14 GCC=6 DEBUG=1
|
|
- sudo: true
|
|
services: docker
|
|
env: PYTHON=3.5 CPP=17 GCC=7
|
|
- sudo: true
|
|
services: docker
|
|
env: PYTHON=3.5 CPP=17 CLANG=4.0
|
|
- os: osx
|
|
osx_image: xcode7.3
|
|
env: PYTHON=2.7 CPP=14 CLANG
|
|
- os: osx
|
|
osx_image: xcode7.3
|
|
env: PYTHON=3.6 CPP=14 CLANG
|
|
# Test a PyPy 2.7 build
|
|
- os: linux
|
|
env: PYPY=5.7 PYTHON=2.7 CPP=11 GCC=4.8
|
|
addons:
|
|
apt:
|
|
packages: [libblas-dev, liblapack-dev, gfortran]
|
|
- sudo: true
|
|
services: docker
|
|
env: ARCH=i386 PYTHON=3.5 CPP=14 GCC=6
|
|
# This next one does a make install *before* testing, then builds the tests against the installed version:
|
|
- sudo: true
|
|
services: docker
|
|
env: PYTHON=3.5 CPP=14 CLANG=3.9 INSTALL=1
|
|
script:
|
|
- |
|
|
$SCRIPT_RUN_PREFIX sh -c "set -e
|
|
cmake ${CMAKE_EXTRA_ARGS} -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0
|
|
make install
|
|
cp -a tests /pybind11-tests
|
|
mkdir /build-tests && cd /build-tests
|
|
cmake ../pybind11-tests ${CMAKE_EXTRA_ARGS} -DPYBIND11_WERROR=ON
|
|
make pytest -j 2"
|
|
# A barebones build makes sure everything still works without optional deps (numpy/scipy/eigen)
|
|
# and also tests the automatic discovery functions in CMake (Python version, C++ standard).
|
|
- os: linux
|
|
env: BAREBONES PYTHON=3.5
|
|
install: $PY_CMD -m pip install --user --upgrade pytest
|
|
# Documentation build:
|
|
- os: linux
|
|
language: docs
|
|
env: DOCS STYLE LINT
|
|
install:
|
|
- export PATH="~/.local/bin:$PATH"
|
|
- $PY_CMD -m pip install --user --upgrade sphinx sphinx_rtd_theme flake8 pep8-naming
|
|
- |
|
|
curl -fsSL ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.12.linux.bin.tar.gz | tar xz
|
|
export PATH="$PWD/doxygen-1.8.12/bin:$PATH"
|
|
$PY_CMD -m pip install --user --upgrade https://github.com/michaeljones/breathe/archive/master.zip
|
|
script:
|
|
- make -C docs html SPHINX_OPTIONS=-W
|
|
- tools/check-style.sh
|
|
- flake8
|
|
allow_failures:
|
|
- env: PYTHON=3.5 CPP=17 GCC=7
|
|
- env: PYTHON=3.5 CPP=17 CLANG=4.0
|
|
cache:
|
|
directories:
|
|
- $HOME/.local/bin
|
|
- $HOME/.local/lib
|
|
- $HOME/Library/Python
|
|
before_install:
|
|
- |
|
|
# Configure build variables
|
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
|
if [ -n "$CLANG" ]; then
|
|
export CXX=clang++-$CLANG CC=clang-$CLANG COMPILER_PACKAGES="clang-$CLANG llvm-$CLANG-dev"
|
|
if [ "$CLANG" = "4.0" ]; then export CXXFLAGS="-stdlib=libc++"; fi
|
|
else
|
|
if [ -z "$GCC" ]; then export GCC=4.8
|
|
else export COMPILER_PACKAGES=g++-$GCC
|
|
fi
|
|
export CXX=g++-$GCC CC=gcc-$GCC
|
|
fi
|
|
if [ "$CLANG" = "4.0" ]; then export DOCKER=debian:sid
|
|
elif [ "$GCC" = "6" ] || [ -n "$CLANG" ]; then export DOCKER=${ARCH:+$ARCH/}debian:testing
|
|
elif [ "$GCC" = "7" ]; then export DOCKER=debian:experimental APT_GET_EXTRA="-t experimental"
|
|
fi
|
|
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
export CXX=clang++ CC=clang;
|
|
fi
|
|
if [ -n "$CPP" ]; then export CPP=-std=c++$CPP; fi
|
|
if [ "${PYTHON:0:1}" = "3" ]; then export PY=3; fi
|
|
if [ -n "$DEBUG" ]; then export CMAKE_EXTRA_ARGS="-DCMAKE_BUILD_TYPE=Debug"; fi
|
|
- |
|
|
# Initialize environment
|
|
set -e
|
|
if [ -n "$DOCKER" ]; then
|
|
docker pull $DOCKER
|
|
|
|
export containerid=$(docker run --detach --tty \
|
|
--volume="$PWD":/pybind11 --workdir=/pybind11 \
|
|
--env="CXXFLAGS=$CXXFLAGS" \
|
|
--env="CC=$CC" --env="CXX=$CXX" --env="DEBIAN_FRONTEND=$DEBIAN_FRONTEND" \
|
|
--env=GCC_COLORS=\ \
|
|
$DOCKER)
|
|
export SCRIPT_RUN_PREFIX="docker exec --tty $containerid"
|
|
$SCRIPT_RUN_PREFIX sh -c 'for s in 0 15; do sleep $s; apt-get update && apt-get -qy dist-upgrade && break; done'
|
|
else
|
|
if [ "$PYPY" = "5.7" ]; then
|
|
curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.7.1-linux64.tar.bz2 | tar -xj
|
|
export PY_CMD=$(echo `pwd`/pypy2-v5.7.1-linux64/bin/pypy)
|
|
export CMAKE_EXTRA_ARGS="-DPYTHON_EXECUTABLE:FILEPATH=$PY_CMD"
|
|
else
|
|
export PY_CMD=python$PYTHON
|
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
if [ "$PY" = "3" ]; then
|
|
brew update; brew install python$PY;
|
|
else
|
|
curl -fsSL https://bootstrap.pypa.io/get-pip.py | $PY_CMD - --user
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then
|
|
$PY_CMD -m ensurepip --user
|
|
fi
|
|
$PY_CMD -m pip install --user --upgrade pip wheel
|
|
fi
|
|
set +e
|
|
install:
|
|
- |
|
|
# Install dependencies
|
|
set -e
|
|
if [ -n "$DOCKER" ]; then
|
|
if [ -n "$DEBUG" ]; then
|
|
PY_DEBUG="python$PY-dbg python$PY-scipy-dbg"
|
|
export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DPYTHON_EXECUTABLE=/usr/bin/python${PYTHON}dm"
|
|
fi
|
|
$SCRIPT_RUN_PREFIX sh -c "for s in 0 15; do sleep \$s; \
|
|
apt-get -qy --no-install-recommends $APT_GET_EXTRA install \
|
|
$PY_DEBUG python$PY-dev python$PY-pytest python$PY-scipy \
|
|
libeigen3-dev cmake make ${COMPILER_PACKAGES} && break; done"
|
|
|
|
if [ "$CLANG" = "4.0" ]; then
|
|
# Neither debian nor llvm provide a libc++ deb; luckily it's fairly quick
|
|
# to build and install, so do it ourselves:
|
|
git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source
|
|
git clone https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx -b release_40
|
|
git clone https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi -b release_40
|
|
$SCRIPT_RUN_PREFIX sh -c "mkdir llvm-build && cd llvm-build && \
|
|
CXXFLAGS= cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../llvm-source && \
|
|
make -j2 install-cxxabi install-cxx && \
|
|
cp -a include/c++/v1/*cxxabi*.h /usr/include/c++/v1"
|
|
|
|
if [ "$CPP" = "-std=c++17" ]; then export CPP="-std=c++1z"; fi
|
|
fi
|
|
else
|
|
export NPY_NUM_BUILD_JOBS=2
|
|
echo "Installing pytest, numpy, scipy..."
|
|
${PYPY:+travis_wait 30} $PY_CMD -m pip install --user --upgrade --quiet pytest numpy scipy
|
|
echo "done."
|
|
|
|
wget -q -O eigen.tar.gz https://bitbucket.org/eigen/eigen/get/3.3.3.tar.gz
|
|
tar xzf eigen.tar.gz
|
|
export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_INCLUDE_PATH=$PWD/eigen-eigen-67e894c6cd8f"
|
|
fi
|
|
set +e
|
|
script:
|
|
- $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS}
|
|
-DPYBIND11_PYTHON_VERSION=$PYTHON
|
|
-DPYBIND11_CPP_STANDARD=$CPP
|
|
-DPYBIND11_WERROR=${WERROR:-ON}
|
|
- $SCRIPT_RUN_PREFIX make pytest -j 2
|
|
- $SCRIPT_RUN_PREFIX make test_cmake_build
|
|
after_failure: cat tests/test_cmake_build/*.log
|
|
after_script:
|
|
- if [ -n "$DOCKER" ]; then docker stop "$containerid"; docker rm "$containerid"; fi
|