psmisc 23.7 (killall pstree fuser prtstat pslog) y gavinhoward/bc 7.0.3 (bc Y dc del mismo árbol). Ninguna estaba en el corpus, y lo de psmisc es lo que el plan daba por cubierto sin estarlo: procps-ng NO trae killall ni pstree ni fuser — procps-ng es ps/top/free/kill/pgrep/pkill/pidof/uptime/vmstat/w/watch. bc es el de gavinhoward y no el de GNU por la cadena: C99 sin dependencias, bc y dc en un árbol, y es el bc de sistema de Alpine y FreeBSD. El de GNU arrastra ed y flex, y su dc va en otro paquete. ⚠ killall5 NO lo trae psmisc: es de sysvinit. Acá lo cubre arje-zero por FUNCIÓN (es PID 1 y apaga él) ⇒ se retira con los indultos, no se reemplaza. Son 3 de los 4 que la tabla prometía, dicho así para que no vuelva a prometer lo que no hay. Dos pisones de psmisc, los dos escritos en la receta para no repetirlos: 1. `-lncurses` no existe acá (la nuestra es widec ⇒ libncursesw.a). No sirve LIBS=-lncursesw —el AC_CHECK_LIB compila un programa de prueba CON -lncurses, no pregunta si el símbolo resuelve— ni la variable de caché con `make TERMCAP_LIB=…`, porque src_pstree_LDADD = @TERMCAP_LIB@ se sustituye en tiempo de configure y el Makefile queda con -lncurses LITERAL. Lo que funciona es un enlace libncurses.a → libncursesw.a en el scratch y un -L. 2. Y ese -L se comió el -static. El harness inyecta LDFLAGS=-static para las recetas link="static" (takana-build/src/lib.rs:285); reemplazar LDFLAGS lo pierde. Los seis binarios sellaron DINÁMICOS sin que nada fallara: killall respondía bien y sólo pstree moría en ejecución con `Error relocating /lib/libncursesw.so.6`, tomando la librería del anfitrión. Un `file` lo dice en un segundo; ninguna prueba del build lo iba a decir. Los dos van a `base` en targets.toml, y el censo baja de 69 a 64. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
68 lines
4.1 KiB
TOML
68 lines
4.1 KiB
TOML
# psmisc 23.7 — `killall`, `pstree`, `fuser`, `prtstat`, `pslog`, `peekfd`.
|
|
#
|
|
# ── POR QUÉ ENTRA ───────────────────────────────────────────────────────────────────────────────
|
|
# **`procps-ng` NO los trae**, y eso era lo que el plan de botar busybox daba por supuesto hasta que
|
|
# se midió: `killall killall5 pstree fuser` eran cuatro de los applets que sólo proveía busybox, con
|
|
# procps-ng declarado en los 7 perfiles. procps-ng da `ps top free kill pgrep pkill pidof uptime
|
|
# vmstat w watch` — matar por NOMBRE y el árbol de procesos son de este paquete, no de aquél.
|
|
#
|
|
# ⚠ `killall5` NO lo trae psmisc: es de sysvinit (`/sbin/killall5`, el «mata todo menos PID 1» que
|
|
# usan los guiones de apagado). Acá lo cubre arje-zero por FUNCIÓN —es PID 1 y apaga él— así que el
|
|
# applet se retirará con los indultos, no se reemplaza. Son 3 de los 4, y decirlo así evita que la
|
|
# tabla vuelva a prometer lo que no hay.
|
|
#
|
|
# ── EL DETALLE QUE MUERDE: `-lncurses` no existe acá ────────────────────────────────────────────
|
|
# `pstree` pide `tgetent`, y el `configure` la busca por NOMBRE DE LIBRERÍA: `-ltinfo`, `-lncurses`,
|
|
# `-ltermcap`. Nuestra ncurses es `--enable-widec`, o sea **`libncursesw.a`**, y ninguno de los tres
|
|
# nombres existe ⇒ `configure: error: Cannot find tinfo, ncurses or termcap libraries`.
|
|
#
|
|
# Se probaron dos caminos que NO sirven, y conviene dejarlos escritos para no repetirlos:
|
|
# · `LIBS=-lncursesw` — el `AC_CHECK_LIB` no pregunta «¿resuelve tgetent?»: **compila un programa
|
|
# de prueba con `-lncurses`** y mira si enlaza. Otra librería en LIBS no cambia eso.
|
|
# · `ac_cv_lib_ncurses_tgetent=yes` + `make TERMCAP_LIB=-lncursesw` — la variable de caché sí
|
|
# salta la prueba, pero después falla el enlace igual: `src_pstree_LDADD = @LIBINTL@
|
|
# @TERMCAP_LIB@` se SUSTITUYE en tiempo de configure, así que el Makefile queda con `-lncurses`
|
|
# LITERAL, no con una referencia a `$(TERMCAP_LIB)`. Sobreescribir esa variable en la línea de
|
|
# `make` no toca nada. (Medido: `error: unable to find static system library 'ncurses'`.)
|
|
#
|
|
# Lo que sí funciona es darle el nombre que busca: un enlace `libncurses.a → libncursesw.a` en un
|
|
# directorio propio del árbol, y `-L` a ese directorio. Así el `AC_CHECK_LIB` pasa de verdad —sin
|
|
# mentirle a la caché— y el enlace resuelve contra la ncursesw real. El enlace vive en el scratch
|
|
# del build, no viaja al artefacto.
|
|
#
|
|
# ⚠ Y el `-L` se AÑADE a `$LDFLAGS`, no lo reemplaza. El harness inyecta `LDFLAGS=-static` para las
|
|
# recetas `link = "static"` (`takana-build/src/lib.rs:285`), así que un `LDFLAGS="-L…"` a secas se
|
|
# lo come y los seis binarios salen DINÁMICOS sin que nada falle — medido acá: sellaron, `killall`
|
|
# corría, y `pstree` moría con `Error relocating /lib/libncursesw.so.6` al tomar la librería del
|
|
# sistema anfitrión. Es la misma forma que [[cgo-sin-baseline-sigill]]: redefinir una variable que
|
|
# el harness ya puebla pierde en silencio lo que el harness había puesto.
|
|
|
|
name = "psmisc"
|
|
version = "23.7"
|
|
license = "GPL-2.0-or-later"
|
|
|
|
[source]
|
|
tarball = "https://downloads.sourceforge.net/project/psmisc/psmisc/psmisc-23.7.tar.xz"
|
|
sha256 = "58c55d9c1402474065adae669511c191de374b0871eec781239ab400b907c327"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
flags = []
|
|
|
|
[deps]
|
|
build = ["ncurses", "make", "pkgconf"]
|
|
|
|
[build.phases]
|
|
# `--disable-nls`: musl no trae <libintl.h>, y es lo que hace el resto del corpus.
|
|
# SELinux viene apagado por defecto en este configure (lo dice su configure.ac), no hace falta flag.
|
|
configure = '''
|
|
mkdir -p "$PWD/.compat-ncurses"
|
|
ln -sf /usr/lib/libncursesw.a "$PWD/.compat-ncurses/libncurses.a"
|
|
./configure --build=$CBUILD --host=$CHOST --prefix=/usr \
|
|
--disable-nls LDFLAGS="$LDFLAGS -L$PWD/.compat-ncurses"
|
|
'''
|
|
compile = 'make'
|
|
install = 'make DESTDIR=/out install'
|