Commit graph

7 commits

Author SHA1 Message Date
61abc5aef9 [FIX] systemd: every man page operation at once, not one per pass
mv: cannot stat '<pkgdir>/usr/share/man/man3': No such file or directory

Fifteenth instance, and the first where the whole class was handled before the
failures arrived. -Dman=disabled means NO man pages exist, and package() touches
them six times -- three moves into split packages, three removals of pages Arch
does not ship.

Treated by kind rather than by name: the moves are neutralised, because with no
pages there is nothing to move; the removals get -f, because their intent still
holds on a machine that HAS the DocBook stack, and one of them also removes a
binary that must still go. Five moves, three removals, counted and reported by
the hook.

This is the procedure written into jsoncpp's hook one commit earlier, applied
forwards: after disabling documentation, grep package() for the output paths.
Chasing man3 alone would have cost five more passes.

The first guard for it matched any `rm` without a dash and condemned correct
code -- systemd removes plenty that is not documentation. Same mistake as the
blanket `grep tcl8.6` in sqlite's hook, and caught the same way.

--- FR ---

  mv: cannot stat '<pkgdir>/usr/share/man/man3': No such file or directory

Quinzième occurrence, et la première où toute la classe est traitée avant que les
échecs n'arrivent. -Dman=disabled signifie qu'AUCUNE page n'existe, et package()
y touche six fois — trois déplacements vers des sous-paquets, trois suppressions
de pages qu'Arch ne livre pas.

Traitées par nature et non par nom : les déplacements sont neutralisés, puisqu'il
n'y a rien à déplacer ; les suppressions reçoivent -f, car leur intention tient
toujours sur une machine dotée de la pile DocBook, et l'une retire aussi un
binaire qui doit bien partir. Cinq déplacements, trois suppressions, comptés et
rapportés par le hook.

C'est la procédure inscrite dans le hook de jsoncpp un commit plus tôt, appliquée
à l'endroit : après avoir désactivé une documentation, chercher dans package() les
chemins de sortie. Poursuivre man3 seul aurait coûté cinq passes de plus.

Le premier garde écrit pour cela attrapait tout `rm` sans tiret et condamnait du
code juste — systemd supprime beaucoup qui n'est pas de la documentation. Même
erreur que le `grep tcl8.6` global du hook sqlite, attrapée de la même façon.

Assisted-by: Claude Opus 5
2026-08-24 00:21:48 -04:00
8d9e8a4dce [FIX] groff's remaining lists, systemd man pages, git without libsecret
groff was the third round on the same package: DOC_GNU_EPS, then
PROCESSEDEXAMPLEFILES_PS, then HDTBL -- and mom's examples were waiting behind
those. groff renders its own manuals and every contrib package's examples with
the groff being built, each list a separate variable. Finding them one failure at
a time cost three passes; all seven are emptied together now.

systemd is the fourth package to stop on missing DocBook DATA rather than a
missing tool -- xsltproc exists, our libxslt supplies it:

  compilation error: file ../systemd/man/custom-man.xsl line 12 element import

It has the largest man page set here, which is the strongest argument in this port
for shipping docbook-xsl eventually.

git's libsecret helper needed THREE places, one spanning two lines. The first
version asserted "expected one _make, got 2" and stopped -- the guard working.
Replacing the install's first line alone would have left its continuation as a
command of its own, which is the binutils trap again.

--- FR ---

groff en était au troisième tour sur le même paquet : DOC_GNU_EPS, puis
PROCESSEDEXAMPLEFILES_PS, puis HDTBL — et les exemples de mom attendaient
derrière. groff rend ses propres manuels et les exemples de chaque contrib avec le
groff en cours de construction, chaque liste étant une variable distincte. Les
trouver un échec à la fois a coûté trois passes ; les sept sont vidées ensemble.

systemd est le quatrième paquet à s'arrêter sur des DONNÉES DocBook absentes et
non sur un outil manquant — xsltproc existe, notre libxslt le fournit :

  compilation error: file ../systemd/man/custom-man.xsl line 12 element import

Il porte le plus grand ensemble de pages de manuel du portage : c'est le meilleur
argument pour livrer docbook-xsl à terme.

L'aide libsecret de git demandait TROIS endroits, dont un sur deux lignes. La
première version a affirmé « expected one _make, got 2 » et s'est arrêtée — le
garde faisant son travail. Remplacer la première ligne de l'installation aurait
laissé sa continuation comme commande à part, soit le piège de binutils à nouveau.

Assisted-by: Claude Opus 5
2026-08-23 23:58:32 -04:00
ff65121058 [FIX] systemd without AppArmor, gpgme without its test harness, groff without a logo
gpgme is the one worth reading. It failed while BUILDING, not testing:

  make[3]: Entering directory '.../gpgme/tests/gpg'
  gpgconf: error running '/usr/bin/gpg-connect-agent': exit status 1

