diff --git a/patch/ros-kilted-rosidl-generator-py.osx.patch b/patch/ros-kilted-rosidl-generator-py.osx.patch deleted file mode 100644 index c93e3cf8c..000000000 --- a/patch/ros-kilted-rosidl-generator-py.osx.patch +++ /dev/null @@ -1,69 +0,0 @@ -diff --git a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake -index de6a6c65..62093e4a 100644 ---- a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake -+++ b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake -@@ -152,7 +152,7 @@ set_property( - - set(_target_name_lib "${rosidl_generate_interfaces_TARGET}__rosidl_generator_py") - add_library(${_target_name_lib} SHARED ${_generated_c_files}) --target_link_libraries(${_target_name_lib} PRIVATE -+target_link_libraries(${_target_name_lib} PUBLIC - ${rosidl_generate_interfaces_TARGET}__rosidl_generator_c) - add_dependencies( - ${_target_name_lib} -@@ -160,11 +160,6 @@ add_dependencies( - ${rosidl_generate_interfaces_TARGET}__rosidl_typesupport_c - ) - --target_link_libraries( -- ${_target_name_lib} PRIVATE -- Python3::NumPy -- Python3::Python --) - target_include_directories(${_target_name_lib} - PRIVATE - ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_c -@@ -176,8 +171,15 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(_extension_compile_flags -Wall -Wextra) - endif() - -+if(APPLE) -+ target_link_libraries(${_target_name_lib} PRIVATE Python3::NumPy Python3::Module) -+ target_include_directories(${_target_name_lib} PRIVATE ${Python3_INCLUDE_DIRS} ${Python3_NumPy_INCLUDE_DIRS}) -+else() -+ target_link_libraries(${_target_name_lib} PUBLIC Python3::NumPy Python3::Python) -+endif() -+ - rosidl_get_typesupport_target(c_typesupport_target "${rosidl_generate_interfaces_TARGET}" "rosidl_typesupport_c") --target_link_libraries(${_target_name_lib} PRIVATE ${c_typesupport_target}) -+target_link_libraries(${_target_name_lib} PUBLIC ${c_typesupport_target}) - - foreach(_typesupport_impl ${_typesupport_impls}) - find_package(${_typesupport_impl} REQUIRED) -@@ -210,7 +212,7 @@ foreach(_typesupport_impl ${_typesupport_impls}) - RUNTIME_OUTPUT_DIRECTORY ${_output_path}) - - target_link_libraries( -- ${_target_name} PRIVATE -+ ${_target_name} PUBLIC - ${_target_name_lib} - ${rosidl_generate_interfaces_TARGET}__${_typesupport_impl} - ${c_typesupport_target} -@@ -226,7 +228,7 @@ foreach(_typesupport_impl ${_typesupport_impls}) - ) - - foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES}) -- target_link_libraries(${_target_name} PRIVATE ${${_pkg_name}__TARGETS}) -+ target_link_libraries(${_target_name} PUBLIC ${${_pkg_name}__TARGETS}) - endforeach() - - add_dependencies(${_target_name} -@@ -243,7 +245,7 @@ endforeach() - - # Depend on rosidl_generator_py generated targets from our dependencies - foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES}) -- target_link_libraries(${_target_name_lib} PRIVATE ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}}) -+ target_link_libraries(${_target_name_lib} PUBLIC ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}}) - endforeach() - - set_target_properties(${_target_name_lib} PROPERTIES COMPILE_OPTIONS "${_extension_compile_flags}") diff --git a/patch/ros-kilted-rosidl-generator-py.patch b/patch/ros-kilted-rosidl-generator-py.patch new file mode 100644 index 000000000..596594569 --- /dev/null +++ b/patch/ros-kilted-rosidl-generator-py.patch @@ -0,0 +1,56 @@ +diff --git a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake +index de6a6c6..32eda28 100644 +--- a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake ++++ b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake +@@ -35,6 +35,11 @@ set(Python3_FIND_UNVERSIONED_NAMES FIRST) + + find_package(Python3 REQUIRED COMPONENTS Interpreter Development NumPy) + ++# The Python C bindings library of an interface package is exported in ++# _TARGETS__rosidl_generator_py instead of _TARGETS, so that C/C++ ++# consumers of the interface package don't link it. ++set(rosidl_generator_py_suffix "__rosidl_generator_py") ++ + # Get a list of typesupport implementations from valid rmw implementations. + rosidl_generator_py_get_typesupports(_typesupport_impls) + +@@ -160,10 +165,13 @@ add_dependencies( + ${rosidl_generate_interfaces_TARGET}__rosidl_typesupport_c + ) + ++# This library is only linked by Python extension modules, which get the ++# CPython symbols from the interpreter that loads them, so it links ++# Python3::Module rather than libpython (Python3::Python). + target_link_libraries( + ${_target_name_lib} PRIVATE + Python3::NumPy +- Python3::Python ++ Python3::Module + ) + target_include_directories(${_target_name_lib} + PRIVATE +@@ -255,9 +263,22 @@ if(NOT rosidl_generate_interfaces_SKIP_INSTALL) + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) + +- # Export this target so downstream interface packages can depend on it ++ # Export this target so downstream interface packages can depend on it, in ++ # _TARGETS__rosidl_generator_py. Not with ament_export_targets(), which ++ # would also add it to _TARGETS: install the export set and include it ++ # from a config extras file instead, which creates the imported target that ++ # rosidl_export_typesupport_targets() adds to the suffixed list. ++ install( ++ EXPORT export_${_target_name_lib} ++ DESTINATION share/${PROJECT_NAME}/cmake ++ NAMESPACE "${PROJECT_NAME}::" ++ FILE "export_${_target_name_lib}Export.cmake") ++ set(_py_extras_file ++ "${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_py/${_target_name_lib}-extras.cmake") ++ file(WRITE "${_py_extras_file}" ++ "include(\"\${${PROJECT_NAME}_DIR}/export_${_target_name_lib}Export.cmake\")\n") ++ list(APPEND ${PROJECT_NAME}_CONFIG_EXTRAS "${_py_extras_file}") + rosidl_export_typesupport_targets("${rosidl_generator_py_suffix}" "${_target_name_lib}") +- ament_export_targets(export_${_target_name_lib}) + endif() + + if(BUILD_TESTING AND rosidl_generate_interfaces_ADD_LINTER_TESTS) diff --git a/tests/ros-kilted-std-msgs.yaml b/tests/ros-kilted-std-msgs.yaml index 4dee633a0..2088cfafa 100644 --- a/tests/ros-kilted-std-msgs.yaml +++ b/tests/ros-kilted-std-msgs.yaml @@ -8,9 +8,7 @@ tests: # (https://github.com/RoboStack/ros-kilted/issues/76). # cxx-compiler (unlike compiler('cxx')) sets no LDFLAGS, like a user's # environment, so -Wl,--as-needed / -Wl,-dead_strip_dylibs can't hide it. - # TODO: back to unix once the osx rosidl_generator_py patch is replaced - # with the jazzy/rolling one (needs interface package rebuilds). - - if: linux + - if: unix then: script: - cmake -S cpp_consumer -B build -G Ninja -DCMAKE_PREFIX_PATH="$PREFIX"