summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-08-02 17:21:19 +0200
committerDylan Baker <dylan@pnwbakers.com>2025-10-14 09:35:56 -0700
commitdfbb1ab78186de259ce759b91d4061b8a246f2b1 (patch)
treeeae0b9d0859d2fa47e8ada15e3d02dbf2d8f746e /mesonbuild/interpreter
parentc97970a3c476df05984f171fae74b21fb07a7428 (diff)
downloadmeson-dfbb1ab78186de259ce759b91d4061b8a246f2b1.tar.gz
cargo: load a toplevel Cargo.lock
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/interpreter.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index b8c1f8298..631890d0f 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -314,6 +314,18 @@ class Interpreter(InterpreterBase, HoldableObject):
def __getnewargs_ex__(self) -> T.Tuple[T.Tuple[object], T.Dict[str, object]]:
raise MesonBugException('This class is unpicklable')
+ def load_root_cargo_lock_file(self) -> None:
+ cargo_lock_filename = os.path.join(self.subdir, 'Cargo.lock')
+ cargo_lock = os.path.join(self.source_root, cargo_lock_filename)
+ if not os.path.isfile(cargo_lock):
+ return
+ from .. import cargo
+ try:
+ self.cargo = cargo.Interpreter(self.environment, self.subdir, self.subproject_dir)
+ except cargo.TomlImplementationMissing as e:
+ # error delayed to actual usage of a Cargo subproject
+ mlog.warning(f'cannot load Cargo.lock: {e}', fatal=False)
+
def _redetect_machines(self) -> None:
# Re-initialize machine descriptions. We can do a better job now because we
# have the compilers needed to gain more knowledge, so wipe out old
@@ -1286,6 +1298,9 @@ class Interpreter(InterpreterBase, HoldableObject):
assert self.environment.wrap_resolver is not None, 'for mypy'
self.environment.wrap_resolver.load_and_merge(subprojects_dir, self.subproject)
+ if self.cargo is None:
+ self.load_root_cargo_lock_file()
+
self.build.projects[self.subproject] = proj_name
mlog.log('Project name:', mlog.bold(proj_name))
mlog.log('Project version:', mlog.bold(self.project_version))