From 775795c8fa126c1d96f336d6d5a8665b6b230f53 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Wed, 7 Mar 2018 14:26:21 +0000 Subject: [PATCH] projects.py: Add support for [build.exclude] Also disable recent switch to in-memory dependency detection, because it is buggy and messes up the order Signed-off-by: Jan Lindemann --- scripts/projects.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/scripts/projects.py b/scripts/projects.py index 12aa916e..148c01f1 100644 --- a/scripts/projects.py +++ b/scripts/projects.py @@ -55,6 +55,9 @@ class ResultCache(object): class Build(object): + def __init__(self): + self.__os_cascade = os_cascade() + def find_proj_path(self, name): name=name.replace("dspider-", "") search_path=[".", "dspc/src", "dspc/src/dspcd-plugins", "dspc/src/io" ] @@ -75,10 +78,10 @@ class Build(object): else: dep_cache[prereq_type] = {} - if True: + if False: r = get_modules_from_project_txt(cur, 'pkg.requires.jw', prereq_type, scope = 2, add_self=False, names_only=True) - else: # legacy + else: # legacy from build.py projects_py="/usr/bin/python2 " + my_dir + "/projects.py --prefix " + projs_root + " " + os.getenv('PROJECTS_PY_EXTRA_ARGS', "") cmd = projects_py + " prereq " + prereq_type + " " + cur debug('running', cmd) @@ -119,7 +122,8 @@ class Build(object): tree[cur] = deps return len(deps) - def calculate_order(self, order, modules, prereq_types, all_deps): + def calculate_order(self, order, modules, prereq_types): + all_deps = Set() dep_tree = {} for m in modules: debug("--- adding dependency tree of module " + m) @@ -147,6 +151,17 @@ class Build(object): delim = delim + '-' * (delim_len - len(delim)) print(',' + delim + ' >') + + # -- check exclude + exclude = get_modules_from_project_txt([ module ], 'build', 'exclude', + scope = 1, add_self=False, names_only=True) + for p1 in exclude: + for p2 in self.__os_cascade + [ 'all' ]: + if p1 == p2: + print('| Configured to skip build on platform >' + p1 + '<') + print('`' + delim + ' <') + return + os.chdir(path) p = subprocess.Popen(make_cmd, shell=False, stdout=subprocess.PIPE, stderr=None, close_fds=True) for line in iter(p.stdout.readline, ''): @@ -176,14 +191,12 @@ class Build(object): self.run_make(m, target, cur_project, num_projects) def run(self, args_): - all_deps = Set() visited = {} glob_order = [] projs_root=pwd.getpwuid(os.getuid()).pw_dir + "/local/src/jw.dev/proj" # -- parse command line parser = argparse.ArgumentParser(description='janware software project build tool') - parser.add_argument('--base', '-b', nargs='?', default=projs_root, help='Project base directory') parser.add_argument('--exclude', default='', help='Space seperated ist of modules to be excluded from build') parser.add_argument('--debug', '-d', action='store_true', default=False, help='Output debug information to stderr') @@ -217,7 +230,7 @@ class Build(object): glob_prereq_types = [ "build", "run", "release", "devel" ] print("using prerequisite types " + ' '.join(glob_prereq_types)) - self.calculate_order(order, modules, glob_prereq_types, all_deps) + self.calculate_order(order, modules, glob_prereq_types) if args.ignore_deps: order = [m for m in order if m in args.modules] order = [m for m in order if m not in exclude]