e2fsprogs builds fuse2fs, deletes it, and repackages it. Without fuse3 on the host it was never compiled, so the delete aborted package() after a clean build -- and its sub-package declares fuse3, which this port does not ship, so even a success would have been uninstallable. Three reasons, one direction. libsasl said `libpq-fe.h: No such file or directory` about a file that is there, in /usr/include/postgresql. mysql.h is in /usr/include/mariadb, the same shape one step behind it. Two headers that exist on paths configure does not try is a queue, and this port already wrote down what a queue means: a single missing library is a host dependency, a queue of them is a feature to disable. Arch declares depends=(glibc) for libsasl and says why -- the SQL plugins are dlopened, never linked. python-audit and python-capng go the way python-brotli went, but the reason is stated differently on purpose. Cost was the argument then; measured now, python costs three packages rather than a subtree, so that argument no longer holds. The ABI does: both are cp313 wheels and Arch ships 3.14. --- FR --- e2fsprogs bâtit fuse2fs, le supprime, puis le rempaquette. Sans fuse3 sur l'hôte il n'a jamais été compilé : la suppression interrompait donc package() après une compilation propre — et son sous-paquet déclare fuse3, que ce portage ne livre pas, si bien qu'une réussite aurait été ininstallable. Trois raisons, une seule direction. libsasl annonçait « libpq-fe.h: No such file or directory » à propos d'un fichier présent, sous /usr/include/postgresql. mysql.h est sous /usr/include/mariadb, même forme un cran derrière. Deux en-têtes qui existent sur des chemins que configure n'essaie pas font une file d'attente, et ce dépôt a déjà consigné ce qu'une file signifie : une bibliothèque manquante est une dépendance hôte, une file en est une fonctionnalité à désactiver. Arch déclare depends=(glibc) pour libsasl et explique pourquoi — les greffons SQL sont chargés dynamiquement, jamais liés. python-audit et python-capng suivent python-brotli, mais le motif est énoncé autrement à dessein. C'était le coût alors ; mesuré maintenant, python coûte trois paquets et non un sous-arbre, cet argument ne tient donc plus. L'ABI, si : les deux sont des roues cp313 quand Arch livre la 3.14. Assisted-by: Claude Opus 5
44 lines
2.1 KiB
Bash
Executable file
44 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# audit: the python-audit sub-package cannot work, whatever it costs.
|
|
#
|
|
# The wheel is built by the HOST's python 3.13 and carries a cpython-313 ABI
|
|
# tag; Arch ships python 3.14. No destination makes it importable on the
|
|
# target -- the same reason python-brotli and python-libseccomp were dropped.
|
|
# Stage 2 builds it against the port's own python, where the tag matches.
|
|
#
|
|
# THE COST ARGUMENT IS NOT THE REASON, and that distinction is worth keeping.
|
|
# python-brotli was dropped when the repository held forty packages and
|
|
# `python` dragged libffi, mpdecimal and gdbm in behind it. Measured again at
|
|
# 131 packages, python costs three: the closure had filled in around it. So
|
|
# the cheap-versus-expensive reasoning that was right then is wrong now, and
|
|
# reusing it here would have been reasoning from a stale measurement.
|
|
#
|
|
# What has not changed is the ABI. That is why this one goes.
|
|
#
|
|
# build() still builds the wheel -- one function for every sub-package -- and
|
|
# the result is simply not packaged. package_python-audit() stays in the file,
|
|
# uncalled, like package_libquadmath() in gcc.
|
|
set -euo pipefail
|
|
python3 - <<'PY'
|
|
import io, re, sys
|
|
s = io.open("PKGBUILD", encoding="utf-8").read()
|
|
m = re.search(r"pkgname=\((.*?)\)\n", s, re.S)
|
|
assert m, "audit: pkgname array not found"
|
|
names = re.findall(r"[A-Za-z0-9._+-]+", m.group(1))
|
|
assert "python-audit" in names, "audit: python-audit not in pkgname, found %s" % names
|
|
kept = [n for n in names if n != "python-audit"]
|
|
s = s[:m.start()] + "pkgname=(\n" + "".join(" %s\n" % n for n in kept) + ")\n" + s[m.end():]
|
|
io.open("PKGBUILD", "w", encoding="utf-8").write(s)
|
|
PY
|
|
python3 - <<'PY'
|
|
import io, re, sys
|
|
s = io.open("PKGBUILD", encoding="utf-8").read()
|
|
m = re.search(r"pkgname=\((.*?)\)\n", s, re.S)
|
|
if not m:
|
|
sys.exit("audit: pkgname array unreadable after patching")
|
|
names = re.findall(r"[A-Za-z0-9._+-]+", m.group(1))
|
|
if "python-audit" in names:
|
|
sys.exit("audit: python-audit still declared in pkgname")
|
|
print("audit: pkgname -> %s" % " ".join(names))
|
|
PY
|
|
echo "audit: python-audit dropped (cp313 wheel, Arch ships python 3.14)"
|