Skip to content

Commit 0f43ffc

Browse files
authored
Fix rosidl_generator_py assuming incorect library names (#149)
rosidl_generator_py was assuming all interface packages being depended upon call their interface generation target name "${PROJECT_NAME}", but that's an incorrect assumption. The target name is a required argument to rosidl_generate_interfaces. This fixes it by exporting the python library target using an existing CMake macro for that purpose called rosidl_export_typesupport_targets() and amen_export_targets() I works by adding a variable "${PROJECT_NAME}_TARGETS__rosidl_generator_py" which is set when the interface package is `find_package()`d. That variable contains the targets generated by `rosidl_generator_py` so that downstream interface packages can depend on it. Signed-off-by: Shane Loretz <[email protected]>
1 parent fb0eade commit 0f43ffc

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,10 @@ macro(set_lib_properties _build_type)
159159
RUNTIME_OUTPUT_DIRECTORY${_build_type} ${_output_path})
160160
endmacro()
161161

162-
set(_target_name_lib "${rosidl_generate_interfaces_TARGET}__python")
162+
# Export target so downstream interface packages can link to it
163+
set(rosidl_generator_py_suffix "__rosidl_generator_py")
164+
165+
set(_target_name_lib "${rosidl_generate_interfaces_TARGET}${rosidl_generator_py_suffix}")
163166
add_library(${_target_name_lib} SHARED ${_generated_c_files})
164167
target_link_libraries(${_target_name_lib}
165168
${rosidl_generate_interfaces_TARGET}__rosidl_generator_c)
@@ -174,7 +177,7 @@ target_link_libraries(
174177
${PythonExtra_LIBRARIES}
175178
)
176179
target_include_directories(${_target_name_lib}
177-
PUBLIC
180+
PRIVATE
178181
${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_c
179182
${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_py
180183
${PythonExtra_INCLUDE_DIRS}
@@ -283,17 +286,9 @@ endforeach()
283286

284287
set(PYTHON_EXECUTABLE ${_PYTHON_EXECUTABLE})
285288

289+
# Depend on rosidl_generator_py generated targets from our dependencies
286290
foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES})
287-
set(_pkg_install_base "${${_pkg_name}_DIR}/../../..")
288-
set(_pkg_python_libname "${_pkg_name}__python")
289-
290-
if(WIN32)
291-
target_link_libraries(${_target_name_lib} "${_pkg_install_base}/Lib/${_pkg_python_libname}.lib")
292-
elseif(APPLE)
293-
target_link_libraries(${_target_name_lib} "${_pkg_install_base}/lib/lib${_pkg_python_libname}.dylib")
294-
else()
295-
target_link_libraries(${_target_name_lib} "${_pkg_install_base}/lib/lib${_pkg_python_libname}.so")
296-
endif()
291+
target_link_libraries(${_target_name_lib} ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}})
297292
endforeach()
298293

299294
set_lib_properties("")
@@ -305,9 +300,14 @@ if(WIN32)
305300
endif()
306301
if(NOT rosidl_generate_interfaces_SKIP_INSTALL)
307302
install(TARGETS ${_target_name_lib}
303+
EXPORT export_${_target_name_lib}
308304
ARCHIVE DESTINATION lib
309305
LIBRARY DESTINATION lib
310306
RUNTIME DESTINATION bin)
307+
308+
# Export this target so downstream interface packages can depend on it
309+
rosidl_export_typesupport_targets("${rosidl_generator_py_suffix}" "${_target_name_lib}")
310+
ament_export_targets(export_${_target_name_lib})
311311
endif()
312312

313313
if(BUILD_TESTING AND rosidl_generate_interfaces_ADD_LINTER_TESTS)

0 commit comments

Comments
 (0)