ci: download EIGEN

This commit is contained in:
Henry Schreiner 2020-07-26 13:44:10 -04:00 committed by Henry Schreiner
parent 9521bc56a8
commit 1b880dfd5a
3 changed files with 41 additions and 13 deletions

View File

@ -80,6 +80,7 @@ jobs:
cmake -S . -B build cmake -S . -B build
-DPYBIND11_WERROR=ON -DPYBIND11_WERROR=ON
-DDOWNLOAD_CATCH=ON -DDOWNLOAD_CATCH=ON
-DDOWNLOAD_EIGEN=ON
-DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_STANDARD=11
-DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)")
@ -101,6 +102,7 @@ jobs:
cmake -S . -B build17 cmake -S . -B build17
-DPYBIND17_WERROR=ON -DPYBIND17_WERROR=ON
-DDOWNLOAD_CATCH=ON -DDOWNLOAD_CATCH=ON
-DDOWNLOAD_EIGEN=ON
-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD=17
-DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)")
@ -138,7 +140,7 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Add wget and python3 - name: Add wget and python3
run: apt-get update && apt-get install -y python3-dev python3-numpy python3-pytest run: apt-get update && apt-get install -y python3-dev python3-numpy python3-pytest libeigen3-dev
- name: Configure - name: Configure
shell: bash shell: bash

View File

@ -97,6 +97,8 @@ set(PYBIND11_CROSS_MODULE_GIL_TESTS
test_gil_scoped.py test_gil_scoped.py
) )
option(DOWNLOAD_EIGEN "Download EIGEN (requires CMake 3.11+)" OFF)
# Check if Eigen is available; if not, remove from PYBIND11_TEST_FILES (but # Check if Eigen is available; if not, remove from PYBIND11_TEST_FILES (but
# keep it in PYBIND11_PYTEST_FILES, so that we get the "eigen is not installed" # keep it in PYBIND11_PYTEST_FILES, so that we get the "eigen is not installed"
# skip message). # skip message).
@ -105,18 +107,42 @@ if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1)
# Try loading via newer Eigen's Eigen3Config first (bypassing tools/FindEigen3.cmake). # Try loading via newer Eigen's Eigen3Config first (bypassing tools/FindEigen3.cmake).
# Eigen 3.3.1+ exports a cmake 3.0+ target for handling dependency requirements, but also # Eigen 3.3.1+ exports a cmake 3.0+ target for handling dependency requirements, but also
# produces a fatal error if loaded from a pre-3.0 cmake. # produces a fatal error if loaded from a pre-3.0 cmake.
if (NOT CMAKE_VERSION VERSION_LESS 3.0) if(DOWNLOAD_EIGEN)
find_package(Eigen3 3.2.7 QUIET CONFIG) if(CMAKE_VERSION VERSION_LESS 3.11)
if (EIGEN3_FOUND) message(FATAL_ERROR "CMake 3.11+ required when using DOWNLOAD_EIGEN")
if (EIGEN3_VERSION_STRING AND NOT EIGEN3_VERSION_STRING VERSION_LESS 3.3.1) endif()
set(PYBIND11_EIGEN_VIA_TARGET 1)
set(EIGEN3_VERSION_STRING "3.3.7")
include(FetchContent)
FetchContent_Declare(
eigen
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
GIT_TAG ${EIGEN3_VERSION_STRING}
)
FetchContent_GetProperties(eigen)
if(NOT eigen_POPULATED)
message(STATUS "Downloading Eigen")
FetchContent_Populate(eigen)
endif()
set(EIGEN3_INCLUDE_DIR ${eigen_SOURCE_DIR})
set(EIGEN3_FOUND TRUE)
else()
if (NOT CMAKE_VERSION VERSION_LESS 3.0)
find_package(Eigen3 3.2.7 QUIET CONFIG)
if (EIGEN3_FOUND)
if (EIGEN3_VERSION_STRING AND NOT EIGEN3_VERSION_STRING VERSION_LESS 3.3.1)
set(PYBIND11_EIGEN_VIA_TARGET TRUE)
endif()
endif() endif()
endif() endif()
endif() if (NOT EIGEN3_FOUND)
if (NOT EIGEN3_FOUND) # Couldn't load via target, so fall back to allowing module mode finding, which will pick up
# Couldn't load via target, so fall back to allowing module mode finding, which will pick up # tools/FindEigen3.cmake
# tools/FindEigen3.cmake find_package(Eigen3 3.2.7 QUIET)
find_package(Eigen3 3.2.7 QUIET) endif()
endif() endif()
if(EIGEN3_FOUND) if(EIGEN3_FOUND)
@ -129,7 +155,7 @@ if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1)
message(STATUS "Building tests with Eigen v${EIGEN3_VERSION}") message(STATUS "Building tests with Eigen v${EIGEN3_VERSION}")
else() else()
list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_EIGEN_I}) list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_EIGEN_I})
message(STATUS "Building tests WITHOUT Eigen") message(STATUS "Building tests WITHOUT Eigen, use -DDOWNLOAD_EIGEN on CMake 3.11+ to download")
endif() endif()
endif() endif()

View File

@ -9,7 +9,7 @@ if(CATCH_FOUND)
message(STATUS "Building interpreter tests using Catch v${CATCH_VERSION}") message(STATUS "Building interpreter tests using Catch v${CATCH_VERSION}")
else() else()
message(STATUS "Catch not detected. Interpreter tests will be skipped. Install Catch headers" message(STATUS "Catch not detected. Interpreter tests will be skipped. Install Catch headers"
" manually or use `cmake -DDOWNLOAD_CATCH=1` to fetch them automatically.") " manually or use `cmake -DDOWNLOAD_CATCH=ON` to fetch them automatically.")
return() return()
endif() endif()