Independent tests (#665)
* Make tests buildable independently
This makes "tests" buildable as a separate project that uses
find_package(pybind11 CONFIG) when invoked independently.
This also moves the WERROR option into tests/CMakeLists.txt, as that's
the only place it is used.
* Use Eigen 3.3.1's cmake target, if available
This changes the eigen finding code to attempt to use Eigen's
system-installed Eigen3Config first. In Eigen 3.3.1, it exports a cmake
Eigen3::Eigen target to get dependencies from (rather than setting the
include path directly).
If it fails, we fall back to the trying to load allowing modules (i.e.
allowing our tools/FindEigen3.cmake). If we either fallback, or the
eigen version is older than 3.3.1 (or , we still set the include
directory manually; otherwise, for CONFIG + new Eigen, we get it via
the target.
This is also needed to allow 'tests' to be built independently, when
the find_package(Eigen3) is going to find via the system-installed
Eigen3Config.cmake.
* Add a install-then-build test, using clang on linux
This tests that `make install` to the actual system, followed by a build
of the tests (without the main pybind11 repository available) works as
expected.
To also expand the testing variety a bit, it also builds using
clang-3.9 instead of gcc.
* Don't try loading Eigen3Config in cmake < 3.0
It could FATAL_ERROR as the newer cmake includes a cmake 3.0 required
line.
If doing an independent, out-of-tree "tests" build, the regular
find_package(Eigen3) is likely to fail with the same error, but I think
we can just let that be: if you want a recent Eigen with proper cmake
loading support *and* want to do an independent tests build, you'll
need at least cmake 3.0.
diff --git a/.travis.yml b/.travis.yml
index d510047..8e7005f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,6 +39,19 @@
- 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
@@ -72,9 +85,15 @@
- |
# Configure build variables
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
- if [ -z "$GCC" ]; then export GCC=4.8; fi
- export CXX=g++-$GCC CC=gcc-$GCC;
- if [ "$GCC" = "6" ]; then export DOCKER=${ARCH:+$ARCH/}debian:testing
+ if [ -n "$CLANG" ]; then
+ export CXX=clang++-$CLANG CC=clang-$CLANG COMPILER_PACKAGES="clang-$CLANG llvm-$CLANG-dev"
+ 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 [ "$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
@@ -131,7 +150,7 @@
docker exec --tty "$containerid" sh -c "for s in 0 15; do sleep \$s; \
apt-get -qy --no-install-recommends $APT_GET_EXTRA install \
python$PY-dev python$PY-pytest python$PY-scipy \
- libeigen3-dev cmake make g++-$GCC && break; done"
+ libeigen3-dev cmake make ${COMPILER_PACKAGES} && break; done"
else
pip install numpy scipy pytest