Files
SergioandClaude Opus 5 4357b29cb7 busybox 69 → 64: psmisc y bc, las dos piezas que el plan marcaba TRAER
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>
2026-09-21 21:49:57 +00:00

40 lines
2.1 KiB
TOML

# bc 7.0.3 (gavinhoward/bc) — la calculadora POSIX: `bc` Y `dc` en un solo árbol, sin dependencias.
#
# ── POR QUÉ ESTA IMPLEMENTACIÓN Y NO LA DE GNU ──────────────────────────────────────────────────
# El corpus no tenía ninguna: `bc` y `dc` eran dos de los applets que en toda la imagen sólo proveía
# busybox (medido con `scripts/busybox-censo-proveedores.py`, ver `docs/plan-botar-busybox.md`).
# Upstream hay dos candidatos reales:
# · GNU bc — arrastra `ed` y `flex` como build-deps, y `dc` es OTRO paquete (dc de GNU va aparte).
# · gavinhoward/bc — C99 puro, CERO dependencias, `bc` + `dc` del mismo árbol, y es el que usan
# Alpine y FreeBSD como su bc de sistema. Implementa POSIX bc + las extensiones de GNU.
# Para una cadena musl donde cada dep nueva es trabajo, la segunda gana sin discusión.
#
# ── BUILD ───────────────────────────────────────────────────────────────────────────────────────
# No es autotools: `configure.sh` propio que escribe el Makefile. No acepta `--build`/`--host`, así
# que NO se le pasan (un `--host` a un configure que no lo entiende termina en la lista de
# argumentos ignorados o en un error, según el script). El cross a musl lo hace `zig cc` vía $CC.
name = "bc"
version = "7.0.3"
license = "BSD-2-Clause"
[source]
tarball = "https://github.com/gavinhoward/bc/releases/download/7.0.3/bc-7.0.3.tar.xz"
sha256 = "91eb74caed0ee6655b669711a4f350c25579778694df248e28363318e03c7fc4"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
flags = []
[deps]
build = ["make"]
[build.phases]
# `-p bc -p dc` NO existe acá: el binario es multicall por enlaces, como busybox. `PREFIX` en vez de
# `--prefix` porque así lo quiere su configure.sh.
configure = './configure.sh --prefix=/usr --disable-nls'
compile = 'make'
install = 'make DESTDIR=/out install'