EL_NOCHECK skips check(), but `make all` still descends into tests/gpg and sets
up a throwaway GNUPGHOME, which means starting an agent -- and the chroot has no
dbus, no session and no tty. Third time this port has found that "no tests" and
"no test harness" are different requests.

groff needs xpmtoppm from netpbm to draw the GNU logo for its own manual. There
is no configure switch: groff has neither --without-doc nor --disable-doc, so
inventing a flag would have failed identically while the hook's check passed --
autoconf only warns about options it does not know. The generated Makefile's
DOC_GNU_EPS is emptied instead, and the verification runs inside build(), where
the generated file actually exists.

--- FR ---

gpgme mérite lecture. Il échouait en CONSTRUISANT, pas en testant :

  make[3]: Entering directory '.../gpgme/tests/gpg'
  gpgconf: error running '/usr/bin/gpg-connect-agent': exit status 1

EL_NOCHECK saute check(), mais `make all` descend quand même dans tests/gpg et
met en place un GNUPGHOME jetable, donc démarre un agent — or le chroot n'a ni
dbus, ni session, ni terminal. Troisième fois que ce portage constate que « pas
de tests » et « pas de harnais de test » sont deux demandes différentes.

groff a besoin de xpmtoppm, de netpbm, pour dessiner le logo GNU de son propre
manuel. Aucun interrupteur n'existe : ni --without-doc ni --disable-doc, donc
inventer un drapeau aurait échoué à l'identique pendant que le contrôle du hook
passait — autoconf ne fait qu'avertir des options qu'il ignore. La variable
DOC_GNU_EPS du Makefile généré est vidée, et la vérification tourne dans build(),
là où le fichier généré existe.

Assisted-by: Claude Opus 5
2026-08-22 22:02:56 -04:00
07486af2fa [FIX] systemd without BPF, pacman without asciidoc
Two more documentation-and-toolchain cuts, both using the project's own switch.

systemd asked for libbpf, which this port does not package -- and packaging it
means clang and llvm, an entire second compiler toolchain for unit features
nothing here uses yet. pacman asked for asciidoc, the same Python documentation
stack already declined for doxygen, asciidoctor and a2x.

pacman is worth naming out loud: it is the package manager, so its man pages are
the ones a user reaches for first. This is the most visible of the documentation
cuts and the strongest single argument for restoring them at stage 3.

--- FR ---

Deux coupes de plus, documentation et chaîne d'outils, chacune par l'interrupteur
prévu par le projet lui-même.

systemd réclamait libbpf, que ce portage ne paquette pas — et le paqueter suppose
clang et llvm, soit une seconde chaîne de compilation entière pour des fonctions
d'unité dont rien ici ne se sert encore. pacman réclamait asciidoc, la même pile
Python déjà écartée pour doxygen, asciidoctor et a2x.

pacman mérite d'être nommé : c'est le gestionnaire de paquets, donc ses pages de
manuel sont les premières qu'un utilisateur cherche. C'est la plus visible de ces
coupes, et le meilleur argument pour les restaurer à l'étage 3.

Assisted-by: Claude Opus 5
2026-08-21 21:25:20 -04:00
2a1997e06d [REM] sub-packages: four that cost more closure than they carry
pacman's resolver named 70 unresolved dependencies. Excluding python-brotli
alone took that to 47 and removed `python` outright, with libffi, mpdecimal
and gdbm behind it. python-libseccomp would have re-admitted the same tree,
and nothing across 135 packages depends on either.

Both wheels are unusable on the target anyway: built by the host's python
3.13, ABI-tagged cpython-313, while Arch ships 3.14. Stage 2 produces real
ones.

systemd-ukify is different -- it is architectural. ukify assembles a PE
binary and its EFI_ARCH_MAP has no s390x entry, so guess_efi_arch() raises
ValueError on this machine. Shipping it would put a program in the repository
that cannot start. systemd-tests followed it out: a test suite behind
--nocheck, and the only reason five more python packages were wanted.

The dropped artefacts were still indexed in core.db afterwards. repo-add only
adds, so a sub-package removed from pkgname leaves its last build installable
forever. Removed by hand; TODO.md records the gap.

--- FR ---

Le résolveur de pacman nommait 70 dépendances non résolues. Écarter le seul
python-brotli a ramené le compte à 47 et retiré `python` d'un coup, avec
libffi, mpdecimal et gdbm derrière. python-libseccomp aurait réadmis le même
arbre, et rien parmi 135 paquets ne dépend de l'un ou de l'autre.

Les deux roues sont de toute façon inutilisables sur la cible : bâties par le
python 3.13 de l'hôte, marquées cpython-313, quand Arch livre la 3.14.
L'étage 2 en produira de vraies.

systemd-ukify est d'une autre nature — architectural. ukify assemble un
binaire PE et son EFI_ARCH_MAP n'a pas d'entrée s390x : guess_efi_arch() lève
donc ValueError sur cette machine. Le livrer mettrait au dépôt un programme
incapable de démarrer. systemd-tests l'a suivi : une suite de tests derrière
--nocheck, et la seule raison de réclamer cinq paquets python de plus.

