[FIX] makepkg.conf: .la files in a third of the repository

This host was configured with `libtool staticlibs`, which KEEPS what Arch
strips. Fifty-six of a hundred and fifty-nine packages carried .la files, and
nothing reported it until two sub-packages of one source both claimed the
same file:

  /usr/lib/libcrypt.la exists in both 'libxcrypt' and 'libxcrypt-compat'

That is what .la files are for -- they record a link line -- so a split
library produces two descriptions of itself. Arch removes them because
nothing in a modern toolchain reads them and the paths they record are wrong
as soon as a package moves. OPTIONS now matches Arch, minus debug and lto:
debug wants a source-package pipeline this bootstrap has no use for, and lto
doubles a stage whose output stage 2 discards.

libnspr4-dev and mercurial came with nss. The nspr distinction is worth
keeping: the host had NOTHING, which the ordinary stage-1 rule fixes with a
host package. libgcrypt needed a hook because the host had something too OLD
-- 1.51 against a floor of 1.56 -- and no installation fixes that.

--- FR ---

Cet hôte était configuré avec `libtool staticlibs`, qui CONSERVE ce qu'Arch
retire. Cinquante-six paquets sur cent cinquante-neuf portaient des fichiers
.la, et rien ne l'avait signalé jusqu'à ce que deux sous-paquets d'une même
source réclament le même fichier :

  /usr/lib/libcrypt.la exists in both 'libxcrypt' et 'libxcrypt-compat'

C'est à cela que servent les .la — ils consignent une ligne de liaison — donc
une bibliothèque scindée produit deux descriptions d'elle-même. Arch les
supprime parce que rien dans une chaîne moderne ne les lit et que les chemins
qu'ils consignent sont faux dès qu'un paquet se déplace. OPTIONS suit
désormais Arch, sauf debug et lto : debug réclame un pipeline de paquets
sources dont cet amorçage n'a que faire, et lto double une étape dont l'étage
2 jette la sortie.

libnspr4-dev et mercurial sont venus avec nss. La distinction sur nspr mérite
d'être gardée : l'hôte n'avait RIEN, ce que la règle ordinaire de l'étage 1
corrige par un paquet hôte. libgcrypt a exigé un crochet parce que l'hôte
avait quelque chose de trop VIEUX — 1.51 contre un plancher de 1.56 — et
qu'aucune installation ne corrige cela.

Assisted-by: Claude Opus 5
This commit is contained in:
Mathieu Benoit 2026-08-19 08:30:49 -04:00
parent 22b101dc47
commit 9a6c11e2ab

View file

@ -246,7 +246,28 @@ configure_makepkg() {
#
# while the build had created s390x-ibm-linux-gnu/libstdc++-v3/doc.
sudo sed -i 's|^CHOST=.*|CHOST="s390x-ibm-linux-gnu"|' /etc/makepkg.conf
grep -E '^(CARCH|CHOST|MAKEFLAGS)=' /etc/makepkg.conf
# OPTIONS, aligned with Arch's own defaults.
#
# This host was configured with `libtool staticlibs`, which KEEPS the .la
# files and the .a archives that Arch strips. Fifty-six of a hundred and
# fifty-nine packages carried .la files as a result -- a third of the
# repository diverging from Arch in a way nothing reported, until two
# sub-packages of the same source both claimed one:
#
# error: failed to commit transaction (conflicting files)
# /usr/lib/libcrypt.la exists in both 'libxcrypt' and 'libxcrypt-compat'
#
# That is what .la files are for: they record a link line, so two packages
# splitting one library both want to describe it. Arch removes them
# because nothing in a modern toolchain reads them and the paths they
# record are wrong the moment a package is relocated.
#
# debug and lto stay OFF, unlike Arch: debug wants a source-package
# pipeline this bootstrap has no use for, and lto doubles compile time on
# a stage whose output stage 2 discards anyway. autodeps stays off because
# it is makepkg's own default; TODO.md records what that costs.
sudo sed -i 's|^OPTIONS=.*|OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug !lto !autodeps)|' /etc/makepkg.conf
grep -E '^(CARCH|CHOST|MAKEFLAGS|OPTIONS)=' /etc/makepkg.conf
}
# build_package <name> -- fetch the official PKGBUILD and build it for s390x.