summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2018-11-23 14:55:06 -0500
committerXavier Claessens <xavier.claessens@collabora.com>2018-12-02 08:37:32 -0500
commitd655515a6b8231600f37c6db48b802e7b58e070f (patch)
treebde7ccd08478c30ca946cef09a392a11b84694fa
parentb5eac54c9e2641a486e698c7eeaf68981af55285 (diff)
downloadmeson-d655515a6b8231600f37c6db48b802e7b58e070f.tar.gz
Add 'meson subprojects download' command
-rw-r--r--mesonbuild/msubprojects.py20
1 files changed, 19 insertions, 1 deletions
diff --git a/mesonbuild/msubprojects.py b/mesonbuild/msubprojects.py
index b9a4437f2..1536d963f 100644
--- a/mesonbuild/msubprojects.py
+++ b/mesonbuild/msubprojects.py
@@ -2,7 +2,7 @@ import os, subprocess
from . import mlog
from .mesonlib import Popen_safe
-from .wrap.wrap import API_ROOT, PackageDefinition
+from .wrap.wrap import API_ROOT, PackageDefinition, Resolver, WrapException
from .wrap import wraptool
def update_wrapdb_file(wrap, repo_dir, options):
@@ -155,6 +155,18 @@ def checkout(wrap, repo_dir, options):
out = e.output.decode().strip()
mlog.log(' -> ', mlog.red(out))
+def download(wrap, repo_dir, options):
+ mlog.log('Download %s...' % wrap.name)
+ if os.path.isdir(repo_dir):
+ mlog.log(' -> Already downloaded')
+ return
+ try:
+ r = Resolver(os.path.dirname(repo_dir))
+ r.resolve(wrap.name)
+ mlog.log(' -> done')
+ except WrapException as e:
+ mlog.log(' ->', mlog.red(str(e)))
+
def add_common_arguments(p):
p.add_argument('--sourcedir', default='.',
help='Path to source directory')
@@ -179,6 +191,12 @@ def add_arguments(parser):
add_common_arguments(p)
p.set_defaults(subprojects_func=checkout)
+ p = subparsers.add_parser('download', help='Ensure subprojects are fetched, even if not in use. ' +
+ 'Already downloaded subprojects are not modified. ' +
+ 'This can be used to pre-fetch all subprojects and avoid downloads during configure.')
+ add_common_arguments(p)
+ p.set_defaults(subprojects_func=download)
+
def run(options):
src_dir = os.path.relpath(os.path.realpath(options.sourcedir))
if not os.path.isfile(os.path.join(src_dir, 'meson.build')):