aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/mdist.py6
-rw-r--r--mesonbuild/wrap/wrap.py32
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)!