From 74505f25fa1057811cff23f51b1a3dda4d97b52d Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 7 Nov 2016 14:45:44 -0800 Subject: [PATCH] add rclcpp_register_node_plugins macro --- rclcpp/cmake/rclcpp_create_node_main.cmake | 2 - rclcpp/cmake/rclcpp_package_hook.cmake | 17 ++++++ .../cmake/rclcpp_register_node_plugins.cmake | 58 +++++++++++++++++++ rclcpp/rclcpp-extras.cmake | 12 ++++ 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 rclcpp/cmake/rclcpp_package_hook.cmake create mode 100644 rclcpp/cmake/rclcpp_register_node_plugins.cmake diff --git a/rclcpp/cmake/rclcpp_create_node_main.cmake b/rclcpp/cmake/rclcpp_create_node_main.cmake index 3d77516..086d5f6 100644 --- a/rclcpp/cmake/rclcpp_create_node_main.cmake +++ b/rclcpp/cmake/rclcpp_create_node_main.cmake @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# copied from rclcpp/rclcpp-extras.cmake - set(rclcpp_node_main_SRC "${rclcpp_DIR}/../../../src/rclcpp/node_main.cpp") diff --git a/rclcpp/cmake/rclcpp_package_hook.cmake b/rclcpp/cmake/rclcpp_package_hook.cmake new file mode 100644 index 0000000..9e73620 --- /dev/null +++ b/rclcpp/cmake/rclcpp_package_hook.cmake @@ -0,0 +1,17 @@ +# Copyright 2016 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# register node plugins +ament_index_register_resource( + "node_plugin" CONTENT "${_RCLCPP__NODE_PLUGINS}") diff --git a/rclcpp/cmake/rclcpp_register_node_plugins.cmake b/rclcpp/cmake/rclcpp_register_node_plugins.cmake new file mode 100644 index 0000000..254d2b8 --- /dev/null +++ b/rclcpp/cmake/rclcpp_register_node_plugins.cmake @@ -0,0 +1,58 @@ +# Copyright 2016 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# Register a node plugin with the ament resource index. +# +# The passed library can contain multiple plugins extending the node interface. +# +# :param target: the shared library target +# :type target: string +# :param ARGN: the unique plugin names being exported using class_loader +# :type ARGN: list of strings +# +macro(rclcpp_register_node_plugins target) + if(NOT TARGET ${target}) + message( + FATAL_ERROR + "rclcpp_register_node_plugins() first argument '${target}' is not a target") + endif() + get_target_property(_target_type ${target} TYPE) + if(NOT _target_type STREQUAL "SHARED_LIBRARY") + message( + FATAL_ERROR + "rclcpp_register_node_plugins() first argument '${target}' is not a shared library target") + endif() + + if(${ARGC} GREATER 0) + _rclcpp_register_package_hook() + set(_unique_names) + foreach(_arg ${ARGN}) + if(_arg IN_LIST _unique_names) + message( + FATAL_ERROR + "rclcpp_register_node_plugins() the plugin names must be unique (multiple '${_arg}')") + endif() + list(APPEND _unique_names "${_arg}") + + if(WIN32) + set(_path "bin") + else() + set(_path "lib") + endif() + set(_RCLCPP__NODE_PLUGINS + "${_RCLCPP__NODE_PLUGINS}${_arg};${_path}/$\n") + endforeach() + endif() +endmacro() diff --git a/rclcpp/rclcpp-extras.cmake b/rclcpp/rclcpp-extras.cmake index e237b62..facb37c 100644 --- a/rclcpp/rclcpp-extras.cmake +++ b/rclcpp/rclcpp-extras.cmake @@ -14,5 +14,17 @@ # copied from rclcpp/rclcpp-extras.cmake +# register ament_package() hook for node plugins once +macro(_rclcpp_register_package_hook) + if(NOT DEFINED _RCLCPP_PACKAGE_HOOK_REGISTERED) + set(_RCLCPP_PACKAGE_HOOK_REGISTERED TRUE) + + find_package(ament_cmake_core QUIET REQUIRED) + ament_register_extension("ament_package" "rclcpp" + "rclcpp_package_hook.cmake") + endif() +endmacro() + include("${rclcpp_DIR}/get_rclcpp_information.cmake") include("${rclcpp_DIR}/rclcpp_create_node_main.cmake") +include("${rclcpp_DIR}/rclcpp_register_node_plugins.cmake")