Automatically install pytest from CMake

Pytest is a development dependency but we can make it painless by
automating the install using CMake.
This commit is contained in:
Dean Moldovan 2016-08-13 02:44:56 +02:00
parent a9a37b4e31
commit 18319d5598
2 changed files with 28 additions and 3 deletions

View File

@ -39,7 +39,7 @@ matrix:
install: install:
- > - >
docker exec --tty "$containerid" apt-get -y --no-install-recommends install docker exec --tty "$containerid" apt-get -y --no-install-recommends install
python2.7-dev python-scipy libeigen3-dev python2.7-dev python-pip python-setuptools python-scipy libeigen3-dev
cmake make g++ cmake make g++
- compiler: gcc-6 - compiler: gcc-6
services: docker services: docker
@ -48,7 +48,7 @@ matrix:
install: install:
- > - >
docker exec --tty "$containerid" apt-get -y --no-install-recommends install docker exec --tty "$containerid" apt-get -y --no-install-recommends install
python3.5-dev python3-scipy libeigen3-dev python3.5-dev python3-pip python3-setuptools python3-scipy libeigen3-dev
cmake make g++ cmake make g++
# Documentation build: # Documentation build:
- os: linux - os: linux

View File

@ -58,6 +58,31 @@ if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
endforeach() endforeach()
endif() endif()
# Make sure pytest is found or try to install it if it's not found
macro(pybind11_execute_python)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -m ${ARGN} OUTPUT_QUIET ERROR_QUIET
RESULT_VARIABLE pybind11_execute_python_error)
endmacro()
if(NOT PYBIND11_PYTEST_FOUND)
pybind11_execute_python(pytest --version --noconftest)
if(pybind11_execute_python_error)
message(STATUS "Installing pytest using pip")
pybind11_execute_python(pip install pytest)
if(pybind11_execute_python_error)
message(STATUS "Installing pytest using pip --user (fallback)")
pybind11_execute_python(pip install --user pytest)
endif()
pybind11_execute_python(pytest --version --noconftest)
if(pybind11_execute_python_error)
message(FATAL_ERROR "Running the tests requires pytest. Please install it manually.")
endif()
endif()
set(PYBIND11_PYTEST_FOUND TRUE CACHE INTERAL "")
endif()
# A single command to compile and run the tests # A single command to compile and run the tests
add_custom_target(pytest COMMAND ${PYTHON_EXECUTABLE} -m pytest add_custom_target(pytest COMMAND ${PYTHON_EXECUTABLE} -m pytest -rws
DEPENDS pybind11_tests WORKING_DIRECTORY ${testdir}) DEPENDS pybind11_tests WORKING_DIRECTORY ${testdir})