gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

⎇ main recipes/ncurses-tools.toml TOML · 67 siq'ikuna · 4.5 KB Ñawpa willay ch'uya

qillqa: el awk propio — 3531 líneas, sólo libc, y CERO divergencias contra dos oráculos ae6f0b45d · Sergio ·

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