Exemple #1
0
    def generate(self, package_name, interface_files, include_paths,
                 output_path):
        package_share_path = \
            pathlib.Path(get_package_share_directory('rosidl_generator_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 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)
Exemple #2
0
    def generate(self, package_name, interface_files, include_paths,
                 output_path):
        generated_files = []

        package_share_path = \
            get_package_share_directory('rosidl_typesupport_c')

        templates_path = os.path.join(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 visibility control file
        visibility_control_file_template_path = \
            'rosidl_typesupport_c__visibility_control.h.in'
        visibility_control_file_template_path = \
            templates_path / visibility_control_file_template_path
        visibility_control_file_path = \
            'rosidl_typesupport_c__visibility_control.h'
        visibility_control_file_path = \
            output_path / 'msg' / visibility_control_file_path

        generate_visibility_control_file(
            package_name=package_name,
            template_path=visibility_control_file_template_path,
            output_path=visibility_control_file_path)
        generated_files.append(visibility_control_file_path)

        # Generate typesupport code
        typesupport_implementations = list(
            get_resources('rosidl_typesupport_c'))

        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:
            generated_files.extend(
                generate_c(path_to_arguments_file,
                           typesupport_implementations))

        return generated_files
Exemple #3
0
    def generate(self, package_name, interface_files, include_paths,
                 output_path):
        generated_files = []

        package_share_path = \
            pathlib.Path(get_package_share_directory('rosidl_generator_c'))
        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 visibility control file
        visibility_control_file_template_path = \
            templates_path / 'rosidl_generator_c__visibility_control.h.in'
        visibility_control_file_path = \
            output_path / 'msg' / 'rosidl_generator_c__visibility_control.h'

        generate_visibility_control_file(
            package_name=package_name,
            template_path=visibility_control_file_template_path,
            output_path=visibility_control_file_path)
        generated_files.append(visibility_control_file_path)

        # Generate 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:
            generated_files.extend(generate_c(path_to_arguments_file))

        return generated_files
Exemple #4
0
def test_legacy_generator_arguments_file(current_path):
    with legacy_generator_arguments_file(
            package_name='foo',
            interface_files=['msg/Foo.idl'],
            include_paths=['test_files/bar'],
            templates_path='templates',
            output_path='tmp',
    ) as path:
        with open(path, 'r') as fd:
            args = json.load(fd)
        assert args['package_name'] == 'foo'
        assert args['output_dir'] == str(current_path / 'tmp')
        assert args['template_dir'] == str(current_path / 'templates')
        assert args['idl_tuples'] == [f'{current_path}:msg/Foo.idl']
        path_to_dep = pathlib.Path('test_files/bar/msg/Bar.idl')
        assert args['ros_interface_dependencies'] == [
            'bar:' + str(current_path / path_to_dep)
        ]
    assert not pathlib.Path(path).exists()