A run reported "51 built, 0 failed" while glibc, gcc, coreutils and pacman had all failed. The cause is a bash rule that is easy to forget: callers invoke build_package inside an "if", and "if" DISABLES set -e for the whole function body. A failing makepkg fell through to repo-add, whose success became the function exit status. build_package now returns explicitly on failure and, more importantly, verifies that a package file actually exists. An exit code is not proof; only the artefact is. Measured before the fix: 23 files in the repository where a hundred were claimed. First real port patch, applied through a per-package hook rather than by hand: the glibc PKGBUILD passes --enable-sframe, and s390x has no SFrame at all -- configure refuses outright. Hooks re-clone cleanly, so an upstream change is never silently discarded. --nocheck for stage 1: these test suites run against the HOST libraries, not the Arch ones, so their verdict says nothing about the port. acl failed its check step on a sound build. Stage 2 runs them for real. The remaining failures were host makedepends that --nodeps hides: po4a, gnat, debuginfod and jansson are now installed up front. --- FR --- Une execution annoncait « 51 built, 0 failed » alors que glibc, gcc, coreutils et pacman avaient tous echoue. La cause est une regle de bash qu on oublie : build_package est appelee dans un « if », et « if » DESACTIVE set -e pour tout le corps de la fonction. Un makepkg en echec poursuivait jusqu a repo-add, dont la reussite devenait le code de sortie. build_package rend desormais la main explicitement en cas d echec et, surtout, verifie qu un fichier de paquet existe vraiment. Un code de sortie ne prouve rien ; seul l artefact prouve. Mesure avant correction : 23 fichiers dans le depot la ou cent etaient annonces. Premier vrai correctif de portage, applique par crochet et non a la main : le PKGBUILD de glibc passe --enable-sframe, et s390x n a aucun SFrame -- configure refuse net. Les crochets survivent a un reclonage, donc une evolution amont n est jamais perdue en silence. --nocheck pour l etage 1 : ces suites s executent contre les bibliotheques de l HOTE, pas celles d Arch, et leur verdict ne dit rien du portage. acl echouait a son etape check sur une compilation saine. L etage 2 les executera pour de vrai. Les autres echecs etaient des makedepends d hote que --nodeps masque : po4a, gnat, debuginfod et jansson sont poses d entree. Assisted-by: Claude Opus 5
18 lines
821 B
Bash
Executable file
18 lines
821 B
Bash
Executable file
#!/usr/bin/env bash
|
|
# glibc: SFrame does not exist on s390x.
|
|
#
|
|
# Arch's PKGBUILD passes --enable-sframe, added when x86_64 gained SFrame
|
|
# stack tracing. glibc's own configure rejects it outright on this
|
|
# architecture:
|
|
#
|
|
# configure: error: the architecture doesn't support SFrame
|
|
#
|
|
# This is not a build-environment problem and no host package fixes it: the
|
|
# feature is genuinely absent from s390x. Dropping the flag is what a port
|
|
# does -- and it must be dropped surgically, leaving every other configure
|
|
# option untouched, so that a future Arch change to this PKGBUILD is not
|
|
# silently discarded.
|
|
set -euo pipefail
|
|
sed -i '/--enable-sframe/d' PKGBUILD
|
|
grep -q -- '--enable-sframe' PKGBUILD && { echo "glibc: sframe flag still present" >&2; exit 1; }
|
|
echo "glibc: --enable-sframe removed (unsupported on s390x)"
|