From 187a3343c3f59d8109c17fe66ff879a02ca22763 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Tue, 11 Jun 2019 15:42:20 +0000 Subject: [PATCH] projects.py/get_modules_from_project_txt(): Support multiple sections Signed-off-by: Jan Lindemann --- scripts/projects.py | 49 +++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/scripts/projects.py b/scripts/projects.py index 2a5aca60..7350836f 100644 --- a/scripts/projects.py +++ b/scripts/projects.py @@ -84,7 +84,7 @@ class Build(object): dep_cache[prereq_type] = {} if True: - r = get_modules_from_project_txt([ cur ], 'pkg.requires.jw', + r = get_modules_from_project_txt([ cur ], ['pkg.requires.jw'], prereq_type, scope = 2, add_self=False, names_only=True) debug('prerequisites = ' + ' '.join(r)) else: # legacy from build.py @@ -465,22 +465,23 @@ def add_modules_from_project_txt(buf, visited, spec, section, key, add_self, sco if add_self: buf.append(spec) -def get_modules_from_project_txt(names, section, keys, add_self, scope, +def get_modules_from_project_txt(names, sections, keys, add_self, scope, names_only = True): if isinstance(keys, basestring): keys = [ keys ] #r = set() r = [] - for key in keys: - visited = set() - for name in names: - rr = [] - add_modules_from_project_txt_cached(rr, visited, name, section, key, add_self, scope, - names_only) - # TODO: this looks like a performance hogger - for m in rr: - if not m in r: - r.append(m) + for section in sections: + for key in keys: + visited = set() + for name in names: + rr = [] + add_modules_from_project_txt_cached(rr, visited, name, section, key, add_self, scope, + names_only) + # TODO: this looks like a performance hogger + for m in rr: + if not m in r: + r.append(m) return r def pkg_relations(rel_type, args_): @@ -562,7 +563,7 @@ def pkg_relations(rel_type, args_): print(args.delimiter.join(r)) def get_libname(names): - vals = get_modules_from_project_txt(names, 'build', 'libname', + vals = get_modules_from_project_txt(names, ['build'], 'libname', scope = 1, add_self=False, names_only=True) if not vals: return ' '.join(names) @@ -572,7 +573,7 @@ def get_libname(names): def is_excluded_from_build(module): debug("checking if module " + module + " is excluded from build") - exclude = get_modules_from_project_txt([ module ], 'build', 'exclude', + exclude = get_modules_from_project_txt([ module ], ['build'], 'exclude', scope = 1, add_self=False, names_only=True) cascade = os_cascade() + [ 'all' ] for p1 in exclude: @@ -583,7 +584,7 @@ def is_excluded_from_build(module): # -L needs to contain more paths than libs linked with -l would require def get_ldpathflags(names, exclude = []): - deps = get_modules_from_project_txt(names, 'pkg.requires.jw', 'build', + deps = get_modules_from_project_txt(names, ['pkg.requires.jw'], 'build', scope = 2, add_self=True, names_only=True) r = '' for m in deps: @@ -596,7 +597,7 @@ def get_ldpathflags(names, exclude = []): def get_ldflags(names, exclude = [], add_self_ = False): #print(names) - deps = get_modules_from_project_txt(names, 'pkg.requires.jw', 'build', + deps = get_modules_from_project_txt(names, ['pkg.requires.jw'], 'build', scope = 1, add_self=add_self_, names_only=True) debug("deps = " + ' '.join(deps)) #print(deps) @@ -648,7 +649,7 @@ def cmd_ldlibpath(args_): parser = argparse.ArgumentParser(description='ldlibpath') parser.add_argument('module', nargs='*', help='Modules') args=parser.parse_args(args_) - deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', [ 'run', 'build', 'devel' ], + deps = get_modules_from_project_txt(args.module, ['pkg.requires.jw'], [ 'run', 'build', 'devel' ], scope = 2, add_self=True, names_only=True) r = '' for m in deps: @@ -659,7 +660,7 @@ def cmd_pythonpath(args_): parser = argparse.ArgumentParser(description='pythonpath') parser.add_argument('module', nargs='*', help='Modules') args=parser.parse_args(args_) - deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', [ 'run', 'build' ], + deps = get_modules_from_project_txt(args.module, ['pkg.requires.jw'], [ 'run', 'build' ], scope = 2, add_self=True, names_only=True) r = '' for m in deps: @@ -674,7 +675,7 @@ def cmd_exepath(args_): parser = argparse.ArgumentParser(description='exepath') parser.add_argument('module', nargs='*', help='Modules') args=parser.parse_args(args_) - deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', [ 'run', 'build', 'devel' ], + deps = get_modules_from_project_txt(args.module, ['pkg.requires.jw'], [ 'run', 'build', 'devel' ], scope = 2, add_self=True, names_only=True) debug('deps = ', deps) r = '' @@ -701,7 +702,7 @@ def cmd_cflags(args_): parser = argparse.ArgumentParser(description='cflags') parser.add_argument('module', nargs='*', help='Modules') args=parser.parse_args(args_) - deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', 'build', + deps = get_modules_from_project_txt(args.module, ['pkg.requires.jw'], 'build', scope = 2, add_self=True, names_only=True) r = '' for m in reversed(deps): @@ -712,7 +713,7 @@ def cmd_path(args_): parser = argparse.ArgumentParser(description='path') parser.add_argument('module', nargs='*', help='Modules') args=parser.parse_args(args_) - deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', 'run', + deps = get_modules_from_project_txt(args.module, ['pkg.requires.jw'], 'run', scope = 2, add_self=True, names_only=True) r = '' for m in deps: @@ -725,7 +726,7 @@ def cmd_prereq(args_): parser.add_argument('flavour', help='Flavour') parser.add_argument('module', nargs='*', help='Modules') args = parser.parse_args(args_) - deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', + deps = get_modules_from_project_txt(args.module, ['pkg.requires.jw'], args.flavour, scope = 2, add_self=False, names_only=True) print(' '.join(deps)) @@ -740,7 +741,7 @@ def cmd_required_os_pkg(args_): modules = args.module flavours = args.flavours.split() debug("flavours = " + args.flavours) - deps = get_modules_from_project_txt(modules, 'pkg.requires.jw', flavours, + deps = get_modules_from_project_txt(modules, ['pkg.requires.jw'], flavours, scope = 2, add_self=True, names_only=True) if args.skip_excluded: for d in deps: @@ -811,7 +812,7 @@ def read_dep_graph(modules, section, graph): for m in modules: if m in graph: continue - deps = get_modules_from_project_txt([ m ], 'pkg.requires.jw', section, + deps = get_modules_from_project_txt([ m ], ['pkg.requires.jw'], section, scope = 1, add_self=False, names_only=True) if not deps is None: graph[m] = deps