From f7053490d08ce5370a0c0692888319f43d4db192 Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Mon, 17 Aug 2026 00:00:48 -0400 Subject: [PATCH] [FIX] grep: the m4 check lives in bootstrap.conf, not bootstrap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Third attempt on this package, and the first one written after reading the file instead of assuming its shape. The two before it failed for the same reason: 1. Skipping ./bootstrap. The source is a git checkout, not a released tarball, so that removed configure itself: PKGBUILD: line 43: ./configure: No such file or directory 2. Editing `bootstrap`. The check is not there. It lives in bootstrap.conf, inside a shell function, and its message is built from a $url variable -- which is why grepping the literal text found nothing, twice. The check is two lines: a grep for the serial and a die. Both are replaced by a no-op that keeps the enclosing function valid, verified against the real file before being committed. grep is the only package here that INSPECTS its host's m4 macros. This is not an s390x incompatibility: pkg-config 0.29.2 ships that serial on every distribution, x86 included. The hook checks BOTH that the patch step was inserted and that ./bootstrap is still invoked, so mistake 1 cannot come back silently. --- FR --- Troisieme tentative sur ce paquet, et la premiere ecrite apres avoir lu le fichier au lieu d en supposer la forme. Les deux precedentes ont echoue pour la meme raison : 1. Sauter ./bootstrap. La source est un depot git, pas une archive de version : cela supprimait configure lui-meme. 2. Modifier « bootstrap ». La verification n y est pas. Elle vit dans bootstrap.conf, dans une fonction shell, et son message est construit a partir d une variable $url -- d ou l echec, deux fois, de la recherche du texte litteral. La verification tient en deux lignes : un grep sur la serie et un die. Les deux sont remplacees par une instruction vide qui laisse la fonction valide, essai fait sur le vrai fichier avant de commiter. grep est le seul paquet ici a EXAMINER les macros m4 de son hote. Ce n est pas une incompatibilite s390x : pkg-config 0.29.2 livre cette serie sur toutes les distributions, x86 compris. Le crochet verifie A LA FOIS que l etape de correction est inseree et que ./bootstrap est toujours appele, pour que l erreur 1 ne puisse pas revenir en silence. Assisted-by: Claude Opus 5 --- patches/pkgbuild/grep.sh | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/patches/pkgbuild/grep.sh b/patches/pkgbuild/grep.sh index 532612f..e35dc3b 100755 --- a/patches/pkgbuild/grep.sh +++ b/patches/pkgbuild/grep.sh @@ -1,36 +1,41 @@ #!/usr/bin/env bash -# grep: neutralise the pkg.m4 serial check inside its own bootstrap script. +# grep: neutralise the pkg.m4 serial check inside bootstrap.conf. # # ./bootstrap: do not use pkg.m4 serial 12; # see https://lists.gnu.org/r/grep-devel/2025-04/msg00006.html # # grep is the only package here that INSPECTS the version of the m4 macros -# its build host provides. This is not an s390x incompatibility: the same -# refusal happens on any Ubuntu host, x86 included. +# its build host provides. Not an s390x incompatibility: the same refusal +# happens on any Ubuntu host, x86 included -- pkg-config 0.29.2 ships that +# serial everywhere. # -# A PREVIOUS VERSION of this hook skipped ./bootstrap entirely, on the -# assumption that the source was a released tarball and therefore already -# bootstrapped. It is not -- it is a git checkout, so skipping bootstrap -# removed configure itself: +# TWO EARLIER VERSIONS OF THIS HOOK WERE WRONG, both for the same reason -- +# assuming the shape of a file instead of reading it: # -# PKGBUILD: line 43: ./configure: No such file or directory +# 1. Skipping ./bootstrap. The source is a git checkout, not a released +# tarball, so that removed configure itself: +# PKGBUILD: line 43: ./configure: No such file or directory +# 2. Editing `bootstrap`. The check is not there. It lives in +# bootstrap.conf, in a shell function, built from a $url variable -- +# which is why grepping for the literal message found nothing. # -# The check itself is what has to go, and it lives in the extracted source, -# so it is removed from prepare() rather than from the PKGBUILD directly. +# The check is two lines: a grep for the serial, and a die. Replaced by a +# no-op that keeps the surrounding function valid. set -euo pipefail python3 - <<'PY' import io, re s = io.open("PKGBUILD", encoding="utf-8").read() -fix = """ # Port: drop bootstrap's host m4 vetting; see patches/pkgbuild/grep.sh - sed -i '/do not use pkg.m4 serial/,+1d' bootstrap +fix = """ # Port: bootstrap.conf refuses the host pkg.m4 serial; see + # patches/pkgbuild/grep.sh. The check spans two lines, ending in "|| :". + sed -i "/serial 12. m4.pkg.m4/,+1c\\\\ :" bootstrap.conf """ m = re.search(r"\nprepare\(\) \{\n(\s*cd [^\n]*\n)", s) assert m, "prepare() with a cd not found" s = s[:m.end()] + fix + s[m.end():] io.open("PKGBUILD", "w", encoding="utf-8").write(s) PY -grep -q "drop bootstrap's host m4 vetting" PKGBUILD || { - echo "grep: m4 check removal not inserted" >&2; exit 1; } +grep -q 'bootstrap.conf refuses the host pkg.m4' PKGBUILD || { + echo "grep: patch step not inserted" >&2; exit 1; } grep -qE '^\s*\./bootstrap' PKGBUILD || { - echo "grep: bootstrap is no longer invoked -- configure would be missing" >&2; exit 1; } -echo "grep: bootstrap kept, its pkg.m4 serial check neutralised" + echo "grep: bootstrap no longer invoked -- configure would be missing" >&2; exit 1; } +echo "grep: bootstrap kept, its bootstrap.conf serial check neutralised"