summaryrefslogtreecommitdiff
path: root/mesonbuild/wrap/wrap.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2024-03-07 12:23:13 -0500
committerXavier Claessens <xclaesse@gmail.com>2024-06-14 15:59:42 -0400
commit9b8378985dbdc0112d11893dd42b33b7bc8d1e62 (patch)
tree30562084d1742491af1b044d5234ceddfe0daffa /mesonbuild/wrap/wrap.py
parentc0de2e12645b621793c62d4e2da17dc9541946f8 (diff)
downloadmeson-9b8378985dbdc0112d11893dd42b33b7bc8d1e62.tar.gz
cargo: Load Cargo.lock
Cargo.lock is essentially identical to subprojects/*.wrap files. When a (sub)project has a Cargo.lock file this allows automatic fallback for its cargo dependencies.
Diffstat (limited to 'mesonbuild/wrap/wrap.py')
-rw-r--r--mesonbuild/wrap/wrap.py45
1 files changed, 26 insertions, 19 deletions
diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py
index 96b0ef35c..4e98c600c 100644
--- a/mesonbuild/wrap/wrap.py
+++ b/mesonbuild/wrap/wrap.py
@@ -324,25 +324,32 @@ class Resolver:
mlog.warning(f'failed to process netrc file: {e}.', fatal=False)
def load_wraps(self) -> None:
- if not os.path.isdir(self.subdir_root):
- return
- root, dirs, files = next(os.walk(self.subdir_root))
- ignore_dirs = {'packagecache', 'packagefiles'}
- for i in files:
- if not i.endswith('.wrap'):
- continue
- fname = os.path.join(self.subdir_root, i)
- wrap = PackageDefinition.from_wrap_file(fname, self.subproject)
- self.wraps[wrap.name] = wrap
- ignore_dirs |= {wrap.directory, wrap.name}
- # Add dummy package definition for directories not associated with a wrap file.
- for i in dirs:
- if i in ignore_dirs:
- continue
- fname = os.path.join(self.subdir_root, i)
- wrap = PackageDefinition.from_directory(fname)
- self.wraps[wrap.name] = wrap
-
+ # Load Cargo.lock at the root of source tree
+ source_dir = os.path.dirname(self.subdir_root)
+ if os.path.exists(os.path.join(source_dir, 'Cargo.lock')):
+ from .. import cargo
+ for wrap in cargo.load_wraps(source_dir, self.subdir_root):
+ self.wraps[wrap.name] = wrap
+ # Load subprojects/*.wrap
+ if os.path.isdir(self.subdir_root):
+ root, dirs, files = next(os.walk(self.subdir_root))
+ for i in files:
+ if not i.endswith('.wrap'):
+ continue
+ fname = os.path.join(self.subdir_root, i)
+ wrap = PackageDefinition.from_wrap_file(fname, self.subproject)
+ self.wraps[wrap.name] = wrap
+ # Add dummy package definition for directories not associated with a wrap file.
+ ignore_dirs = {'packagecache', 'packagefiles'}
+ for wrap in self.wraps.values():
+ ignore_dirs |= {wrap.directory, wrap.name}
+ for i in dirs:
+ if i in ignore_dirs:
+ continue
+ fname = os.path.join(self.subdir_root, i)
+ wrap = PackageDefinition.from_directory(fname)
+ self.wraps[wrap.name] = wrap
+ # Add provided deps and programs into our lookup tables
for wrap in self.wraps.values():
self.add_wrap(wrap)