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 <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-01-29 10:43:14 +01:00
commit 2bbf5bd8e7
3 changed files with 12 additions and 8 deletions

View file

@ -183,13 +183,13 @@ build-order-%: $(filter-out $(UNAVAILABLE_TARGETS),pull.done)
build-order: build-order-all build-order: build-order-all
echo-build-deps: 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: 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: 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: echo-os:
$(Q)$(GET_OS_SH) $(Q)$(GET_OS_SH)
@ -241,10 +241,10 @@ pkg-manager-refresh:
$(PKG_MANAGER) refresh $(PKG_MANAGER) refresh
pkg-install-build-deps: 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-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) pkg-release-reinstall: $(PREREQ_RELEASE)

View file

@ -190,7 +190,7 @@ prefix.done:
touch $@ touch $@
echo-build-deps: 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-%: git-ssh-%:
bash -c "`git remote get-url --push $* | sed 's|ssh://||; s|\([^/]\+\)/\(.*\)|LC_CDPATH=/\2 ssh -o SendEnv=LC_CDPATH \1|'`" 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_MANAGER) refresh
pkg-install-build-deps: 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-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-install-testbuild-deps:
$(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) pkg-requires --delimiter=' ' --no-version build,run,release $(PROJECT)) $(PKG_MANAGER) install $(BASE_PKGS) $(shell $(proj_query_cmd) pkg-requires --delimiter=' ' --no-version build,run,release $(PROJECT))

View file

@ -19,6 +19,8 @@ class CmdRequiredOsPkg(Cmd): # export
parser.add_argument('--flavours', help='Dependency flavours', default='build') parser.add_argument('--flavours', help='Dependency flavours', default='build')
parser.add_argument('--skip-excluded', action='store_true', default=False, parser.add_argument('--skip-excluded', action='store_true', default=False,
help='Output empty prerequisite list if module is excluded') 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: async def _run(self, args: Namespace) -> None:
modules = args.module modules = args.module
@ -41,6 +43,8 @@ class CmdRequiredOsPkg(Cmd): # export
vals = self.app.collect_values(deps, 'pkg.requires.' + s, f) vals = self.app.collect_values(deps, 'pkg.requires.' + s, f)
if vals: if vals:
requires = requires + vals requires = requires + vals
if args.quote:
requires = [f'"{dep}"' for dep in requires]
# TODO: add all not in build tree as -devel # TODO: add all not in build tree as -devel
r = '' r = ''
for m in requires: for m in requires: