From cbca6143f0b5633f217f7bf203cf26a3bb717b52 Mon Sep 17 00:00:00 2001 From: sergio Date: Sun, 21 Jun 2026 10:57:59 -0400 Subject: [PATCH] =?UTF-8?q?Etapa=20G:=20ncurses=20+=20less=20=E2=80=94=20l?= =?UTF-8?q?ib=20TUI/terminfo=20al=20corpus=20(53=E2=86=9255)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ncurses es la lib fundacional del userland TUI (destraba less/htop/top/nano/ncdu). La importo de Alpine pero RE-ANCLADA al release ESTABLE 6.5 de GNU (pineable; el import traia el snapshot semanal de invisible-mirror, no reproducible) y SIMPLIFICADA a estatico widec (--without-shared --enable-widec), sin el binding C++ (rompe contra el libstdc++ del host) ni la maraña .so del APKBUILD. El install crea los symlinks libncurses/libtinfo/libcurses -> libncursesw para que un consumidor que enlaza -lncurses/-ltinfo resuelva. less 704 es el primer CONSUMIDOR que lo valida: deps.build=[ncurses], enlaza -ltinfo, sale static-pie y pagina. Confirma ncurses usable como lib del corpus. Notas: gcc del lab = Alpine musl gcc (x86_64-alpine-linux-musl, no glibc) -> mezcla limpia con objetos zig-cc/musl. gueto gcc en ambos (el build de ncurses corre tic para generar terminfo; zig-cc lo miscompila). Corpus 53->55. --- recipes/less.toml | 30 +++++++++++++++++++++++++ recipes/ncurses.toml | 53 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 recipes/less.toml create mode 100644 recipes/ncurses.toml diff --git a/recipes/less.toml b/recipes/less.toml new file mode 100644 index 00000000..aedbc6d7 --- /dev/null +++ b/recipes/less.toml @@ -0,0 +1,30 @@ +# less 704 — paginador. Etapa G, tier-2 C. Primer CONSUMIDOR de ncurses (valida la lib): enlaza +# -ltinfo de ncurses para la base de datos terminfo (control de terminal/scroll). +# +# Importada de Alpine aports; ajustes: URL fija (`less-704.tar.gz`; el import dejó la substitución +# bash `${pkgver/_beta/-beta}` sin expandir) + sha256 oficial. El tarball trae `configure`. +# +# deps.build = ["ncurses"]: el lab apila el árbol de ncurses (libtinfo.a→libncursesw.a + term.h + +# tinfo.pc + terminfo) en /usr y el configure de less lo halla por pkgconf. link=static ⇒ less ELF +# estático musl. compiler=gcc (gueto): zig-cc miscompila estos C clásicos (segfault, ver file/jq). +# $CBUILD/$CHOST los da el lab (build==host ⇒ nativo). + +name = "less" +version = "704" + +[source] +tarball = "https://www.greenwoodsoftware.com/less/less-704.tar.gz" +sha256 = "20a0b0a2bb2525fa53c7eee9beb854b4c9cf172eabb209af7020743547bfe9fb" + +[build] +compiler = "gcc" +target = "x86_64-linux-musl" +link = "static" + +[build.phases] +configure = "./configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man" +compile = "make -j\"$(nproc)\"" +install = "make DESTDIR=/out install" + +[deps] +build = ["ncurses"] diff --git a/recipes/ncurses.toml b/recipes/ncurses.toml new file mode 100644 index 00000000..01a13cd3 --- /dev/null +++ b/recipes/ncurses.toml @@ -0,0 +1,53 @@ +# ncurses 6.5 — librería de terminal/TUI (terminfo + curses). Etapa G, lib build-dep (tier-2 C). +# Destraba el userland TUI: less, htop, top, nano, ncdu, etc. +# +# Importada de Alpine aports, pero RE-ANCLADA y SIMPLIFICADA: +# 1. FUENTE = el release ESTABLE 6.5 de GNU (pineable, sha256 fijo). El import traía el snapshot +# semanal de invisible-mirror (`ncurses-${pkgver/_p/-}.tgz`, con substitución bash sin expandir +# y un "current/" que rota — no reproducible). El stable trae `configure` pregenerado. +# 2. ESTÁTICO widec (el lab enlaza estático): `--without-shared --enable-widec`. La config de Alpine +# pedía `--with-shared` (distro dinámico); acá sólo queremos los .a. Las libs widec llevan sufijo +# `w` (libncursesw.a) ⇒ el install crea los symlinks libncurses.a→libncursesw.a (+ tinfo/curses) +# para que un consumidor que enlaza `-lncurses`/`-ltinfo` los halle. (Sin la maraña .so del import.) +# 3. terminfo queda en /usr/share/terminfo (sin la reubicación a /etc del APKBUILD: complejidad que +# no aporta en el lab; el `--with-terminfo-dirs` cubre las rutas de runtime). +# +# GUETO gcc: el build CORRE `tic` (recién compilado) para generar la BD de terminfo; con zig-cc el +# tic miscompilado segfaultearía (mismo patrón que file/jq). $CBUILD/$CHOST los da el lab (build==host +# ⇒ nativo, tic corre de verdad). + +name = "ncurses" +version = "6.5" + +[source] +tarball = "https://ftp.gnu.org/gnu/ncurses/ncurses-6.5.tar.gz" +sha256 = "136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6" + +[build] +compiler = "gcc" +target = "x86_64-linux-musl" +link = "static" + +[build.phases] +configure = ''' +./configure --build=$CBUILD --host=$CHOST --prefix=/usr \ + --without-shared --without-debug --without-ada --without-tests \ + --without-cxx --without-cxx-binding \ + --enable-widec --enable-pc-files --with-pkg-config-libdir=/usr/lib/pkgconfig \ + --disable-stripping --disable-rpath-hack \ + --with-terminfo-dirs="/etc/terminfo:/usr/share/terminfo" +''' +compile = "make -j\"$(nproc)\"" +install = ''' +make DESTDIR=/out install +# widec ⇒ las libs/pc llevan sufijo `w`; symlinks para que `-lncurses`/`-ltinfo`/`-lcurses` resuelvan. +cd /out/usr/lib +for lib in ncurses form panel menu; do + [ -e lib${lib}w.a ] && ln -sf lib${lib}w.a lib${lib}.a + [ -e pkgconfig/${lib}w.pc ] && ln -sf ${lib}w.pc pkgconfig/${lib}.pc +done +for lib in curses tic tinfo; do + ln -sf libncursesw.a lib${lib}.a + [ -e pkgconfig/ncursesw.pc ] && ln -sf ncursesw.pc pkgconfig/${lib}.pc +done +'''