From 2bbf5bd8e7e7ba2f9bb3522f29132275edf8ba51 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Thu, 29 Jan 2026 10:43:14 +0100 Subject: [PATCH] jw.pkg.cmds.projects.CmdRequiredOsPkg: Support --quote --quote puts double quotation marks around the listed dependencies, protecting version requirements (>= 1.0) and parenthesis "perl(GD)" from the shell. Signed-off-by: Jan Lindemann --- make/projects-dir.mk | 10 +++++----- make/topdir.mk | 6 +++--- src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py | 4 ++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/make/projects-dir.mk b/make/projects-dir.mk index 926c0d0e..3ec41a43 100644 --- a/make/projects-dir.mk +++ b/make/projects-dir.mk @@ -183,13 +183,13 @@ build-order-%: $(filter-out $(UNAVAILABLE_TARGETS),pull.done) build-order: build-order-all echo-build-deps: - $(Q)$(JW_PKG_PY_PROJECTS) required-os-pkg --skip-excluded --flavours "build" $(TARGET_PROJECTS) + $(Q)$(JW_PKG_PY_PROJECTS) required-os-pkg --quote --skip-excluded --flavours "build" $(TARGET_PROJECTS) echo-install-deps: - $(Q)$(JW_PKG_PY_PROJECTS) required-os-pkg --skip-excluded --flavours "build run" $(TARGET_PROJECTS) + $(Q)$(JW_PKG_PY_PROJECTS) required-os-pkg --quote --skip-excluded --flavours "build run" $(TARGET_PROJECTS) echo-release-deps: - $(Q)$(JW_PKG_PY_PROJECTS) required-os-pkg --skip-excluded --flavours "build run release" $(TARGET_PROJECTS) + $(Q)$(JW_PKG_PY_PROJECTS) required-os-pkg --quote --skip-excluded --flavours "build run release" $(TARGET_PROJECTS) echo-os: $(Q)$(GET_OS_SH) @@ -241,10 +241,10 @@ pkg-manager-refresh: $(PKG_MANAGER) refresh pkg-install-build-deps: - $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(JW_PKG_PY_PROJECTS) required-os-pkg --skip-excluded --flavours build $(TARGET_PROJECTS)) + $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(JW_PKG_PY_PROJECTS) required-os-pkg --quote --skip-excluded --flavours build $(TARGET_PROJECTS)) pkg-install-release-deps: - $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(JW_PKG_PY_PROJECTS) required-os-pkg --skip-excluded --flavours 'build run release' $(TARGET_PROJECTS)) + $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(JW_PKG_PY_PROJECTS) required-os-pkg --quote --skip-excluded --flavours 'build run release' $(TARGET_PROJECTS)) pkg-release-reinstall: $(PREREQ_RELEASE) diff --git a/make/topdir.mk b/make/topdir.mk index 58a18c98..34707301 100644 --- a/make/topdir.mk +++ b/make/topdir.mk @@ -190,7 +190,7 @@ prefix.done: touch $@ echo-build-deps: - $(Q)echo $(call proj_query, required-os-pkg --flavours "build" $(PROJECT)) + $(Q)echo $(call proj_query, required-os-pkg --quote --flavours "build" $(PROJECT)) git-ssh-%: bash -c "`git remote get-url --push $* | sed 's|ssh://||; s|\([^/]\+\)/\(.*\)|LC_CDPATH=/\2 ssh -o SendEnv=LC_CDPATH \1|'`" @@ -213,10 +213,10 @@ pkg-manager-refresh: $(PKG_MANAGER) refresh pkg-install-build-deps: - $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) required-os-pkg --skip-excluded --flavours "build" $(PROJECT)) + $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) required-os-pkg --quote --skip-excluded --flavours "build" $(PROJECT)) pkg-install-release-deps: - $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) required-os-pkg --skip-excluded --flavours "build run release" $(PROJECT)) + $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) required-os-pkg --quote --skip-excluded --flavours "build run release" $(PROJECT)) pkg-install-testbuild-deps: $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) pkg-requires --delimiter=' ' --no-version build,run,release $(PROJECT)) diff --git a/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py b/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py index 15829d34..53421467 100644 --- a/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py +++ b/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py @@ -19,6 +19,8 @@ class CmdRequiredOsPkg(Cmd): # export parser.add_argument('--flavours', help='Dependency flavours', default='build') parser.add_argument('--skip-excluded', action='store_true', default=False, help='Output empty prerequisite list if module is excluded') + parser.add_argument('--quote', action='store_true', default=False, + help='Put double quotes around each listed dependency') async def _run(self, args: Namespace) -> None: modules = args.module @@ -41,6 +43,8 @@ class CmdRequiredOsPkg(Cmd): # export vals = self.app.collect_values(deps, 'pkg.requires.' + s, f) if vals: requires = requires + vals + if args.quote: + requires = [f'"{dep}"' for dep in requires] # TODO: add all not in build tree as -devel r = '' for m in requires: