@@ -21,7 +21,6 @@ find_package(PythonInterp 3.6 REQUIRED)
2121
2222find_package (python_cmake_module REQUIRED)
2323find_package (PythonExtra MODULE REQUIRED)
24- find_package (Python3 REQUIRED COMPONENTS Development NumPy)
2524
2625# Get a list of typesupport implementations from valid rmw implementations.
2726rosidl_generator_py_get_typesupports(_typesupport_impls)
@@ -166,23 +165,52 @@ set(rosidl_generator_py_suffix "__rosidl_generator_py")
166165set (_target_name_lib "${rosidl_generate_interfaces_TARGET}${rosidl_generator_py_suffix} " )
167166add_library (${_target_name_lib} SHARED ${_generated_c_files} )
168167target_link_libraries (${_target_name_lib}
169- PRIVATE
170168 ${rosidl_generate_interfaces_TARGET} __rosidl_generator_c)
171169add_dependencies (
172170 ${_target_name_lib}
173171 ${rosidl_generate_interfaces_TARGET}${_target_suffix}
174172 ${rosidl_generate_interfaces_TARGET} __rosidl_typesupport_c
175173)
174+
175+ target_link_libraries (
176+ ${_target_name_lib}
177+ ${PythonExtra_LIBRARIES}
178+ )
176179target_include_directories (${_target_name_lib}
177180 PRIVATE
178181 ${CMAKE_CURRENT_BINARY_DIR} /rosidl_generator_c
179182 ${CMAKE_CURRENT_BINARY_DIR} /rosidl_generator_py
183+ ${PythonExtra_INCLUDE_DIRS}
184+ )
185+
186+ # Check if numpy is in the include path
187+ find_file (_numpy_h numpy/numpyconfig.h
188+ PATHS ${PythonExtra_INCLUDE_DIRS}
180189)
181190
182- target_link_libraries (${_target_name_lib} PRIVATE Python3::NumPy Python3::Module)
191+ if (APPLE OR WIN32 OR NOT _numpy_h)
192+ # add include directory for numpy headers
193+ set (_python_code
194+ "import numpy"
195+ "print(numpy.get_include())"
196+ )
197+ execute_process (
198+ COMMAND "${PYTHON_EXECUTABLE} " "-c" "${_python_code} "
199+ OUTPUT_VARIABLE _output
200+ RESULT_VARIABLE _result
201+ OUTPUT_STRIP_TRAILING_WHITESPACE
202+ )
203+ if (NOT _result EQUAL 0)
204+ message (FATAL_ERROR
205+ "execute_process(${PYTHON_EXECUTABLE} -c '${_python_code} ') returned "
206+ "error code ${_result} " )
207+ endif ()
208+ message (STATUS "Using numpy include directory: ${_output} " )
209+ target_include_directories (${_target_name_lib} PUBLIC "${_output} " )
210+ endif ()
183211
184212rosidl_get_typesupport_target(c_typesupport_target "${rosidl_generate_interfaces_TARGET} " "rosidl_typesupport_c" )
185- target_link_libraries (${_target_name_lib} PRIVATE ${c_typesupport_target} )
213+ target_link_libraries (${_target_name_lib} ${c_typesupport_target} )
186214
187215foreach (_typesupport_impl ${_typesupport_impls} )
188216 find_package (${_typesupport_impl} REQUIRED)
@@ -217,36 +245,35 @@ foreach(_typesupport_impl ${_typesupport_impls})
217245 endif ()
218246 target_link_libraries (
219247 ${_target_name}
220- PRIVATE
221248 ${_target_name_lib}
249+ ${PythonExtra_LIBRARIES}
222250 ${rosidl_generate_interfaces_TARGET} __${_typesupport_impl}
223- Python3::Module
224251 )
225252
226253 target_include_directories (${_target_name}
227254 PUBLIC
228255 ${CMAKE_CURRENT_BINARY_DIR} /rosidl_generator_c
229256 ${CMAKE_CURRENT_BINARY_DIR} /rosidl_generator_py
257+ ${PythonExtra_INCLUDE_DIRS}
230258 )
231259
232- target_link_libraries (${_target_name} PRIVATE ${c_typesupport_target} )
260+ target_link_libraries (${_target_name} ${c_typesupport_target} )
233261
234262 ament_target_dependencies(${_target_name}
235- PUBLIC
236263 "rosidl_runtime_c"
237264 "rosidl_typesupport_c"
238265 "rosidl_typesupport_interface"
239266 )
240267 foreach (_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES} )
241- ament_target_dependencies(${_target_name} PUBLIC
268+ ament_target_dependencies(${_target_name}
242269 ${_pkg_name}
243270 )
244271 endforeach ()
245272
246273 add_dependencies (${_target_name}
247274 ${rosidl_generate_interfaces_TARGET} __${_typesupport_impl}
248275 )
249- ament_target_dependencies(${_target_name} PUBLIC
276+ ament_target_dependencies(${_target_name}
250277 "rosidl_runtime_c"
251278 "rosidl_generator_py"
252279 )
@@ -261,7 +288,7 @@ set(PYTHON_EXECUTABLE ${_PYTHON_EXECUTABLE})
261288
262289# Depend on rosidl_generator_py generated targets from our dependencies
263290foreach (_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES} )
264- target_link_libraries (${_target_name_lib} PRIVATE ${${_pkg_name} _TARGETS${rosidl_generator_py_suffix} })
291+ target_link_libraries (${_target_name_lib} ${${_pkg_name} _TARGETS${rosidl_generator_py_suffix} })
265292endforeach ()
266293
267294set_lib_properties("" )
0 commit comments