From 22c0eca955653250c094d50da103ff250de57a0e Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Sun, 23 Aug 2026 17:25:27 -0400 Subject: [PATCH] [ADD] gnupg without its diagrams, and jinja2 for systemd gnupg builds two architecture diagrams into its manual, one needing ImageMagick and one transfig -- two toolchains for two pictures. --disable-doc is gnupg own switch, verified present in configure before use. The hook was written twice. The first version looked for a ./configure line ending in a backslash and asserted its way out; gnupg uses an options ARRAY. Both shapes appear in this port, so a hook has to read the file rather than assume the house style. systemd generates source from jinja2 templates and stops without it. Not documentation this time -- the build cannot proceed. --- FR --- gnupg construit deux diagrammes dans son manuel, l un exigeant ImageMagick et l autre transfig -- deux chaines d outils pour deux images. --disable-doc est son propre interrupteur, verifie present dans configure avant usage. Le hook a ete ecrit deux fois. La premiere version cherchait une ligne ./configure terminee par une contre-oblique et s est arretee sur son assertion ; gnupg emploie un TABLEAU d options. Les deux formes existent dans ce portage : un hook doit lire le fichier plutot que supposer le style maison. systemd genere du code depuis des gabarits jinja2 et s arrete sans lui. Pas de la documentation cette fois -- la construction ne peut pas avancer. Assisted-by: Claude Opus 5 --- patches/pkgbuild/gnupg.sh | 41 +++++++++++++++++++++++++++++++++++++++ scripts/packages.sh | 8 ++++++++ 2 files changed, 49 insertions(+) create mode 100755 patches/pkgbuild/gnupg.sh diff --git a/patches/pkgbuild/gnupg.sh b/patches/pkgbuild/gnupg.sh new file mode 100755 index 0000000..b3f1fc3 --- /dev/null +++ b/patches/pkgbuild/gnupg.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# gnupg: no manual, because two diagrams in it need two image toolchains. +# +# /bin/sh: line 1: convert: command not found +# make[2]: *** [Makefile:1199: gnupg-module-overview.pdf] Error 127 +# /bin/sh: line 1: fig2dev: command not found +# make[2]: *** [Makefile:1211: gnupg-card-architecture.pdf] Error 127 +# +# `convert` is ImageMagick, `fig2dev` is transfig. Two separate toolchains, for +# two architecture diagrams in gnupg's own documentation. +# +# --disable-doc is gnupg's own switch, and it was CHECKED before being used: +# `grep -oE '\-\-(disable|enable)-doc' configure` finds both, so autoconf knows +# the option. groff had no such switch and needed its generated Makefile edited +# instead -- the difference matters, because an invented flag draws only a +# warning from autoconf and the build fails exactly as before, with the hook's +# own check passing. +set -euo pipefail +# AN ARRAY, not a continued command. The first version of this hook looked for a +# ./configure line ending in a backslash and asserted its way out: +# +# AssertionError: gnupg: ./configure does not continue +# +# gnupg collects its options in `local configure_options=( ... )` and then calls +# `./configure "${configure_options[@]}"`. Both shapes appear in this port -- +# binutils, cryptsetup and libxcrypt use continued commands; gnupg and shadow use +# arrays -- so a hook has to look at the file rather than assume the house style. +python3 - <<'ZZPY' +import io, re +lines = io.open("PKGBUILD", encoding="utf-8").read().split("\n") +hit = [i for i, l in enumerate(lines) if re.match(r"^[ \t]*local configure_options=\($", l)] +assert len(hit) == 1, "gnupg: expected one configure_options array, got %d" % len(hit) +i = hit[0] + 1 +ind = re.match(r"^[ \t]*", lines[i]).group(0) +# The array is kept in alphabetical order upstream; --disable-doc sorts first. +lines.insert(i, ind + "--disable-doc # no ImageMagick, no transfig for the diagrams") +io.open("PKGBUILD", "w", encoding="utf-8").write("\n".join(lines)) +ZZPY +grep -A2 "local configure_options=(" PKGBUILD | grep -q -- "--disable-doc" || { + echo "gnupg: the flag is not inside the options array" >&2; exit 1; } +echo "gnupg: manual disabled (no ImageMagick, no transfig)" diff --git a/scripts/packages.sh b/scripts/packages.sh index 4d11e06..915578a 100644 --- a/scripts/packages.sh +++ b/scripts/packages.sh @@ -279,6 +279,14 @@ STAGE1_PACKAGES=( # same reason: its package() would take Debian's dist-packages from the # host's python. python-setuptools-scm + # systemd generates part of its source with jinja2 templates: + # + # meson.build:1620:15: ERROR: python3 is missing modules: jinja2 + # + # Not documentation -- the build cannot proceed without it. python-markupsafe + # comes with it, as jinja's only dependency. + python-markupsafe + python-jinja # libaio: a real closure gap. lvm2 stops on # # device/bcache.c:30:10: fatal error: libaio.h: No such file or directory