summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Wrap-dependency-system-manual.md11
-rw-r--r--mesonbuild/cargo/interpreter.py14
-rw-r--r--test cases/rust/22 cargo subproject/meson.build2
-rw-r--r--test cases/rust/22 cargo subproject/subprojects/foo-0-rs.wrap3
4 files changed, 19 insertions, 11 deletions
diff --git a/docs/markdown/Wrap-dependency-system-manual.md b/docs/markdown/Wrap-dependency-system-manual.md
index 73358e7cf..302546ebb 100644
--- a/docs/markdown/Wrap-dependency-system-manual.md
+++ b/docs/markdown/Wrap-dependency-system-manual.md
@@ -322,8 +322,8 @@ foo-bar-1.0 = foo_bar_dep
**Note**: This is experimental and has no backwards or forwards compatibility guarantees.
See [Meson's rules on mixing build systems](Mixing-build-systems.md).
-Cargo subprojects automatically override the `<package_name>-<version>-rs` dependency
-name:
+Cargo subprojects automatically call `override_dependency` with the name
+`<package_name>-<version>-<suffix>`, where every part is defeined as follows:
- `package_name` is defined in `[package] name = ...` section of the `Cargo.toml`.
- `version` is the API version deduced from `[package] version = ...` as follow:
* `x.y.z` -> 'x'
@@ -331,9 +331,10 @@ name:
* `0.0.x` -> '0'
It allows to make different dependencies for incompatible versions of the same
crate.
-- `-rs` suffix is added to distinguish from regular system dependencies, for
- example `gstreamer-1.0` is a system pkg-config dependency and `gstreamer-0.22-rs`
- is a Cargo dependency.
+- the suffix is `-rs` for `rlib` and `dylib` crate types, otherwise it is the
+ crate type (e.g. `staticlib` or `cdylib`). The suffix is added to distinguish
+ Rust crates from regular system dependencies; for example `gstreamer-1.0` is a
+ system pkg-config dependency and `gstreamer-0.22-rs` is a Cargo dependency.
That means the `.wrap` file should have `dependency_names = foo-1-rs` in their
`[provide]` section when `Cargo.toml` has package name `foo` and version `1.2`.
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py
index a5d703e4e..4e305c979 100644
--- a/mesonbuild/cargo/interpreter.py
+++ b/mesonbuild/cargo/interpreter.py
@@ -441,9 +441,9 @@ def _version_to_api(version: str) -> str:
return '0'
-def _dependency_name(package_name: str, api: str) -> str:
- basename = package_name[:-3] if package_name.endswith('-rs') else package_name
- return f'{basename}-{api}-rs'
+def _dependency_name(package_name: str, api: str, suffix: str = '-rs') -> str:
+ basename = package_name[:-len(suffix)] if package_name.endswith(suffix) else package_name
+ return f'{basename}-{api}{suffix}'
def _dependency_varname(package_name: str) -> str:
@@ -805,6 +805,9 @@ class Interpreter:
'rust_args': build.array(rust_args),
}
+ depname_suffix = '-rs' if crate_type in {'lib', 'rlib', 'proc-macro'} else f'-{crate_type}'
+ depname = _dependency_name(pkg.manifest.package.name, pkg.manifest.package.api, depname_suffix)
+
lib: mparser.BaseNode
if pkg.manifest.lib.proc_macro or crate_type == 'proc-macro':
lib = build.method('proc_macro', build.identifier('rust'), posargs, kwargs)
@@ -837,7 +840,8 @@ class Interpreter:
'link_with': build.identifier('lib'),
'variables': build.dict({
build.string('features'): build.string(','.join(pkg.features)),
- })
+ }),
+ 'version': build.string(pkg.manifest.package.version),
},
),
'dep'
@@ -846,7 +850,7 @@ class Interpreter:
'override_dependency',
build.identifier('meson'),
[
- build.string(_dependency_name(pkg.manifest.package.name, pkg.manifest.package.api)),
+ build.string(depname),
build.identifier('dep'),
],
),
diff --git a/test cases/rust/22 cargo subproject/meson.build b/test cases/rust/22 cargo subproject/meson.build
index 1b60014c5..7e2c66288 100644
--- a/test cases/rust/22 cargo subproject/meson.build
+++ b/test cases/rust/22 cargo subproject/meson.build
@@ -1,6 +1,6 @@
project('cargo subproject', 'c')
-foo_dep = dependency('foo-0-rs')
+foo_dep = dependency('foo-0-cdylib')
exe = executable('app', 'main.c',
dependencies: foo_dep,
)
diff --git a/test cases/rust/22 cargo subproject/subprojects/foo-0-rs.wrap b/test cases/rust/22 cargo subproject/subprojects/foo-0-rs.wrap
index 99686e90e..d12172bf3 100644
--- a/test cases/rust/22 cargo subproject/subprojects/foo-0-rs.wrap
+++ b/test cases/rust/22 cargo subproject/subprojects/foo-0-rs.wrap
@@ -1,2 +1,5 @@
[wrap-file]
method = cargo
+
+[provide]
+dependency_names = foo-0-cdylib