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.
This commit is contained in:
Alyssa Ross 2024-02-27 23:24:28 +01:00 committed by Xavier Claessens
parent 0dc2499b2a
commit e9ee63ed03
3 changed files with 4 additions and 2 deletions

View File

@ -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))

View File

@ -5,6 +5,7 @@ edition = "2021"
[lib]
crate-type = ["cdylib"]
path = "lib.rs"
# This dependency does not exist, verify optional works.
[dependencies.notfound]