Skip to content

Commit 364f852

Browse files
authored
Extract target-specific dependencies as well (#57)
It appears that cargo will look for target-specific dependencies even when the dependencies do not apply to the current platform. This saves us the trouble of parsing the `cfg()` logic.
1 parent 745866c commit 364f852

3 files changed

Lines changed: 23 additions & 3 deletions

File tree

colcon_cargo/package_augmentation/cargo.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ def _augment_package(
4848
for k, v in dependencies.items():
4949
metadata.dependencies[k] |= v
5050

51+
for category, spec in content.get('target', {}).items():
52+
dependencies = extract_dependencies(spec, metadata.path)
53+
for k, v in dependencies.items():
54+
metadata.dependencies[k] |= v
55+
5156
authors = package.get('authors', ())
5257
if authors:
5358
metadata.metadata.setdefault('maintainers', [])

test/rust-sample-package/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ edition = "2018"
88

99
[dependencies]
1010
local-rust-pure-library = {package = "rust-pure-library", path = "../rust-pure-library"}
11+
12+
[target.'cfg(windows)'.dependencies]
13+
windows-sys = "0.59"

test/test_build.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def test_package_identification():
4747
def test_package_augmentation():
4848
cpi = CargoPackageIdentification()
4949
aug = CargoPackageAugmentation()
50+
5051
desc = PackageDescriptor(pure_library_path)
5152
cpi.identify(desc)
5253
aug.augment_package(desc)
@@ -58,6 +59,15 @@ def test_package_augmentation():
5859
assert 'either' in desc.dependencies['build']
5960
assert desc.dependencies['run'] == desc.dependencies['build']
6061

62+
desc = PackageDescriptor(test_project_path)
63+
cpi.identify(desc)
64+
aug.augment_package(desc)
65+
print(desc)
66+
assert len(desc.dependencies['build']) == 2
67+
assert PURE_LIBRARY_PACKAGE_NAME in desc.dependencies['build']
68+
assert 'windows-sys' in desc.dependencies['build']
69+
assert desc.dependencies['run'] == desc.dependencies['build']
70+
6171

6272
# Ported from Python 3.13 implementation
6373
# Remove when migrating to Python 3.13 and above
@@ -87,9 +97,11 @@ def test_path_dependencies():
8797
desc = PackageDescriptor(test_project_path)
8898
cpi.identify(desc)
8999
aug.augment_package(desc)
90-
assert PURE_LIBRARY_PACKAGE_NAME in desc.dependencies['build']
91-
assert len(desc.dependencies['build']) == 1
92-
dep = desc.dependencies['build'].pop()
100+
for dep in desc.dependencies['build']:
101+
if dep.name == PURE_LIBRARY_PACKAGE_NAME:
102+
break
103+
else:
104+
assert False, f'{PURE_LIBRARY_PACKAGE_NAME} not in build deps'
93105
assert 'cargo_source' in dep.metadata
94106
assert dep.metadata['cargo_source'] is not None
95107
# Path.from_uri was only added in Python 3.13

0 commit comments

Comments
 (0)