Files
takana/recipes/htop.toml
T
SergioandClaude Opus 5 db002ede65 htop: link = "static" era mentira por el -rdynamic de upstream
QUINTA causa del frente link=static, y la unica que no es culpa de la receta:
`Makefile.am:243` hace `AM_LDFLAGS += -rdynamic` bajo `if HTOP_LINUX`, y el
wrapper de cc del lab (`sandbox.rs:597`) quita el `-static` inyectado ante
`-rdynamic`/`--export-dynamic`/un `.so` en la linea. La regla del wrapper es
correcta —`-static` no se sostiene contra un link intrinsecamente dinamico—,
pero el `-rdynamic` de htop es solo para simbolizar el backtrace del manejador
de fallos, no una necesidad de enlace.

Efecto que tenia: `-lncursesw` resolvia a la libncursesw.so.6 DEL ROOTFS de
Alpine en vez del artefacto de ncurses (que solo trae .a) — una entrada no
declarada, de las que rompen el cono de affected.py.

`AM_LDFLAGS=-static` va en compile Y en install: si `make install` relinkea sin
el override devuelve el binario dinamico (la leccion de parted).

Seguro: el UNICO dlopen del arbol esta en linux/LibSensors.c y la receta ya
pasa --disable-sensors; delayacct queda en `no` por no estar libnl en [deps].

Control: NEEDED=0 en todos los ejecutables ELF, y la lista de ficheros del
artefacto no perdio nada contra el sellado anterior.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ACUcwo9mZsE5ocYVE9npih
2026-08-31 14:54:58 +00:00

50 lines
2.9 KiB
TOML

# htop 3.5.1 — monitor de procesos interactivo. Etapa G, tier-2 C. Consumidor TUI canónico de
# ncurses: valida la capa CURSES real (ventanas/teclado/colores), no sólo el lookup de terminfo de less.
#
# Importada de Alpine aports (release tarball, trae configure). Ajustes:
# - deps.build = ["ncurses", "linux-headers"]: htop usa la API de curses widec (-lncursesw) y headers
# de Linux (taskstats/cgroup). Quito lm-sensors del makedepends de Alpine: el soporte de sensores
# es OPCIONAL (libsensors auto-detectado) y no está en el corpus ⇒ `--disable-sensors` explícito.
# - compiler=zig-cc (migrado de gcc, matar-gcc 2026-07-16) (gueto, igual que ncurses/less): zig-cc miscompila estos C clásicos.
# - link=static + sin libtool en el link del binario ⇒ LDFLAGS=-static del lab basta (htop static-pie).
# htop auto-detecta ncursesw (widec) para soporte unicode — la ncurses del corpus es widec.
#
# $CBUILD/$CHOST los da el lab (build==host ⇒ nativo).
name = "htop"
version = "3.5.1"
license = "GPL-2.0-or-later"
[source]
tarball = "https://github.com/htop-dev/htop/releases/download/3.5.1/htop-3.5.1.tar.xz"
sha256 = "526cecd62870aa8d14d2a79a35ea197e4e2b5317d275b567cee0574b2ddb2e9a"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
# Split de la info de depuración (SDD 23 etapa 4, tanda de HOJAS). Entra en `hash_inputs`.
strip_debug = true
# `AM_LDFLAGS=-static` en compile Y en install — la QUINTA causa de que `link = "static"` mienta,
# y la única que NO es culpa de la receta: `Makefile.am:243` hace `AM_LDFLAGS += -rdynamic` bajo
# `if HTOP_LINUX`, y el wrapper de cc del lab (`sandbox.rs:597`) quita el `-static` inyectado ante
# `-rdynamic`/`--export-dynamic`/un `.so` en la línea. La regla del wrapper es correcta —`-static`
# no puede sostenerse contra un link intrínsecamente dinámico—, pero acá el `-rdynamic` de upstream
# es sólo para simbolizar el backtrace del manejador de fallos, no una necesidad de enlace. Con
# `-static` el backtrace pierde nombres; es exactamente lo que `link = "static"` ya pedía.
# Resultado sin esto: `-lncursesw` resolvía a la `libncursesw.so.6` DEL ROOTFS de Alpine — una
# entrada no declarada, que es lo que el audit destapó (2026-08-31, 4 mintiendo).
# En `install` no es opcional: si `make install` relinkea sin el override, devuelve el binario
# dinámico y el arreglo se pierde (la lección de `parted`).
# Seguro porque el ÚNICO `dlopen` del árbol está en `linux/LibSensors.c` y acá va `--disable-sensors`;
# delayacct (que usaría libnl) queda en `no` por no estar libnl en `[deps]`.
[build.phases]
configure = "./configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man --enable-cgroup --enable-taskstats --disable-sensors"
compile = "make -j\"$(nproc)\" AM_LDFLAGS=-static"
install = "make DESTDIR=/out install AM_LDFLAGS=-static"
[deps]
build = ["binutils", "ncurses", "linux-headers", "make"]