Les artefacts écartés restaient indexés dans core.db. repo-add n'ajoute que :
un sous-paquet retiré de pkgname laisse sa dernière compilation installable à
jamais. Retirés à la main ; TODO.md consigne le manque.

Assisted-by: Claude Opus 5
2026-08-19 05:28:32 -04:00
9a696af012 [FIX] host defaults: apt was deciding what got built
--auto-features enabled turns every auto feature into a requirement, so
installing a tool switches on code that never compiled here. Three of the
fifty host packages did exactly that, and only one failed for the reason
it named.

expat had built clean the day before. asciidoc pulled docbook-utils in as
an automatic dependency; it owns docbook2man, the third name in expat's
find_program list, so docs defaulted ON twenty-nine hours before anything
rebuilt. That tool is the SGML pipeline: on DocBook XML it writes nothing
and still exits 0, and the mv it feeds is what reported the failure. Arch
ships no xmlwf.1 either, so OFF is parity.

systemd's split-bin probes the BUILD host's /usr/sbin. Ubuntu's is a real
directory, so six binaries went where package() does not look -- and
arch-meson's --sbindir is ignored, systemd computes its own.

util-linux needed no option: poman-translate.sh greps po4a for the English
"Discard" and this host answers "Rejet de". The locale belongs to the host,
so it is pinned once on the makepkg line.

--- FR ---

--auto-features enabled fait de chaque fonction « auto » une exigence :
installer un outil active donc du code jamais compilé ici. Trois des
cinquante paquets hôte l'ont fait, et un seul a échoué pour la raison
qu'il annonçait.

expat compilait proprement la veille. asciidoc avait tiré docbook-utils en
dépendance automatique ; il fournit docbook2man, troisième nom de la liste
find_program d'expat, et la doc est passée à ON vingt-neuf heures avant
toute reconstruction. Cet outil est le pipeline SGML : sur du DocBook XML
il n'écrit rien et sort quand même 0, et le mv qu'il alimente est ce qui a
signalé la panne. Arch ne livre pas xmlwf.1 non plus : OFF, c'est la parité.

Le split-bin de systemd sonde le /usr/sbin de la machine de BUILD. Celui
d'Ubuntu est un vrai répertoire, donc six binaires sont partis là où
package() ne regarde pas — et le --sbindir d'arch-meson est ignoré, systemd
calcule le sien.

util-linux n'avait besoin d'aucune option : poman-translate.sh cherche le
« Discard » anglais de po4a, et cet hôte répond « Rejet de ». La locale
appartient à l'hôte : elle est épinglée une fois, sur la ligne makepkg.

Assisted-by: Claude Opus 5
2026-08-17 02:37:46 -04:00
dcaa55b19a [ADD] host deps: the tools six packages needed and nobody declared
--nodeps means every makedepend must be named here by hand. Seven builds
stopped on one, each naming a different tool: itstool, convert, fig2dev,
asciidoctor, libnsl, python -m build, libbpf, history.

The list was also a lie by omission. libreadline-dev, libncurses-dev,
zlib1g-dev, python3-dev, doxygen, xsltproc, docbook-xsl, elinks and
libcap2-bin were on this VM by hand and never declared. They made the
builds pass here and would fail on a fresh Ubuntu, for reasons that have
nothing to do with s390x.

history.pc is generated rather than copied: our own readline package
ships a correct one, but its libdir names /usr/lib, which on a multiarch
host holds no libhistory. The .pc has to describe THIS host.

Three hooks for what apt cannot buy. systemd asks for an EFI arch s390x
does not have -- and says "python3 is missing modules: elftools", which
sends you to apt for four lines before admitting the real reason.

--- FR ---

--nodeps veut dire que chaque makedepend doit être nommé ici à la main.
Sept compilations se sont arrêtées sur l'une d'elles, chacune désignant
un outil différent : itstool, convert, fig2dev, asciidoctor, libnsl,
python -m build, libbpf, history.

La liste mentait aussi par omission. libreadline-dev, libncurses-dev,
zlib1g-dev, python3-dev, doxygen, xsltproc, docbook-xsl, elinks et
libcap2-bin étaient posés à la main sur cette VM, jamais déclarés. Ils
faisaient passer les compilations ici et auraient échoué sur un Ubuntu
neuf, pour des raisons étrangères à s390x.

history.pc est généré et non copié : notre propre paquet readline en
livre un correct, mais son libdir nomme /usr/lib, qui sur un hôte
multiarch ne contient aucun libhistory. Le .pc doit décrire CET hôte-ci.

Trois crochets pour ce qu'apt n'achète pas. systemd réclame une
architecture EFI que s390x n'a pas — et annonce « python3 is missing
modules: elftools », ce qui envoie chez apt pour quatre lignes avant
d'avouer la vraie raison.

Assisted-by: Claude Opus 5
2026-08-17 01:33:41 -04:00