From c538447cc59293be2980b9edac8281eacfa6d00b Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sat, 6 Jun 2026 14:53:02 +0200 Subject: [PATCH 1/2] App.__get_project_refs(): Code beautification In __get_project_refs(): - Rename variable dep and deps to val and vals, respectively, because that's more what they are values of key-value pairs. In some cases that can represent dependencies, in some case other things. - Make a scope case distinction a little clearer by mentioning all possible cases in a match / case block Signed-off-by: Jan Lindemann --- src/python/jw/pkg/App.py | 43 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/python/jw/pkg/App.py b/src/python/jw/pkg/App.py index 10d4f8be..df92bc7c 100644 --- a/src/python/jw/pkg/App.py +++ b/src/python/jw/pkg/App.py @@ -188,33 +188,34 @@ class App(Base): buf.append(spec) return visited.add(spec) - deps = self.get_value(name, section, key) + vals = self.get_value(name, section, key) log( DEBUG, ( - f'name={name}, section={section}, key={key}, deps={deps}, ' + f'name={name}, section={section}, key={key}, deps={vals}, ' f'scope={scope.name}, visited={visited}' ), ) - if deps and scope != Scope.Self: - if scope == Scope.One: - subscope = Scope.Self - else: - subscope = Scope.Subtree - for dep in deps.split(','): - dep = dep.strip() - if not (len(dep)): - continue - self.__get_project_refs_cached( - buf, - visited, - dep, - section, - key, - add_self = True, - scope = subscope, - names_only = names_only, - ) + vals_list = vals.split(',') if vals else [] + match scope: + case Scope.Self: + buf += vals_list + case Scope.One | Scope.Subtree: + subscope = scope.Self if scope == Scope.One else scope + for val in vals_list: + val = val.strip() + if not (len(val)): + continue + self.__get_project_refs_cached( + buf, + visited, + val, + section, + key, + add_self = True, + scope = subscope, + names_only = names_only, + ) if add_self: buf.append(spec) -- 2.54.0 From 3f47abb29a80ce7d743200653022c3a8de045175 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sat, 6 Jun 2026 14:51:40 +0200 Subject: [PATCH 2/2] App.get_libname(): Don't use get_proj_refs() App.get_projects_refs() is a versatile tool, but what it does isn't obvious. Use the simpler method .get_value() instead for get_libname(), and return None if a project doesn't provide a linkable library. This is similar to fix aadcdfb5f. Signed-off-by: Jan Lindemann --- src/python/jw/pkg/App.py | 22 +++++++------------ src/python/jw/pkg/cmds/projects/CmdLdflags.py | 11 +++++----- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/python/jw/pkg/App.py b/src/python/jw/pkg/App.py index df92bc7c..c7775ae5 100644 --- a/src/python/jw/pkg/App.py +++ b/src/python/jw/pkg/App.py @@ -639,20 +639,14 @@ class App(Base): ret.append(m) return ret - def get_libname(self, projects) -> str: - vals = self.get_project_refs( - projects, - ['build'], - 'libname', - scope = Scope.One, - add_self = False, - names_only = True, - ) - if not vals: - return ' '.join(projects) - if 'none' in vals: - vals.remove('none') - return ' '.join(reversed(vals)) + def get_libname(self, spec: str) -> str | None: + project_name = self.strip_module_from_spec(spec) + ret = self.get_value(project_name, 'build', 'libname') + if ret == 'none': + return None + if ret is None: + return project_name + return ret def is_excluded_from_build(self, project: str) -> str | None: log(DEBUG, 'checking if project ' + project + ' is excluded from build') diff --git a/src/python/jw/pkg/cmds/projects/CmdLdflags.py b/src/python/jw/pkg/cmds/projects/CmdLdflags.py index 7d44ffac..66f7f713 100644 --- a/src/python/jw/pkg/cmds/projects/CmdLdflags.py +++ b/src/python/jw/pkg/cmds/projects/CmdLdflags.py @@ -45,8 +45,8 @@ class CmdLdflags(Cmd): # export for m in deps: if m in exclude: continue - libname = self.app.get_libname([m]) - if not len(libname): + libname = self.app.get_libname(m) + if libname is None: continue path = self.app.find_dir(m, ['/lib']) if not path: @@ -69,9 +69,10 @@ class CmdLdflags(Cmd): # export for m in reversed(deps): if m in args.exclude: continue - libname = self.app.get_libname([m]) - if len(libname): - out.append('-l' + libname) + libname = self.app.get_libname(m) + if libname is None: + continue + out.append('-l' + libname) if not out: return ldpathflags = self.__get_ldpathflags(args.module, args.exclude) -- 2.54.0