# ncurses 6.5 — VARIANTE con los PROGRAMAS: `clear`, `reset`, `tput`, `tset`, `infocmp`, `tic`. # NO sustituye a `recipes/ncurses.toml`. # # ── POR QUÉ EXISTE ────────────────────────────────────────────────────────────────────────────── # La canónica instala `make install.libs install.includes`: librería y cabeceras, nada más. Es # deliberado —de ella cuelgan 15 recetas— pero el efecto medido es que `clear` y `reset` en una # imagen de takana eran **el applet de busybox**, con `ncurses` declarado en los 7 perfiles # (`scripts/busybox-censo-proveedores.py`, 2026-09-21). Tocar la canónica re-hashearía a sus 15 # consumidores; va como variante, igual que `xz-tools` sobre `xz` y `zstd-cli` sobre `zstd`. # # ── LA DECISIÓN QUE HAY DETRÁS: terminfo ──────────────────────────────────────────────────────── # `clear` y `reset` necesitan saber qué secuencias manda cada terminal, y eso sale de la base # terminfo (~4000 entradas, varios MB) o de los `--with-fallbacks` COMPILADOS DENTRO de la librería. # La canónica ya pinea nueve: linux, vt100, vt220, xterm, xterm-256color, screen, tmux, # tmux-256color, ansi. Esta variante instala `install.progs` y **no** `install.data`: los binarios # viajan, la base de datos no. Con eso, `clear` funciona para los nueve TERM que cubren la consola # del metal, QEMU y cualquier ssh desde un emulador moderno, y para un TERM exótico contesta # «unknown terminal type» en vez de pintar basura. # # El corolario, dicho para que nadie lo descubra a la mala: **`tic` e `infocmp` viajan pero no # tienen base que leer**. Sirven para compilar una entrada propia, no para consultar el sistema. name = "ncurses-tools" version = "6.5" license = "MIT" [source] tarball = "https://ftp.gnu.org/gnu/ncurses/ncurses-6.5.tar.gz" sha256 = "136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" # Mismo `strip_debug` que la canónica: la variante no es sitio para cambiar de política. strip_debug = true [deps] build = ["binutils"] [build.phases] # `configure` IDÉNTICO al de la canónica —mismos fallbacks, mismo widec— porque los binarios tienen # que hablar la misma librería que ya viaja. Cambiar una perilla acá haría que `tput` resolviera # distinto que la `ncursesw` que enlazan las aplicaciones. configure = "./configure --prefix=/usr --without-shared --with-normal --enable-widec --without-debug --without-ada --without-tests --enable-pc-files --with-pkg-config-libdir=/usr/lib/pkgconfig --with-fallbacks=linux,vt100,vt220,xterm,xterm-256color,screen,tmux,tmux-256color,ansi" # ⚠ Los diez binarios salen DINÁMICOS aunque la receta diga `link = "static"` y el harness inyecte # `LDFLAGS=-static`, y la causa no es un flag que falte: es que ncurses usa `-static`/`-dynamic` # como **marcadores de tramo** alrededor de las librerías —su forma portable de # `-Wl,-Bstatic … -Wl,-Bdynamic`— y no como una decisión global. El Makefile generado trae: # # LIBS_TIC = -L../lib -static -lncursesw -lncursesw -dynamic # LIBS_TINFO = -static -lncursesw -dynamic # # o sea «ncursesw estática, lo demás dinámico», que es exactamente lo que `--with-normal` promete. # El `-dynamic` llega al final de la línea de enlace y gana por orden. Se quita sobreescribiendo las # DOS variables en la línea de `make` (ahí sí: son variables del Makefile, no valores ya sustituidos # por el configure — la diferencia que hizo fallar el primer intento con `psmisc`). # # Es el tercer sabor del agujero que documenta `scripts/static-audit.sh`: cada sistema de build # decide dónde pone el flag, y `link = "static"` es una declaración que hay que ir a COMPROBAR al # binario. Aquí lo comprueba `file`; en el corpus, ese guión. compile = 'make LIBS_TIC="-L../lib -static -lncursesw -lncursesw" LIBS_TINFO="-static -lncursesw"' # Sólo `install.progs`. Ni `install.libs` ni `install.includes`: los publica la canónica, y dos # copias de `libncursesw.a` disputándose la misma ruta hacen que quién gana dependa del orden de # hidratación — que es justo lo que no debe decidir nada. Mismo criterio que `xz-tools`. install = 'make LIBS_TIC="-L../lib -static -lncursesw -lncursesw" LIBS_TINFO="-static -lncursesw" install.progs DESTDIR=/out'