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 a6d8263e..e3bb6ac4 100644 --- a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake +++ b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake @@ -21,6 +21,7 @@ find_package(PythonInterp 3.6 REQUIRED) find_package(python_cmake_module REQUIRED) find_package(PythonExtra MODULE REQUIRED) +find_package(Python3 REQUIRED COMPONENTS Development NumPy) # Get a list of typesupport implementations from valid rmw implementations. rosidl_generator_py_get_typesupports(_typesupport_impls) @@ -165,52 +166,23 @@ set(rosidl_generator_py_suffix "__rosidl_generator_py") set(_target_name_lib "${rosidl_generate_interfaces_TARGET}${rosidl_generator_py_suffix}") add_library(${_target_name_lib} SHARED ${_generated_c_files}) target_link_libraries(${_target_name_lib} + PRIVATE ${rosidl_generate_interfaces_TARGET}__rosidl_generator_c) add_dependencies( ${_target_name_lib} ${rosidl_generate_interfaces_TARGET}${_target_suffix} ${rosidl_generate_interfaces_TARGET}__rosidl_typesupport_c ) - -target_link_libraries( - ${_target_name_lib} - ${PythonExtra_LIBRARIES} -) target_include_directories(${_target_name_lib} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_c ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_py - ${PythonExtra_INCLUDE_DIRS} -) - -# Check if numpy is in the include path -find_file(_numpy_h numpy/numpyconfig.h - PATHS ${PythonExtra_INCLUDE_DIRS} ) -if(APPLE OR WIN32 OR NOT _numpy_h) - # add include directory for numpy headers - set(_python_code - "import numpy" - "print(numpy.get_include())" - ) - execute_process( - COMMAND "${PYTHON_EXECUTABLE}" "-c" "${_python_code}" - OUTPUT_VARIABLE _output - RESULT_VARIABLE _result - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(NOT _result EQUAL 0) - message(FATAL_ERROR - "execute_process(${PYTHON_EXECUTABLE} -c '${_python_code}') returned " - "error code ${_result}") - endif() - message(STATUS "Using numpy include directory: ${_output}") - target_include_directories(${_target_name_lib} PUBLIC "${_output}") -endif() +target_link_libraries(${_target_name_lib} PRIVATE Python3::NumPy Python3::Module) rosidl_get_typesupport_target(c_typesupport_target "${rosidl_generate_interfaces_TARGET}" "rosidl_typesupport_c") -target_link_libraries(${_target_name_lib} ${c_typesupport_target}) +target_link_libraries(${_target_name_lib} PRIVATE ${c_typesupport_target}) foreach(_typesupport_impl ${_typesupport_impls}) find_package(${_typesupport_impl} REQUIRED) @@ -245,27 +217,28 @@ foreach(_typesupport_impl ${_typesupport_impls}) endif() target_link_libraries( ${_target_name} + PRIVATE ${_target_name_lib} - ${PythonExtra_LIBRARIES} ${rosidl_generate_interfaces_TARGET}__${_typesupport_impl} + Python3::Module ) target_include_directories(${_target_name} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_c ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_py - ${PythonExtra_INCLUDE_DIRS} ) - target_link_libraries(${_target_name} ${c_typesupport_target}) + target_link_libraries(${_target_name} PRIVATE ${c_typesupport_target}) ament_target_dependencies(${_target_name} + PUBLIC "rosidl_runtime_c" "rosidl_typesupport_c" "rosidl_typesupport_interface" ) foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES}) - ament_target_dependencies(${_target_name} + ament_target_dependencies(${_target_name} PUBLIC ${_pkg_name} ) endforeach() @@ -273,7 +246,7 @@ foreach(_typesupport_impl ${_typesupport_impls}) add_dependencies(${_target_name} ${rosidl_generate_interfaces_TARGET}__${_typesupport_impl} ) - ament_target_dependencies(${_target_name} + ament_target_dependencies(${_target_name} PUBLIC "rosidl_runtime_c" "rosidl_generator_py" ) @@ -288,7 +261,7 @@ set(PYTHON_EXECUTABLE ${_PYTHON_EXECUTABLE}) # 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} ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}}) + target_link_libraries(${_target_name_lib} PRIVATE ${${_pkg_name}_TARGETS${rosidl_generator_py_suffix}}) endforeach() set_lib_properties("")