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.
pull/12936/head
Alyssa Ross 9 months ago committed by Xavier Claessens
parent 0dc2499b2a
commit e9ee63ed03
  1. 5
      mesonbuild/cargo/interpreter.py
  2. 1
      test cases/rust/22 cargo subproject/subprojects/foo-rs/Cargo.toml
  3. 0
      test cases/rust/22 cargo subproject/subprojects/foo-rs/lib.rs

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

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

Loading…
Cancel
Save