Skip to content

Commit 16d2ff3

Browse files
authored
Generate Cargo.toml of message crate with an EmPy template, not CMake (#138)
* Generate Cargo.toml of message crate with an EmPy template, not CMake * Add comment
1 parent 6d11125 commit 16d2ff3

File tree

4 files changed

+43
-30
lines changed

4 files changed

+43
-30
lines changed

rosidl_generator_rs/cmake/rosidl_generator_rs_generate_interfaces.cmake

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ endforeach()
6767

6868
list(APPEND _generated_common_rs_files
6969
"${_output_path}/rust/src/lib.rs"
70+
"${_output_path}/rust/Cargo.toml"
7071
)
7172

7273
if(${_has_msg})
@@ -132,14 +133,6 @@ file(MAKE_DIRECTORY "${_output_path}")
132133

133134
set(_target_suffix "__rs")
134135

135-
set(CRATES_DEPENDENCIES "rosidl_runtime_rs = \"*\"")
136-
set(SERDE_FEATURES "[\"dep:serde\", \"rosidl_runtime_rs/serde\"")
137-
foreach(_pkg_name ${rosidl_generate_interfaces_DEPENDENCY_PACKAGE_NAMES})
138-
find_package(${_pkg_name} REQUIRED)
139-
set(CRATES_DEPENDENCIES "${CRATES_DEPENDENCIES}\n${_pkg_name} = \"*\"")
140-
set(SERDE_FEATURES "${SERDE_FEATURES}, \"${_pkg_name}/serde\"")
141-
endforeach()
142-
set(SERDE_FEATURES "${SERDE_FEATURES}]")
143136
ament_index_register_resource("rust_packages")
144137

145138

@@ -173,15 +166,6 @@ foreach(_typesupport_impl ${_typesupport_impls})
173166
endif()
174167
endforeach()
175168

176-
configure_file("${rosidl_generator_rs_TEMPLATE_DIR}/Cargo.toml.in"
177-
"share/${PROJECT_NAME}/rust/Cargo.toml"
178-
@ONLY)
179-
180-
install(
181-
FILES "${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/rust/Cargo.toml"
182-
DESTINATION share/${PROJECT_NAME}/rust/
183-
)
184-
185169
if(BUILD_TESTING AND rosidl_generate_interfaces_ADD_LINTER_TESTS)
186170
if(
187171
NOT _generated_msg_rs_files STREQUAL "" OR
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[package]
2+
name = "@(package_name)"
3+
@# The version should ideally be taken from package.xml, see
4+
@# https://github.com/ros2-rust/ros2_rust/issues/116
5+
version = "0.2.0"
6+
edition = "2021"
7+
8+
[dependencies]
9+
libc = "0.2"
10+
rosidl_runtime_rs = "*"
11+
serde = { version = "1", optional = true, features = ["derive"] }
12+
@[for dep in dependency_packages]@
13+
@(dep) = "*"
14+
@[end for]@
15+
16+
[features]
17+
@{
18+
serde_features = ["dep:serde", "rosidl_runtime_rs/serde"]
19+
for dep in dependency_packages:
20+
serde_features.append("{}/serde".format(dep))
21+
}@
22+
serde = @(serde_features)

rosidl_generator_rs/resource/Cargo.toml.in

Lines changed: 0 additions & 12 deletions
This file was deleted.

rosidl_generator_rs/rosidl_generator_rs/__init__.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,16 @@ def generate_rs(generator_arguments_file, typesupport_impls):
5959
# expand init modules for each directory
6060
modules = {}
6161
idl_content = IdlContent()
62-
(Path(args['output_dir']) / 'rust/src/bindings').mkdir(parents=True, exist_ok=True)
62+
dependency_packages = set()
63+
64+
(Path(args['output_dir']) / 'rust/src').mkdir(parents=True, exist_ok=True)
65+
66+
for dep_tuple in args.get('ros_interface_dependencies', []):
67+
dep_parts = dep_tuple.rsplit(':', 1)
68+
assert len(dep_parts) == 2
69+
if dep_parts[0] != package_name:
70+
dependency_packages.add(dep_parts[0])
71+
6372
for idl_tuple in args.get('idl_tuples', []):
6473
idl_parts = idl_tuple.rsplit(':', 1)
6574
assert len(idl_parts) == 2
@@ -145,6 +154,16 @@ def generate_rs(generator_arguments_file, typesupport_impls):
145154
os.path.join(args['output_dir'], 'rust/src/lib.rs'),
146155
minimum_timestamp=latest_target_timestamp)
147156

157+
cargo_toml_data = {
158+
'dependency_packages': dependency_packages,
159+
'package_name': args['package_name'],
160+
}
161+
expand_template(
162+
os.path.join(template_dir, 'Cargo.toml.em'),
163+
cargo_toml_data,
164+
os.path.join(args['output_dir'], 'rust/Cargo.toml'),
165+
minimum_timestamp=latest_target_timestamp)
166+
148167
return 0
149168

150169
def get_rs_name(name):

0 commit comments

Comments
 (0)