diff options
-rw-r--r-- | mesonbuild/mdist.py | 6 | ||||
-rw-r--r-- | mesonbuild/wrap/wrap.py | 32 |
2 files changed, 23 insertions, 15 deletions
diff --git a/mesonbuild/mdist.py b/mesonbuild/mdist.py index 5a61a6a..3cfb39a 100644 --- a/mesonbuild/mdist.py +++ b/mesonbuild/mdist.py @@ -24,6 +24,7 @@ from glob import glob from pathlib import Path from mesonbuild.environment import detect_ninja from mesonbuild.mesonlib import windows_proof_rmtree, MesonException +from mesonbuild.wrap import wrap from mesonbuild import mlog, build archive_choices = ['gztar', 'xztar', 'zip'] @@ -237,7 +238,10 @@ def run(options): subprojects = [] extra_meson_args = [] if options.include_subprojects: - subprojects = [os.path.join(b.subproject_dir, sub) for sub in b.subprojects] + subproject_dir = os.path.join(src_root, b.subproject_dir) + for sub in b.subprojects: + _, directory = wrap.get_directory(subproject_dir, sub) + subprojects.append(os.path.join(b.subproject_dir, directory)) extra_meson_args.append('-Dwrap_mode=nodownload') if is_git(src_root): diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 21dab16..3ea1f1e 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -125,6 +125,23 @@ class PackageDefinition: def has_patch(self) -> bool: return 'patch_url' in self.values +def load_wrap(subdir_root: str, packagename: str) -> PackageDefinition: + fname = os.path.join(subdir_root, packagename + '.wrap') + if os.path.isfile(fname): + return PackageDefinition(fname) + return None + +def get_directory(subdir_root: str, packagename: str): + directory = packagename + # We always have to load the wrap file, if it exists, because it could + # override the default directory name. + wrap = load_wrap(subdir_root, packagename) + if wrap and 'directory' in wrap.values: + directory = wrap.get('directory') + if os.path.dirname(directory): + raise WrapException('Directory key must be a name and not a path') + return wrap, directory + class Resolver: def __init__(self, subdir_root: str, wrap_mode=WrapMode.default): self.wrap_mode = wrap_mode @@ -133,14 +150,7 @@ class Resolver: def resolve(self, packagename: str, method: str) -> str: self.packagename = packagename - self.directory = packagename - # We always have to load the wrap file, if it exists, because it could - # override the default directory name. - self.wrap = self.load_wrap() - if self.wrap and 'directory' in self.wrap.values: - self.directory = self.wrap.get('directory') - if os.path.dirname(self.directory): - raise WrapException('Directory key must be a name and not a path') + self.wrap, self.directory = get_directory(self.subdir_root, self.packagename) self.dirname = os.path.join(self.subdir_root, self.directory) meson_file = os.path.join(self.dirname, 'meson.build') cmake_file = os.path.join(self.dirname, 'CMakeLists.txt') @@ -187,12 +197,6 @@ class Resolver: return self.directory - def load_wrap(self) -> PackageDefinition: - fname = os.path.join(self.subdir_root, self.packagename + '.wrap') - if os.path.isfile(fname): - return PackageDefinition(fname) - return None - def check_can_download(self) -> None: # Don't download subproject data based on wrap file if requested. # Git submodules are ok (see above)! |