From b3e3e90580e2d300e2889b71a81715368b8a913d Mon Sep 17 00:00:00 2001 From: Shane Loretz Date: Wed, 4 Aug 2021 16:08:31 -0700 Subject: [PATCH] Add rosidl_get_typesupport_target and deprecate rosidl_target_interfaces (#606) * Add rosidl_get_typesupport_target Also deprecate rosidl_target_interfaces(). Getting the target name allows consumers to choose the keyword arguments that they pass to target_link_libraries() Signed-off-by: Shane Loretz * Shorten line length Signed-off-by: Shane Loretz * Remove trailing whitespace Signed-off-by: Shane Loretz --- .../cmake/rosidl_get_typesupport_target.cmake | 40 +++++++++++++++++++ .../cmake/rosidl_target_interfaces.cmake | 1 + rosidl_cmake/rosidl_cmake-extras.cmake | 1 + 3 files changed, 42 insertions(+) create mode 100644 rosidl_cmake/cmake/rosidl_get_typesupport_target.cmake diff --git a/rosidl_cmake/cmake/rosidl_get_typesupport_target.cmake b/rosidl_cmake/cmake/rosidl_get_typesupport_target.cmake new file mode 100644 index 000000000..8c4d43b95 --- /dev/null +++ b/rosidl_cmake/cmake/rosidl_get_typesupport_target.cmake @@ -0,0 +1,40 @@ +# Copyright 2021 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. + +# Get the name of a Typesupport target so it can be used to depend on +# generated messages in the same package that generated them. +# +# :param var: A name of a variable to store the typesupport target name +# :param generate_interfaces_target: the target name passed to +# rosidl_generate_interfaces +# :type generate_interfaces_target: string +# :param typesupport_name: the package name of the type support +# :type typesupport_name: string +# +# @public +# +function(rosidl_get_typesupport_target var generate_interfaces_target typesupport_name) + if(NOT TARGET ${generate_interfaces_target}) + message(FATAL_ERROR + "${generate_interfaces_target} is not a CMake target. Maybe rosidl_generate_interfaces was given a different target name?") + endif() + + set(output_target "${generate_interfaces_target}__${typesupport_name}") + + if(NOT TARGET ${output_target}) + message(FATAL_ERROR "${output_target} is not a CMake target - maybe the typesupport '${typesupport_name}' doesn't exist?") + endif() + + set("${var}" "${output_target}" PARENT_SCOPE) +endfunction() diff --git a/rosidl_cmake/cmake/rosidl_target_interfaces.cmake b/rosidl_cmake/cmake/rosidl_target_interfaces.cmake index 19d3817ea..7aca8c68e 100644 --- a/rosidl_cmake/cmake/rosidl_target_interfaces.cmake +++ b/rosidl_cmake/cmake/rosidl_target_interfaces.cmake @@ -29,6 +29,7 @@ # @public # function(rosidl_target_interfaces target interface_target typesupport_name) + message(DEPRECATION "Use rosidl_get_typesupport_target() and target_link_libraries() instead of rosidl_target_interfaces()") if(ARGN) message(FATAL_ERROR "rosidl_target_interfaces() called with unused arguments: ${ARGN}") diff --git a/rosidl_cmake/rosidl_cmake-extras.cmake b/rosidl_cmake/rosidl_cmake-extras.cmake index 4454a4d21..6b82c0887 100644 --- a/rosidl_cmake/rosidl_cmake-extras.cmake +++ b/rosidl_cmake/rosidl_cmake-extras.cmake @@ -30,6 +30,7 @@ endmacro() find_package(rosidl_adapter) # not required, being used when available include("${rosidl_cmake_DIR}/rosidl_generate_interfaces.cmake") +include("${rosidl_cmake_DIR}/rosidl_get_typesupport_target.cmake") include("${rosidl_cmake_DIR}/rosidl_target_interfaces.cmake") include("${rosidl_cmake_DIR}/rosidl_write_generator_arguments.cmake") include("${rosidl_cmake_DIR}/string_camel_case_to_lower_case_underscore.cmake")