From ecaae5d94db4d13ba54b5cec62cbaa1ec9a285d1 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Tue, 27 Feb 2024 23:24:28 +0100 Subject: [PATCH] cargo: support lib.path in Cargo.toml Cargo implements this configuration option to override the entry point of the library. To get test coverage, I've modified one of the two Cargo subprojects in the test to use a non-default library entrypoint. The other still uses the default. --- mesonbuild/cargo/interpreter.py | 5 +++-- .../rust/22 cargo subproject/subprojects/foo-rs/Cargo.toml | 1 + .../22 cargo subproject/subprojects/foo-rs/{src => }/lib.rs | 0 3 files changed, 4 insertions(+), 2 deletions(-) rename test cases/rust/22 cargo subproject/subprojects/foo-rs/{src => }/lib.rs (100%) diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index 2797f9fe074e..3cbc453ef73c 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -206,6 +206,7 @@ class Library(BuildTarget): doctest: bool = True doc: bool = True + path: str = os.path.join('src', 'lib.rs') proc_macro: bool = False crate_type: T.List[manifest.CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['lib']) doc_scrape_examples: bool = True @@ -606,7 +607,7 @@ def _create_lib(cargo: Manifest, build: builder.Builder, crate_type: manifest.CR posargs: T.List[mparser.BaseNode] = [ build.string(fixup_meson_varname(cargo.package.name)), - build.string(os.path.join('src', 'lib.rs')), + build.string(cargo.lib.path), ] kwargs: T.Dict[str, mparser.BaseNode] = { @@ -696,7 +697,7 @@ def interpret(subp_name: str, subdir: str, env: Environment) -> T.Tuple[mparser. # Libs are always auto-discovered and there's no other way to handle them, # which is unfortunate for reproducability - if os.path.exists(os.path.join(env.source_dir, cargo.subdir, cargo.path, 'src', 'lib.rs')): + if os.path.exists(os.path.join(env.source_dir, cargo.subdir, cargo.path, cargo.lib.path)): for crate_type in cargo.lib.crate_type: ast.extend(_create_lib(cargo, build, crate_type)) diff --git a/test cases/rust/22 cargo subproject/subprojects/foo-rs/Cargo.toml b/test cases/rust/22 cargo subproject/subprojects/foo-rs/Cargo.toml index 796548d63f2a..0f0225d06cc9 100644 --- a/test cases/rust/22 cargo subproject/subprojects/foo-rs/Cargo.toml +++ b/test cases/rust/22 cargo subproject/subprojects/foo-rs/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [lib] crate-type = ["cdylib"] +path = "lib.rs" # This dependency does not exist, verify optional works. [dependencies.notfound] diff --git a/test cases/rust/22 cargo subproject/subprojects/foo-rs/src/lib.rs b/test cases/rust/22 cargo subproject/subprojects/foo-rs/lib.rs similarity index 100% rename from test cases/rust/22 cargo subproject/subprojects/foo-rs/src/lib.rs rename to test cases/rust/22 cargo subproject/subprojects/foo-rs/lib.rs