<% ros_pkg_name = typekit.plugin('ros').ros_package_name_for_typekit(typekit) %> set(PROJECT_NAME <%= ros_pkg_name %>) set(<%= ros_pkg_name %>_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) <% typekit_deps = typekit.plugin('ros').dependencies %>
find_package(catkin REQUIRED) find_package(genmsg REQUIRED)
<%= Generation.cmake_pkgconfig_require(typekit_deps, 'ros') %>
<% if !all_messages.empty? %> add_message_files(DIRECTORY msg
FILES
<%= all_messages.join(".msg\n ") %>.msg)
<% msg_deps = typekit.used_typekits.map do |tk|
next if tk.virtual?
# Don't depend on transports that actually don't define any messages
pkg_rosmap = TypekitMarshallers::ROS.load_rosmap_by_package_name(tk.name)
next if pkg_rosmap.empty?
"orogen_#{tk.name}_msgs"
end.compact.to_set user_converted_types.each do |type, ros_type|
msg = type_to_msg[ros_type.name] msg_deps << msg.split('/').first
end msg_deps = msg_deps.to_a.sort %>
<% msg_deps.each do |dep_name| %> find_package(<%= dep_name %>) <% end %>
# This is a shameless copy of code from share/genmsg/extras/genmsg-extras.cmake # genmsg-groovy forces us to find_package the transitive dependencies from our # direct dependencies.
macro(find_genmsg_transitive_packages)
set(workspaces ${CATKIN_WORKSPACES})
list(FIND workspaces ${CATKIN_DEVEL_PREFIX} _index)
if(_index EQUAL -1)
list(INSERT workspaces 0 ${CATKIN_DEVEL_PREFIX})
endif()
set(pending_deps ${ARGN})
set(handled_deps "")
while(pending_deps)
list(GET pending_deps 0 dep)
list(REMOVE_AT pending_deps 0)
list(APPEND handled_deps ${dep})
find_package(${dep} REQUIRED)
unset(config CACHE)
set(filename "share/${dep}/cmake/${dep}-msg-paths.cmake")
find_file(config ${filename} PATHS ${workspaces}
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if("${config}" STREQUAL "config-NOTFOUND")
message(FATAL_ERROR "Could not find '${filename}' (searched in '${workspaces}').")
endif()
include(${config})
unset(config CACHE)
# add transitive msg dependencies
foreach(recdep ${${dep}_MSG_DEPENDENCIES})
set(all_deps ${handled_deps} ${pending_deps})
list(FIND all_deps ${recdep} _index)
if(_index EQUAL -1)
list(APPEND pending_deps ${recdep})
endif()
endforeach()
endwhile()
endmacro()
<% if msg_deps.empty? %> generate_messages() <% else %> find_genmsg_transitive_packages(“<%= msg_deps.join(”" "“) %>”) generate_messages(DEPENDENCIES <%= msg_deps.join(“ ”) %>) <% end %> include_directories(BEFORE ${CMAKE_BINARY_DIR}/${CATKIN_DEVEL_PREFIX}/${gencpp_INSTALL_DIR}/) <% end # end of if !all_messages.empty? %>
set(libname_ros <%= typekit.name %>-transport-ros-${OROCOS_TARGET}) add_library(${libname_ros} SHARED
"<%= impl.join("\"\n \"") %>")
<% deps = all_messages.map { |msg_name| “${CATKIN_DEVEL_PREFIX}/${gencpp_INSTALL_DIR}/${PROJECT_NAME}/#{msg_name}.h” }.join(“;”) %> set_source_files_properties(<%= impl.join(“ ”) %>
PROPERTIES OBJECT_DEPENDS "<%= deps %>")
target_link_libraries(${libname_ros}
<%= typekit.name %>-typekit-${OROCOS_TARGET}
${OrocosROS_LIBRARIES})
<%= Generation.cmake_pkgconfig_link('ros', '${libname_ros}', typekit_deps) %>
SET(PKG_CONFIG_FILE_ROS ${CMAKE_CURRENT_BINARY_DIR}/<%= typekit.name %>-transport-ros-${OROCOS_TARGET}.pc) configure_file(<%= typekit.name %>-transport-ros.pc.in ${PKG_CONFIG_FILE_ROS} @ONLY)
# Needed to generate the config.cmake file configure_file(<%= ros_pkg_name %>-config.cmake.in <%= ros_pkg_name %>-config.cmake @ONLY) install(TARGETS ${libname_ros} LIBRARY DESTINATION lib/orocos/types) install(FILES ${PKG_CONFIG_FILE_ROS} DESTINATION lib/pkgconfig) install(FILES <%= rosmap %> DESTINATION share/orogen/) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/<%= ros_pkg_name %>-config.cmake DESTINATION share/<%= ros_pkg_name %>/cmake) install(FILES
<%= headers.join("\n ") %>
Convertions.hpp
DESTINATION include/orocos/<%= typekit.name %>/transports/ros)