diff --git a/rosidl_typesupport_introspection_cpp/bin/rosidl_typesupport_introspection_cpp b/rosidl_typesupport_introspection_cpp/bin/rosidl_typesupport_introspection_cpp index c181efea2..06c41322a 100755 --- a/rosidl_typesupport_introspection_cpp/bin/rosidl_typesupport_introspection_cpp +++ b/rosidl_typesupport_introspection_cpp/bin/rosidl_typesupport_introspection_cpp @@ -16,7 +16,7 @@ def main(argv=sys.argv[1:]): help='The location of the file containing the generator arguments') args = parser.parse_args(argv) - return generate_cpp(args.generator_arguments_file) + generate_cpp(args.generator_arguments_file) if __name__ == '__main__': diff --git a/rosidl_typesupport_introspection_cpp/package.xml b/rosidl_typesupport_introspection_cpp/package.xml index cf5057ee5..fce19b681 100644 --- a/rosidl_typesupport_introspection_cpp/package.xml +++ b/rosidl_typesupport_introspection_cpp/package.xml @@ -22,6 +22,8 @@ rosidl_runtime_cpp rosidl_typesupport_introspection_c + ament_index_python + rosidl_cli rosidl_cmake rosidl_parser rosidl_typesupport_interface diff --git a/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py b/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py index 9aa5fbb75..c4a66072a 100644 --- a/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py +++ b/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py @@ -21,4 +21,4 @@ def generate_cpp(generator_arguments_file): 'detail/%s__rosidl_typesupport_introspection_cpp.hpp', 'idl__type_support.cpp.em': 'detail/%s__type_support.cpp', } - generate_files(generator_arguments_file, mapping) + return generate_files(generator_arguments_file, mapping) diff --git a/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/cli.py b/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/cli.py new file mode 100644 index 000000000..80b776de4 --- /dev/null +++ b/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/cli.py @@ -0,0 +1,65 @@ +# 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. + +import pathlib + +from ament_index_python import get_package_share_directory + +from rosidl_cli.command.generate.extensions import GenerateCommandExtension +from rosidl_cli.command.helpers import legacy_generator_arguments_file +from rosidl_cli.command.translate.api import translate + +from rosidl_typesupport_introspection_cpp import generate_cpp + + +class GenerateIntrospectionCppTypesupport(GenerateCommandExtension): + + def generate( + self, + package_name, + interface_files, + include_paths, + output_path + ): + package_share_path = pathlib.Path( + get_package_share_directory('rosidl_typesupport_introspection_cpp')) + + templates_path = package_share_path / 'resource' + + # Normalize interface definition format to .idl + idl_interface_files = [] + non_idl_interface_files = [] + for path in interface_files: + if not path.endswith('.idl'): + non_idl_interface_files.append(path) + else: + idl_interface_files.append(path) + if non_idl_interface_files: + idl_interface_files.extend(translate( + package_name=package_name, + interface_files=non_idl_interface_files, + include_paths=include_paths, + output_format='idl', + output_path=output_path / 'tmp', + )) + + # Generate typesupport code + with legacy_generator_arguments_file( + package_name=package_name, + interface_files=idl_interface_files, + include_paths=include_paths, + templates_path=templates_path, + output_path=output_path + ) as path_to_arguments_file: + return generate_cpp(path_to_arguments_file) diff --git a/rosidl_typesupport_introspection_cpp/setup.cfg b/rosidl_typesupport_introspection_cpp/setup.cfg new file mode 100644 index 000000000..5bdf83d00 --- /dev/null +++ b/rosidl_typesupport_introspection_cpp/setup.cfg @@ -0,0 +1,3 @@ +[options.entry_points] +rosidl_cli.command.generate.typesupport_extensions = + introspection_cpp = rosidl_typesupport_introspection_cpp.cli:GenerateIntrospectionCppTypesupport