Skip to content

Commit e75b382

Browse files
committed
unittest/python/CMakeLists.txt : add util function to create test C++ extension Python modules, and associated Python tests
1 parent 0218985 commit e75b382

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

unittest/python/CMakeLists.txt

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#
2-
# Copyright (c) 2015-2023 CNRS INRIA
2+
# Copyright (c) 2015-2023 CNRS INRIA, 2024-2025 INRIA
33
#
4+
include(${JRL_CMAKE_MODULES}/python-helpers.cmake)
45

56
set(${PROJECT_NAME}_PYTHON_TESTS
67
bindings
@@ -46,6 +47,46 @@ set(${PROJECT_NAME}_PYTHON_TESTS
4647
bindings_std_vector
4748
bindings_std_map)
4849

50+
function(pinocchio_add_python_cpp_module name)
51+
set(target_name "test-ext-${name}")
52+
string(REPLACE "-" "_" target_name ${target_name})
53+
set(source_file "${name}.cpp")
54+
set(options)
55+
set(oneValueArgs)
56+
set(multiValueArgs "PIN_TARGETS")
57+
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
58+
if(BUILD_TESTING)
59+
set(_exclude EXCLUDE_FROM_ALL)
60+
else()
61+
set(_exclude)
62+
endif()
63+
64+
add_library(${target_name} MODULE ${_exclude} ${source_file})
65+
target_compile_definitions(${target_name} PRIVATE EXT_MODULE_NAME=${target_name})
66+
target_link_libraries(${target_name} PRIVATE pinocchio_default eigenpy::eigenpy)
67+
message(WARNING "${target_name} depends on pin target ${ARGS_PIN_TARGETS}")
68+
foreach(_dep ${ARGS_PIN_TARGETS})
69+
target_link_libraries(${target_name} PRIVATE ${_dep})
70+
endforeach()
71+
set_target_properties(${target_name} PROPERTIES PREFIX "" SUFFIX "${PYTHON_EXT_SUFFIX}")
72+
73+
add_test(
74+
NAME ${target_name}
75+
COMMAND ${PYTHON_EXECUTABLE} -c "import ${target_name}"
76+
WORKING_DIRECTORY $<TARGET_FILE_DIR:${target_name}>)
77+
78+
add_dependencies(build_tests ${target_name})
79+
if(NOT BUILD_TESTING)
80+
set_tests_properties(${target_name} PROPERTIES DEPENDS ctest_build_tests)
81+
endif()
82+
endfunction()
83+
84+
function(pinocchio_add_lib_unit_test name)
85+
set(TEST_NAME "${PROJECT_NAME}-test-py-${name}")
86+
set(TEST_SOURCE "unittest/python/${name}.py")
87+
add_python_unit_test(${TEST_NAME} ${TEST_SOURCE} "unittest/python")
88+
endfunction()
89+
4990
if(BUILD_WITH_HPP_FCL_SUPPORT)
5091
set(${PROJECT_NAME}_PYTHON_TESTS ${${PROJECT_NAME}_PYTHON_TESTS} bindings_geometry_object)
5192
set(${PROJECT_NAME}_PYTHON_TESTS ${${PROJECT_NAME}_PYTHON_TESTS} bindings_fcl_transform)

0 commit comments

Comments
 (0)