mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 18:17:59 +02:00
Hardcopy of pybind11 instead of using git submodules (#552)
* removed pybind as submodule * added hardcopy of pybind11 2.10.0 * rename pybind11 folder to avoid conflicts when changing branch Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
This commit is contained in:
84
libs/pybind/tests/test_cmake_build/CMakeLists.txt
Normal file
84
libs/pybind/tests/test_cmake_build/CMakeLists.txt
Normal file
@ -0,0 +1,84 @@
|
||||
# Built-in in CMake 3.5+
|
||||
include(CMakeParseArguments)
|
||||
|
||||
add_custom_target(test_cmake_build)
|
||||
|
||||
function(pybind11_add_build_test name)
|
||||
cmake_parse_arguments(ARG "INSTALL" "" "" ${ARGN})
|
||||
|
||||
set(build_options "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")
|
||||
|
||||
if(PYBIND11_FINDPYTHON)
|
||||
list(APPEND build_options "-DPYBIND11_FINDPYTHON=${PYBIND11_FINDPYTHON}")
|
||||
|
||||
if(DEFINED Python_ROOT_DIR)
|
||||
list(APPEND build_options "-DPython_ROOT_DIR=${Python_ROOT_DIR}")
|
||||
endif()
|
||||
|
||||
list(APPEND build_options "-DPython_EXECUTABLE=${Python_EXECUTABLE}")
|
||||
else()
|
||||
list(APPEND build_options "-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
if(DEFINED CMAKE_CXX_STANDARD)
|
||||
list(APPEND build_options "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
|
||||
endif()
|
||||
|
||||
if(NOT ARG_INSTALL)
|
||||
list(APPEND build_options "-Dpybind11_SOURCE_DIR=${pybind11_SOURCE_DIR}")
|
||||
else()
|
||||
list(APPEND build_options "-DCMAKE_PREFIX_PATH=${pybind11_BINARY_DIR}/mock_install")
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
test_build_${name}
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/${name}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${name}"
|
||||
--build-config
|
||||
Release
|
||||
--build-noclean
|
||||
--build-generator
|
||||
${CMAKE_GENERATOR}
|
||||
$<$<BOOL:${CMAKE_GENERATOR_PLATFORM}>:--build-generator-platform>
|
||||
${CMAKE_GENERATOR_PLATFORM}
|
||||
--build-makeprogram
|
||||
${CMAKE_MAKE_PROGRAM}
|
||||
--build-target
|
||||
check_${name}
|
||||
--build-options
|
||||
${build_options})
|
||||
if(ARG_INSTALL)
|
||||
add_dependencies(test_build_${name} mock_install)
|
||||
endif()
|
||||
add_dependencies(test_cmake_build test_build_${name})
|
||||
endfunction()
|
||||
|
||||
possibly_uninitialized(PYTHON_MODULE_EXTENSION Python_INTERPRETER_ID)
|
||||
|
||||
pybind11_add_build_test(subdirectory_function)
|
||||
pybind11_add_build_test(subdirectory_target)
|
||||
if("${PYTHON_MODULE_EXTENSION}" MATCHES "pypy" OR "${Python_INTERPRETER_ID}" STREQUAL "PyPy")
|
||||
message(STATUS "Skipping embed test on PyPy")
|
||||
else()
|
||||
pybind11_add_build_test(subdirectory_embed)
|
||||
endif()
|
||||
|
||||
if(PYBIND11_INSTALL)
|
||||
add_custom_target(
|
||||
mock_install ${CMAKE_COMMAND} "-DCMAKE_INSTALL_PREFIX=${pybind11_BINARY_DIR}/mock_install" -P
|
||||
"${pybind11_BINARY_DIR}/cmake_install.cmake")
|
||||
|
||||
pybind11_add_build_test(installed_function INSTALL)
|
||||
pybind11_add_build_test(installed_target INSTALL)
|
||||
if(NOT ("${PYTHON_MODULE_EXTENSION}" MATCHES "pypy" OR "${Python_INTERPRETER_ID}" STREQUAL "PyPy"
|
||||
))
|
||||
pybind11_add_build_test(installed_embed INSTALL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_dependencies(check test_cmake_build)
|
||||
|
||||
add_subdirectory(subdirectory_target EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(subdirectory_embed EXCLUDE_FROM_ALL)
|
23
libs/pybind/tests/test_cmake_build/embed.cpp
Normal file
23
libs/pybind/tests/test_cmake_build/embed.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include <pybind11/embed.h>
|
||||
namespace py = pybind11;
|
||||
|
||||
PYBIND11_EMBEDDED_MODULE(test_cmake_build, m) {
|
||||
m.def("add", [](int i, int j) { return i + j; });
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) {
|
||||
throw std::runtime_error("Expected test.py file as the first argument");
|
||||
}
|
||||
auto *test_py_file = argv[1];
|
||||
|
||||
py::scoped_interpreter guard{};
|
||||
|
||||
auto m = py::module_::import("test_cmake_build");
|
||||
if (m.attr("add")(1, 2).cast<int>() != 3) {
|
||||
throw std::runtime_error("embed.cpp failed");
|
||||
}
|
||||
|
||||
py::module_::import("sys").attr("argv") = py::make_tuple("test.py", "embed.cpp");
|
||||
py::eval_file(test_py_file, py::globals());
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.18)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.18)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.18)
|
||||
endif()
|
||||
|
||||
project(test_installed_embed CXX)
|
||||
|
||||
find_package(pybind11 CONFIG REQUIRED)
|
||||
message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")
|
||||
|
||||
add_executable(test_installed_embed ../embed.cpp)
|
||||
target_link_libraries(test_installed_embed PRIVATE pybind11::embed)
|
||||
set_target_properties(test_installed_embed PROPERTIES OUTPUT_NAME test_cmake_build)
|
||||
|
||||
# Do not treat includes from IMPORTED target as SYSTEM (Python headers in pybind11::embed).
|
||||
# This may be needed to resolve header conflicts, e.g. between Python release and debug headers.
|
||||
set_target_properties(test_installed_embed PROPERTIES NO_SYSTEM_FROM_IMPORTED ON)
|
||||
|
||||
add_custom_target(
|
||||
check_installed_embed
|
||||
$<TARGET_FILE:test_installed_embed> ${PROJECT_SOURCE_DIR}/../test.py
|
||||
DEPENDS test_installed_embed)
|
@ -0,0 +1,39 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
project(test_installed_module CXX)
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.18)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.18)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.18)
|
||||
endif()
|
||||
|
||||
project(test_installed_function CXX)
|
||||
|
||||
find_package(pybind11 CONFIG REQUIRED)
|
||||
message(
|
||||
STATUS "Found pybind11 v${pybind11_VERSION} ${pybind11_VERSION_TYPE}: ${pybind11_INCLUDE_DIRS}")
|
||||
|
||||
pybind11_add_module(test_installed_function SHARED NO_EXTRAS ../main.cpp)
|
||||
set_target_properties(test_installed_function PROPERTIES OUTPUT_NAME test_cmake_build)
|
||||
|
||||
if(DEFINED Python_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
elseif(DEFINED PYTHON_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
else()
|
||||
message(FATAL_ERROR "No Python executable defined (should not be possible at this stage)")
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
check_installed_function
|
||||
${CMAKE_COMMAND}
|
||||
-E
|
||||
env
|
||||
PYTHONPATH=$<TARGET_FILE_DIR:test_installed_function>
|
||||
${_Python_EXECUTABLE}
|
||||
${PROJECT_SOURCE_DIR}/../test.py
|
||||
${PROJECT_NAME}
|
||||
DEPENDS test_installed_function)
|
@ -0,0 +1,46 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.18)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.18)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.18)
|
||||
endif()
|
||||
|
||||
project(test_installed_target CXX)
|
||||
|
||||
find_package(pybind11 CONFIG REQUIRED)
|
||||
message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")
|
||||
|
||||
add_library(test_installed_target MODULE ../main.cpp)
|
||||
|
||||
target_link_libraries(test_installed_target PRIVATE pybind11::module)
|
||||
set_target_properties(test_installed_target PROPERTIES OUTPUT_NAME test_cmake_build)
|
||||
|
||||
# Make sure result is, for example, test_installed_target.so, not libtest_installed_target.dylib
|
||||
pybind11_extension(test_installed_target)
|
||||
|
||||
# Do not treat includes from IMPORTED target as SYSTEM (Python headers in pybind11::module).
|
||||
# This may be needed to resolve header conflicts, e.g. between Python release and debug headers.
|
||||
set_target_properties(test_installed_target PROPERTIES NO_SYSTEM_FROM_IMPORTED ON)
|
||||
|
||||
if(DEFINED Python_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
elseif(DEFINED PYTHON_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
else()
|
||||
message(FATAL_ERROR "No Python executable defined (should not be possible at this stage)")
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
check_installed_target
|
||||
${CMAKE_COMMAND}
|
||||
-E
|
||||
env
|
||||
PYTHONPATH=$<TARGET_FILE_DIR:test_installed_target>
|
||||
${_Python_EXECUTABLE}
|
||||
${PROJECT_SOURCE_DIR}/../test.py
|
||||
${PROJECT_NAME}
|
||||
DEPENDS test_installed_target)
|
6
libs/pybind/tests/test_cmake_build/main.cpp
Normal file
6
libs/pybind/tests/test_cmake_build/main.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include <pybind11/pybind11.h>
|
||||
namespace py = pybind11;
|
||||
|
||||
PYBIND11_MODULE(test_cmake_build, m) {
|
||||
m.def("add", [](int i, int j) { return i + j; });
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.18)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.18)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.18)
|
||||
endif()
|
||||
|
||||
project(test_subdirectory_embed CXX)
|
||||
|
||||
set(PYBIND11_INSTALL
|
||||
ON
|
||||
CACHE BOOL "")
|
||||
set(PYBIND11_EXPORT_NAME test_export)
|
||||
|
||||
add_subdirectory("${pybind11_SOURCE_DIR}" pybind11)
|
||||
|
||||
# Test basic target functionality
|
||||
add_executable(test_subdirectory_embed ../embed.cpp)
|
||||
target_link_libraries(test_subdirectory_embed PRIVATE pybind11::embed)
|
||||
set_target_properties(test_subdirectory_embed PROPERTIES OUTPUT_NAME test_cmake_build)
|
||||
|
||||
add_custom_target(
|
||||
check_subdirectory_embed
|
||||
$<TARGET_FILE:test_subdirectory_embed> "${PROJECT_SOURCE_DIR}/../test.py"
|
||||
DEPENDS test_subdirectory_embed)
|
||||
|
||||
# Test custom export group -- PYBIND11_EXPORT_NAME
|
||||
add_library(test_embed_lib ../embed.cpp)
|
||||
target_link_libraries(test_embed_lib PRIVATE pybind11::embed)
|
||||
|
||||
install(
|
||||
TARGETS test_embed_lib
|
||||
EXPORT test_export
|
||||
ARCHIVE DESTINATION bin
|
||||
LIBRARY DESTINATION lib
|
||||
RUNTIME DESTINATION lib)
|
||||
install(EXPORT test_export DESTINATION lib/cmake/test_export/test_export-Targets.cmake)
|
@ -0,0 +1,35 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.18)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.18)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.18)
|
||||
endif()
|
||||
|
||||
project(test_subdirectory_function CXX)
|
||||
|
||||
add_subdirectory("${pybind11_SOURCE_DIR}" pybind11)
|
||||
pybind11_add_module(test_subdirectory_function ../main.cpp)
|
||||
set_target_properties(test_subdirectory_function PROPERTIES OUTPUT_NAME test_cmake_build)
|
||||
|
||||
if(DEFINED Python_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
elseif(DEFINED PYTHON_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
else()
|
||||
message(FATAL_ERROR "No Python executable defined (should not be possible at this stage)")
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
check_subdirectory_function
|
||||
${CMAKE_COMMAND}
|
||||
-E
|
||||
env
|
||||
PYTHONPATH=$<TARGET_FILE_DIR:test_subdirectory_function>
|
||||
${_Python_EXECUTABLE}
|
||||
${PROJECT_SOURCE_DIR}/../test.py
|
||||
${PROJECT_NAME}
|
||||
DEPENDS test_subdirectory_function)
|
@ -0,0 +1,41 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.18)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.18)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.18)
|
||||
endif()
|
||||
|
||||
project(test_subdirectory_target CXX)
|
||||
|
||||
add_subdirectory("${pybind11_SOURCE_DIR}" pybind11)
|
||||
|
||||
add_library(test_subdirectory_target MODULE ../main.cpp)
|
||||
set_target_properties(test_subdirectory_target PROPERTIES OUTPUT_NAME test_cmake_build)
|
||||
|
||||
target_link_libraries(test_subdirectory_target PRIVATE pybind11::module)
|
||||
|
||||
# Make sure result is, for example, test_installed_target.so, not libtest_installed_target.dylib
|
||||
pybind11_extension(test_subdirectory_target)
|
||||
|
||||
if(DEFINED Python_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${Python_EXECUTABLE}")
|
||||
elseif(DEFINED PYTHON_EXECUTABLE)
|
||||
set(_Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
else()
|
||||
message(FATAL_ERROR "No Python executable defined (should not be possible at this stage)")
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
check_subdirectory_target
|
||||
${CMAKE_COMMAND}
|
||||
-E
|
||||
env
|
||||
PYTHONPATH=$<TARGET_FILE_DIR:test_subdirectory_target>
|
||||
${_Python_EXECUTABLE}
|
||||
${PROJECT_SOURCE_DIR}/../test.py
|
||||
${PROJECT_NAME}
|
||||
DEPENDS test_subdirectory_target)
|
8
libs/pybind/tests/test_cmake_build/test.py
Normal file
8
libs/pybind/tests/test_cmake_build/test.py
Normal file
@ -0,0 +1,8 @@
|
||||
import sys
|
||||
|
||||
import test_cmake_build
|
||||
|
||||
assert isinstance(__file__, str) # Test this is properly set
|
||||
|
||||
assert test_cmake_build.add(1, 2) == 3
|
||||
print(f"{sys.argv[1]} imports, runs, and adds: 1 + 2 = 3")
|
Reference in New Issue
Block a user