diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-10-24 09:37:54 +0200 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2025-12-22 11:59:07 +0100 |
| commit | f87cc4da40693345103264e205463e1689c7a956 (patch) | |
| tree | 5e37048e2983a770fbb03a5449341ebafc0eec03 | |
| parent | 71e56514f07ab972375bde5f094ad7a39d996ac0 (diff) | |
| download | meson-f87cc4da40693345103264e205463e1689c7a956.tar.gz | |
modules: rust: add workspace methods returning arguments for build targets
Add rustc_args(), env(), and rust_dependency_map() methods to the
RustPackage class. They simply delegate to PackageState and
PackageConfiguration.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
7 files changed, 64 insertions, 4 deletions
diff --git a/docs/markdown/Rust-module.md b/docs/markdown/Rust-module.md index ba500e7ee..b1edb793c 100644 --- a/docs/markdown/Rust-module.md +++ b/docs/markdown/Rust-module.md @@ -312,7 +312,35 @@ all_features = pkg.all_features() Returns all defined features for a specific package or subproject. -### subproject.dependency() +### Packages only + +#### package.rust_args() + +```meson +args = pkg.rustc_args() +``` + +Returns rustc arguments for this package. + +#### package.env() + +```meson +env_vars = pkg.env() +``` + +Returns environment variables for this package. + +#### package.rust_dependency_map() + +```meson +dep_map = pkg.rust_dependency_map() +``` + +Returns rust dependency mapping for this package. + +### Subprojects only + +#### subproject.dependency() ```meson dep = subproject.dependency(...) diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py index 186774413..0ea1c8f7e 100644 --- a/mesonbuild/modules/rust.py +++ b/mesonbuild/modules/rust.py @@ -158,6 +158,9 @@ class RustCrate(ModuleObject): 'features': self.features_method, 'name': self.name_method, 'version': self.version_method, + 'rust_args': self.rust_args_method, + 'env': self.env_method, # type: ignore[dict-item] + 'rust_dependency_map': self.rust_dependency_map_method, # type: ignore[dict-item] }) @noPosargs @@ -190,6 +193,24 @@ class RustCrate(ModuleObject): """Returns chosen features for specific package.""" return sorted(list(self.package.cfg.features)) + @noPosargs + @noKwargs + def rust_args_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.List[str]: + """Returns rustc arguments for this package.""" + return self.package.get_rustc_args(state.environment, state.subdir, mesonlib.MachineChoice.HOST) + + @noPosargs + @noKwargs + def env_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.Dict[str, str]: + """Returns environment variables for this package.""" + return self.package.get_env_dict(state.environment, state.subdir) + + @noPosargs + @noKwargs + def rust_dependency_map_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.Dict[str, str]: + """Returns rust dependency mapping for this package.""" + return self.package.cfg.get_dependency_map(self.package.manifest) + class RustPackage(RustCrate): """Represents a Rust package within a workspace.""" diff --git a/test cases/rust/31 rust.workspace package/meson.build b/test cases/rust/31 rust.workspace package/meson.build index ec37a33d7..5a9b44e41 100644 --- a/test cases/rust/31 rust.workspace package/meson.build +++ b/test cases/rust/31 rust.workspace package/meson.build @@ -29,6 +29,8 @@ assert(answer_rs.features() == ['default', 'large']) e = executable('package-test', 'src/main.rs', dependencies: [hello_rs.dependency(), answer_rs.dependency()], + rust_args: main_pkg.rust_args(), + rust_dependency_map: main_pkg.rust_dependency_map(), ) test('package-test', e) diff --git a/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build index ece234f27..d78795602 100644 --- a/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build +++ b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build @@ -8,6 +8,8 @@ answer_pkg = cargo_ws.package() assert(answer_pkg.all_features() == ['default', 'large']) assert(answer_pkg.features() == ['default', 'large']) -l = static_library('answer', 'src/lib.rs', rust_args: ['--cfg', 'feature="large"']) +l = static_library('answer', 'src/lib.rs', + rust_args: answer_pkg.rust_args(), + rust_dependency_map: answer_pkg.rust_dependency_map()) dep = declare_dependency(link_with: l) meson.override_dependency('answer-2-rs', dep) diff --git a/test cases/rust/32 rust.workspace workspace/meson.build b/test cases/rust/32 rust.workspace workspace/meson.build index 7a7ddd333..f42630b3d 100644 --- a/test cases/rust/32 rust.workspace workspace/meson.build +++ b/test cases/rust/32 rust.workspace workspace/meson.build @@ -31,6 +31,8 @@ subdir('more') e = executable('workspace-test', 'src/main.rs', dependencies: [hello_rs.dependency(), answer_rs.dependency(), more_dep], + rust_args: main_pkg.rust_args(), + rust_dependency_map: main_pkg.rust_dependency_map(), ) test('workspace-test', e) diff --git a/test cases/rust/32 rust.workspace workspace/more/meson.build b/test cases/rust/32 rust.workspace workspace/more/meson.build index 1c57b1e5b..d7317a268 100644 --- a/test cases/rust/32 rust.workspace workspace/more/meson.build +++ b/test cases/rust/32 rust.workspace workspace/more/meson.build @@ -4,5 +4,8 @@ assert(more_pkg.name() == 'more') assert(more_pkg.features() == ['default']) assert(more_pkg.all_features() == ['default']) -l = static_library('more', 'src/lib.rs') +l = static_library('more', 'src/lib.rs', + rust_args: more_pkg.rust_args(), + rust_dependency_map: more_pkg.rust_dependency_map(), +) more_dep = declare_dependency(link_with: l) diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build index ece234f27..d78795602 100644 --- a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build +++ b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build @@ -8,6 +8,8 @@ answer_pkg = cargo_ws.package() assert(answer_pkg.all_features() == ['default', 'large']) assert(answer_pkg.features() == ['default', 'large']) -l = static_library('answer', 'src/lib.rs', rust_args: ['--cfg', 'feature="large"']) +l = static_library('answer', 'src/lib.rs', + rust_args: answer_pkg.rust_args(), + rust_dependency_map: answer_pkg.rust_dependency_map()) dep = declare_dependency(link_with: l) meson.override_dependency('answer-2-rs', dep) |
