From 204d9208c5d55d6793cab1b6bfc50628e658c96a Mon Sep 17 00:00:00 2001 From: Michel Hidalgo Date: Wed, 30 Jun 2021 11:49:53 -0300 Subject: [PATCH] Bundle and ensure the exportation of rosidl generated targets (#601) Signed-off-by: Michel Hidalgo --- rosidl_cmake/cmake/rosidl_generate_interfaces.cmake | 7 +++++++ .../cmake/rosidl_generator_c_generate_interfaces.cmake | 3 +-- .../rosidl_generator_cpp_generate_interfaces.cmake | 3 +-- ...pesupport_introspection_c_generate_interfaces.cmake | 3 +-- ...support_introspection_cpp_generate_interfaces.cmake | 10 ++++------ 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake b/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake index 92b13c99a..dc087595e 100644 --- a/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake +++ b/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake @@ -220,6 +220,12 @@ macro(rosidl_generate_interfaces target) ) if(NOT _ARG_SKIP_INSTALL) + # Ensure exported targets are imported before first use in downstream packages. + # This hook registers the ament_export_targets() extension, which populates + # ${PROJECT_NAME}_CONFIG_EXTRAS upon ament_package() invocation. It is crucial + # that ament_export_targets() configuration extras are found and included before + # any other configuration extras that make use of imported targets. + _ament_cmake_export_targets_register_package_hook() if(NOT _ARG_SKIP_GROUP_MEMBERSHIP_CHECK) set(_group_name "rosidl_interface_packages") if(NOT _AMENT_PACKAGE_NAME) @@ -301,6 +307,7 @@ macro(rosidl_generate_interfaces target) endif() if(NOT _ARG_SKIP_INSTALL) + ament_export_targets(${rosidl_generate_interfaces_TARGET}) foreach(_idl_tuple ${_idl_tuples}) string(REGEX REPLACE ":([^:]*)$" ";\\1" _idl_list "${_idl_tuple}") list(GET _idl_list 1 _idl_relpath) diff --git a/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake b/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake index 3e9b630e8..990033fe5 100644 --- a/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake +++ b/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake @@ -152,10 +152,9 @@ if(NOT rosidl_generate_interfaces_SKIP_INSTALL) ) endif() ament_export_libraries(${rosidl_generate_interfaces_TARGET}${_target_suffix}) - ament_export_targets(${rosidl_generate_interfaces_TARGET}${_target_suffix}) install( TARGETS ${rosidl_generate_interfaces_TARGET}${_target_suffix} - EXPORT ${rosidl_generate_interfaces_TARGET}${_target_suffix} + EXPORT ${rosidl_generate_interfaces_TARGET} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin diff --git a/rosidl_generator_cpp/cmake/rosidl_generator_cpp_generate_interfaces.cmake b/rosidl_generator_cpp/cmake/rosidl_generator_cpp_generate_interfaces.cmake index c944ee340..2ced620cc 100644 --- a/rosidl_generator_cpp/cmake/rosidl_generator_cpp_generate_interfaces.cmake +++ b/rosidl_generator_cpp/cmake/rosidl_generator_cpp_generate_interfaces.cmake @@ -126,9 +126,8 @@ if(NOT rosidl_generate_interfaces_SKIP_INSTALL) install( TARGETS ${rosidl_generate_interfaces_TARGET}${_target_suffix} - EXPORT ${rosidl_generate_interfaces_TARGET}${_target_suffix} + EXPORT ${rosidl_generate_interfaces_TARGET} ) - ament_export_targets(${rosidl_generate_interfaces_TARGET}${_target_suffix}) endif() if(BUILD_TESTING AND rosidl_generate_interfaces_ADD_LINTER_TESTS) diff --git a/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_c_generate_interfaces.cmake b/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_c_generate_interfaces.cmake index bdd89184e..c360aea1d 100644 --- a/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_c_generate_interfaces.cmake +++ b/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_c_generate_interfaces.cmake @@ -142,14 +142,13 @@ if(NOT rosidl_generate_interfaces_SKIP_INSTALL) endif() install( TARGETS ${rosidl_generate_interfaces_TARGET}${_target_suffix} - EXPORT ${rosidl_generate_interfaces_TARGET}${_target_suffix} + EXPORT ${rosidl_generate_interfaces_TARGET} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) rosidl_export_typesupport_targets(${_target_suffix} ${rosidl_generate_interfaces_TARGET}${_target_suffix}) - ament_export_targets(${rosidl_generate_interfaces_TARGET}${_target_suffix}) endif() if(BUILD_TESTING AND rosidl_generate_interfaces_ADD_LINTER_TESTS) diff --git a/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake b/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake index daeb16f77..94c277db0 100644 --- a/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake +++ b/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake @@ -99,10 +99,9 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") COMPILE_OPTIONS -Wall -Wextra -Wpedantic ) endif() -target_include_directories(${rosidl_generate_interfaces_TARGET}${_target_suffix} - PUBLIC - "$" -) +target_link_libraries( + ${rosidl_generate_interfaces_TARGET}${_target_suffix} + ${rosidl_generate_interfaces_TARGET}__rosidl_generator_cpp) ament_target_dependencies(${rosidl_generate_interfaces_TARGET}${_target_suffix} "rosidl_runtime_c" "rosidl_typesupport_interface" @@ -135,14 +134,13 @@ if(NOT rosidl_generate_interfaces_SKIP_INSTALL) endif() install( TARGETS ${rosidl_generate_interfaces_TARGET}${_target_suffix} - EXPORT ${rosidl_generate_interfaces_TARGET}${_target_suffix} + EXPORT ${rosidl_generate_interfaces_TARGET} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) rosidl_export_typesupport_targets(${_target_suffix} ${rosidl_generate_interfaces_TARGET}${_target_suffix}) - ament_export_targets(${rosidl_generate_interfaces_TARGET}${_target_suffix}) endif() if(BUILD_TESTING AND rosidl_generate_interfaces_ADD_LINTER_TESTS)