[ADD] TODO.md: track every divergence from upstream Arch
A port that does not track what it gave up drifts silently, and the gap is found years later by whoever needs the missing feature. Every deliberate difference is now written down, with the hook that implements it and what it would take to close it. The document separates two kinds, because the difference matters. DEFERRED entries were dropped to get the bootstrap moving -- nothing about s390x prevents them, they cost build time or a host dependency, and they should come back. ARCHITECTURAL entries drop something that is x86-specific by nature; there is nothing to restore, and they are listed so nobody spends an afternoon rediscovering why. A third section covers what is neither: environment facts, like dev.gnupg.org being unreachable from this host, which close themselves elsewhere. curl joins the deferred list. Arch builds HTTP/3 through nghttp3 and ngtcp2; Ubuntu packages neither, and building both to reach HTTP/3 is a detour when pacman and ERPLibre talk to plain HTTPS mirrors. The dependency declarations and the soname map go with the configure flags: left in place, the package would claim to need libraries it no longer links. --- FR --- Un portage qui ne trace pas ce qu il a abandonne derive en silence, et l ecart se decouvre des annees plus tard par celui a qui la fonctionnalite manque. Chaque difference deliberee est desormais consignee, avec le crochet qui la met en oeuvre et ce qu il faudrait pour la refermer. Le document separe deux natures, parce que la distinction compte. Les entrees DIFFEREES ont ete abandonnees pour faire avancer l amorcage -- rien dans s390x ne s y oppose, elles coutent du temps de compilation ou une dependance d hote, et elles doivent revenir. Les entrees ARCHITECTURALES retirent ce qui est par nature propre a x86 ; il n y a rien a restaurer, et elles figurent la pour que personne ne passe un apres-midi a redecouvrir pourquoi. Une troisieme section couvre ce qui n est ni l un ni l autre : des faits d environnement, comme dev.gnupg.org injoignable depuis cet hote, qui se refermeront ailleurs. curl rejoint la liste des differes. Arch batit HTTP/3 par nghttp3 et ngtcp2 ; Ubuntu n empaquete ni l un ni l autre, et les batir tous deux pour atteindre HTTP/3 est un detour quand pacman et ERPLibre parlent a des miroirs HTTPS ordinaires. Les declarations de dependance et la table de sonames partent avec les options de configuration : laissees en place, le paquet pretendrait dependre de bibliotheques qu il ne lie plus. Assisted-by: Claude Opus 5
This commit is contained in:
parent
a67bd94f8b
commit
00c3909df5
2 changed files with 151 additions and 0 deletions
122
TODO.md
Normal file
122
TODO.md
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
# TODO — divergences from upstream Arch
|
||||
|
||||
Every deliberate difference between this port and Arch's own packages, so
|
||||
that none of them becomes invisible. A port that does not track what it gave
|
||||
up drifts silently, and the gap is discovered years later by whoever needs
|
||||
the missing feature.
|
||||
|
||||
Two kinds of entry, and the difference matters:
|
||||
|
||||
- **Deferred** — dropped to get the bootstrap moving. Nothing about s390x
|
||||
prevents it; it costs build time, a host dependency, or another package
|
||||
first. These should come back.
|
||||
- **Architectural** — the thing being dropped is x86-specific by nature.
|
||||
There is nothing to restore.
|
||||
|
||||
Each entry names the hook that implements it, so the change is one file away.
|
||||
|
||||
---
|
||||
|
||||
## Deferred
|
||||
|
||||
### libgccjit — `patches/pkgbuild/gcc.sh`
|
||||
|
||||
Arch configures and compiles the **entire gcc tree a second time** just for
|
||||
libgccjit, because it needs `--enable-host-shared` and applying that to the
|
||||
main compiler would slow it down. That pass is about half of gcc's build
|
||||
time — twenty minutes per attempt on this hardware.
|
||||
|
||||
Already re-enablable, no code change needed:
|
||||
|
||||
EL_GCC_JIT=1 bash scripts/build-stage1.sh
|
||||
|
||||
**To close:** run one build with the switch on and confirm the package
|
||||
appears. Nothing else is required.
|
||||
|
||||
### HTTP/3 in curl — `patches/pkgbuild/curl.sh`
|
||||
|
||||
configure: error: nghttp3 enabled without a QUIC library; enable ngtcp2
|
||||
|
||||
Ubuntu packages neither ngtcp2 nor nghttp3, so the build host cannot satisfy
|
||||
them. pacman talks to plain HTTPS mirrors, and so does ERPLibre.
|
||||
|
||||
**To close:** build `ngtcp2` and `nghttp3` as Arch packages, add them to the
|
||||
stage-1 list before curl, then delete the hook.
|
||||
|
||||
### gcc front ends: Ada, D, Modula-2, COBOL — `patches/pkgbuild/gcc.sh`
|
||||
|
||||
configure: error: GNAT is required to build ada
|
||||
configure: error: GDC is required to build d
|
||||
|
||||
These are written in themselves and need an existing compiler of the same
|
||||
language. Ubuntu ships `gnat`, but not a version GCC 15 accepts; there is no
|
||||
D bootstrap compiler here at all.
|
||||
|
||||
**To close:** after stage 2, the port's own gcc can bootstrap them. This is
|
||||
the entry most likely to matter to someone — a mainframe shop with Ada is not
|
||||
a hypothetical.
|
||||
|
||||
### Test suites — `scripts/bootstrap-pacman.sh` (`--nocheck`)
|
||||
|
||||
Stage-1 suites run against the **host** libraries, not Arch's, so their
|
||||
verdict says nothing about the port. `acl` failed its check step on a sound
|
||||
build. They also cost hours.
|
||||
|
||||
**To close:** stage 2 runs inside the chroot, where the suites test what was
|
||||
actually built. Drop `--nocheck` there.
|
||||
|
||||
### Checksums on generated patches — `scripts/bootstrap-pacman.sh`
|
||||
|
||||
`--skipchecksums`. GitLab regenerates `.patch` URLs, so their checksums drift
|
||||
from what the PKGBUILD recorded. Release tarballs still validate — only the
|
||||
generated patches are skipped.
|
||||
|
||||
**To close:** fetch patches from a stable source, or record our own sums.
|
||||
|
||||
### PGP signatures — `scripts/bootstrap-pacman.sh`
|
||||
|
||||
`--skippgpcheck`, because no keyring exists yet.
|
||||
|
||||
**To close:** build `archlinux-keyring`, then verify.
|
||||
|
||||
---
|
||||
|
||||
## Architectural
|
||||
|
||||
Nothing to restore here. Listed so nobody spends an afternoon rediscovering
|
||||
why.
|
||||
|
||||
| What | Where | Why |
|
||||
|---|---|---|
|
||||
| SFrame | `glibc.sh` | `configure: error: the architecture doesn't support SFrame` |
|
||||
| gold linker | `binutils.sh` | x86-centric, deprecated upstream since 2.44; `ld.bfd` is the linker on Z |
|
||||
| 32-bit multilib | `glibc.sh`, `gcc.sh`, `libtool.sh` | On x86_64 it means i686. On Z it means the 31-bit ESA/390 ABI that GCC is removing |
|
||||
| `libhwasan` | `gcc.sh` | Hardware-assisted ASan exists on x86_64 and aarch64 only |
|
||||
|
||||
---
|
||||
|
||||
## Environment, not the port
|
||||
|
||||
### libassuan source — `patches/pkgbuild/libassuan.sh`
|
||||
|
||||
`dev.gnupg.org` is unreachable from this build host — measured HTTP 000,
|
||||
while `github.com/gpg/libassuan.git` and `gnupg.org/ftp` both answer. Only
|
||||
the transport changed; the pinned tag is untouched.
|
||||
|
||||
**To close:** it closes itself on a host with wider outbound access.
|
||||
|
||||
### `arch-meson` / `arch-cmake` — `scripts/devtools/`
|
||||
|
||||
Several PKGBUILDs call them, they ship in `devtools`, and `devtools` is
|
||||
itself an Arch package — during a bootstrap they cannot exist yet.
|
||||
|
||||
**To close:** build `devtools` in stage 2 and drop the stand-ins.
|
||||
|
||||
### Host include layout — `scripts/bootstrap-pacman.sh`
|
||||
|
||||
Ubuntu multiarch puts `asm/`, `bits/`, `gnu/` and `sys/sdt.h` under
|
||||
`/usr/include/s390x-linux-gnu`, while glibc builds with `-nostdinc` and
|
||||
expects the classic layout. Symlinks bridge it.
|
||||
|
||||
**To close:** stage 2 builds inside an Arch root, where the layout is
|
||||
already right.
|
||||
29
patches/pkgbuild/curl.sh
Executable file
29
patches/pkgbuild/curl.sh
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
# curl: disable HTTP/3.
|
||||
#
|
||||
# configure: error: nghttp3 enabled without a QUIC library; enable ngtcp2
|
||||
#
|
||||
# Arch builds curl with HTTP/3 through nghttp3 + ngtcp2. Ubuntu packages
|
||||
# neither, so the build host cannot satisfy them, and building both from
|
||||
# source to reach HTTP/3 is a detour: nothing in the bootstrap needs it.
|
||||
# pacman talks to plain HTTPS mirrors, and so does ERPLibre.
|
||||
#
|
||||
# DEFERRED, not rejected -- see TODO.md. Re-enable by building ngtcp2 and
|
||||
# nghttp3 as Arch packages first, then dropping this hook.
|
||||
set -euo pipefail
|
||||
|
||||
# The configure flags.
|
||||
sed -i 's/--with-nghttp3/--without-nghttp3/; s/--with-ngtcp2/--without-ngtcp2/' PKGBUILD
|
||||
|
||||
# The dependency declarations and the soname map. Left in place, the package
|
||||
# would claim to need libraries it no longer links, and makepkg resolves
|
||||
# those sonames against the built binary.
|
||||
sed -i "/'libnghttp3'/d; /'libngtcp2'/d" PKGBUILD
|
||||
|
||||
if grep -qE '\-\-with-(nghttp3|ngtcp2)' PKGBUILD; then
|
||||
echo "curl: an HTTP/3 library is still requested" >&2; exit 1
|
||||
fi
|
||||
if grep -qE "'(libnghttp3|libngtcp2)'" PKGBUILD; then
|
||||
echo "curl: an HTTP/3 dependency is still declared" >&2; exit 1
|
||||
fi
|
||||
echo "curl: HTTP/3 disabled (no ngtcp2 on the build host)"
|
||||
Loading…
Reference in a new issue