diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 491f215ce..9beb268ed 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -130,7 +130,6 @@ set(PYBIND11_TEST_FILES test_docstring_options test_eigen_matrix test_eigen_tensor - test_eigen_tensor_avoid_stl_array.cpp test_enum test_eval test_exceptions @@ -293,6 +292,11 @@ if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) set(EIGEN3_VERSION ${EIGEN3_VERSION_STRING}) endif() message(STATUS "Building tests with Eigen v${EIGEN3_VERSION}") + + if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)) + tests_extra_targets("test_eigen_tensor.py" "eigen_tensor_avoid_stl_array") + endif() + else() list(FIND PYBIND11_TEST_FILES test_eigen_matrix.cpp PYBIND11_TEST_FILES_EIGEN_I) if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) @@ -303,11 +307,6 @@ if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_EIGEN_I}) endif() - list(FIND PYBIND11_TEST_FILES test_eigen_tensor_avoid_stl_array.cpp - PYBIND11_TEST_FILES_EIGEN_I) - if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) - list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_EIGEN_I}) - endif() message( STATUS "Building tests WITHOUT Eigen, use -DDOWNLOAD_EIGEN=ON on CMake 3.11+ to download") endif() @@ -319,10 +318,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_L if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_EIGEN_I}) endif() - list(FIND PYBIND11_TEST_FILES test_eigen_tensor_avoid_stl_array.cpp PYBIND11_TEST_FILES_EIGEN_I) - if(PYBIND11_TEST_FILES_EIGEN_I GREATER -1) - list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_EIGEN_I}) - endif() endif() # Optional dependency for some tests (boost::variant is only supported with version >= 1.56) diff --git a/tests/test_eigen_tensor_avoid_stl_array.cpp b/tests/eigen_tensor_avoid_stl_array.cpp similarity index 65% rename from tests/test_eigen_tensor_avoid_stl_array.cpp rename to tests/eigen_tensor_avoid_stl_array.cpp index 58bedf62d..eacc9e9bd 100644 --- a/tests/test_eigen_tensor_avoid_stl_array.cpp +++ b/tests/eigen_tensor_avoid_stl_array.cpp @@ -5,12 +5,10 @@ BSD-style license that can be found in the LICENSE file. */ -constexpr const char *test_eigen_tensor_module_name = "eigen_tensor_avoid_stl_array"; - #ifndef EIGEN_AVOID_STL_ARRAY # define EIGEN_AVOID_STL_ARRAY #endif -#define PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE eigen_tensor_avoid_stl_array - #include "test_eigen_tensor.inl" + +PYBIND11_MODULE(eigen_tensor_avoid_stl_array, m) { eigen_tensor_test::test_module(m); } diff --git a/tests/test_eigen_tensor.cpp b/tests/test_eigen_tensor.cpp index 40b494005..503c69c7d 100644 --- a/tests/test_eigen_tensor.cpp +++ b/tests/test_eigen_tensor.cpp @@ -5,8 +5,6 @@ BSD-style license that can be found in the LICENSE file. */ -constexpr const char *test_eigen_tensor_module_name = "eigen_tensor"; - #define PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE eigen_tensor #ifdef EIGEN_AVOID_STL_ARRAY @@ -14,3 +12,7 @@ constexpr const char *test_eigen_tensor_module_name = "eigen_tensor"; #endif #include "test_eigen_tensor.inl" + +#include "pybind11_tests.h" + +test_initializer egien_tensor("eigen_tensor", eigen_tensor_test::test_module); diff --git a/tests/test_eigen_tensor.inl b/tests/test_eigen_tensor.inl index f46eb1803..d864ce737 100644 --- a/tests/test_eigen_tensor.inl +++ b/tests/test_eigen_tensor.inl @@ -7,9 +7,9 @@ #include -#include "pybind11_tests.h" +PYBIND11_NAMESPACE_BEGIN(eigen_tensor_test) -PYBIND11_NAMESPACE_BEGIN(PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE) +namespace py = pybind11; PYBIND11_WARNING_DISABLE_MSVC(4127) @@ -108,7 +108,7 @@ void init_tensor_module(pybind11::module &m) { return check_tensor(get_tensor()) && check_tensor(get_fixed_tensor()); }); - py::class_>(m, "CustomExample") + py::class_>(m, "CustomExample", py::module_local()) .def(py::init<>()) .def_readonly( "member", &CustomExample::member, py::return_value_policy::reference_internal) @@ -322,8 +322,6 @@ void init_tensor_module(pybind11::module &m) { py::return_value_policy::reference); } -void test_module(py::module_ &); -test_initializer name(test_eigen_tensor_module_name, test_module); void test_module(py::module_ &m) { auto f_style = m.def_submodule("f_style"); auto c_style = m.def_submodule("c_style"); @@ -332,4 +330,4 @@ void test_module(py::module_ &m) { init_tensor_module(c_style); } -PYBIND11_NAMESPACE_END(PYBIND11_TEST_EIGEN_TENSOR_NAMESPACE) +PYBIND11_NAMESPACE_END(eigen_tensor_test) diff --git a/tests/test_eigen_tensor.py b/tests/test_eigen_tensor.py index 653c9f288..dc8aa4643 100644 --- a/tests/test_eigen_tensor.py +++ b/tests/test_eigen_tensor.py @@ -6,17 +6,17 @@ np = pytest.importorskip("numpy") eigen_tensor = pytest.importorskip("pybind11_tests.eigen_tensor") submodules = [eigen_tensor.c_style, eigen_tensor.f_style] try: - from pybind11_tests import eigen_tensor_avoid_stl_array as avoid + import eigen_tensor_avoid_stl_array as avoid submodules += [avoid.c_style, avoid.f_style] except ImportError as e: # Ensure config, build, toolchain, etc. issues are not masked here: raise RuntimeError( - "import pybind11_tests.eigen_tensor_avoid_stl_array FAILED, while " + "import eigen_tensor_avoid_stl_array FAILED, while " "import pybind11_tests.eigen_tensor succeeded. " "Please ensure that " "test_eigen_tensor.cpp & " - "test_eigen_tensor_avoid_stl_array.cpp " + "eigen_tensor_avoid_stl_array.cpp " "are built together (or both are not built if Eigen is not available)." ) from e @@ -42,7 +42,7 @@ def cleanup(): def test_import_avoid_stl_array(): - pytest.importorskip("pybind11_tests.eigen_tensor_avoid_stl_array") + pytest.importorskip("eigen_tensor_avoid_stl_array") assert len(submodules) == 4