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 1 year 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 doctest: bool = True
doc: bool = True doc: bool = True
path: str = os.path.join('src', 'lib.rs')
proc_macro: bool = False proc_macro: bool = False
crate_type: T.List[manifest.CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['lib']) crate_type: T.List[manifest.CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['lib'])
doc_scrape_examples: bool = True 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] = [ posargs: T.List[mparser.BaseNode] = [
build.string(fixup_meson_varname(cargo.package.name)), 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] = { 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, # Libs are always auto-discovered and there's no other way to handle them,
# which is unfortunate for reproducability # 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: for crate_type in cargo.lib.crate_type:
ast.extend(_create_lib(cargo, build, crate_type)) ast.extend(_create_lib(cargo, build, crate_type))

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

Loading…
Cancel
Save