tawasuyu

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…

TOML 1411Shell 141Markdown 85Rust 842918 Definiciones

gnome-console: sus dos fronteras eran vte y libgtop, y detrás había tres deps que el seed no ve

El censo decía 2 recetas (libgtop, vte) y son 5, porque las fronteras de una frontera no están en
el seed:

  · `lz4-shared`  — vte pide liblz4 sin perilla (comprime el scrollback) y produce una .so; el
                    liblz4.a canónico tiene 76 reubicaciones R_X86_64_32 fuera de .debug. Son
                    pocas comparadas con las 3205 de libarchive y da igual: una sola rompe el link.
  · `fast-float`  — vte compila una sonda con <fast_float/fast_float.h> y, si falla, cae a un
                    subproyecto GIT que `--wrap-mode=nodownload` no puede traer. La salida no es
                    aflojar el wrap-mode (un build con red no es reproducible), es tener la
                    cabecera: librería de sólo headers, receta de tres líneas. Versión = la que
                    upstream pinea en su propio .wrap (v6.1.6), no «la última».
  · `libgtop`     — la que sí decía el seed. Es lo que le permite a la terminal saber que hay un
                    proceso vivo en la pestaña antes de cerrarla.

Tres perillas de vte son BLOQUEANTES, no ahorros: `_b_symbolic_functions` (-Bsymbolic, que el lld
de zig no soporta — el mismo muro que costó gjs), `gnutls` y `_systemd`, que piden libs que no
existen acá. Quedan encendidas icu, fribidi y a11y, que son las que se notan: codificaciones
heredadas, bidireccional, y que un lector de pantalla vea la terminal.

Y el `sed` del `ar` va SÓLO en libgtop, que es la única de las cinco cuyo po/ar.po trae msgstr[5]
(3). vte, gnome-console y las otras traen cero: la mina de gettext-tiny es por fichero, no por
proyecto, y un sed de más es una diferencia sin motivo entre artefacto y fuente.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

0c76fa2288a3199ddf0fef24b721ceb1fd673011 · por Sergio · (hace 29 d) · padre 92ce5d681 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

5 archivos · +232 −0

diff --git a/recipes/incoming-gnome/fast-float.toml b/recipes/incoming-gnome/fast-float.toml
new file mode 100644
index 00000000..3de7789a
--- /dev/null
+++ b/recipes/incoming-gnome/fast-float.toml
@@ -0,0 +1,50 @@
+# fast_float 6.1.6 — conversión texto→float sin `strtod`. Es una librería de SÓLO CABECERAS: esta
+# receta no compila nada, copia headers.
+#
+# ── POR QUÉ ENTRA AL CATÁLOGO: sin ella vte no construye, y el modo de fallar es feo ────────────
+# `vte/meson.build:694` intenta compilar un programa de prueba con `#include
+# <fast_float/fast_float.h>`; si el sistema no lo tiene, cae al **subproyecto git**:
+#
+#     [wrap-git]  revision = v6.1.6  url = https://github.com/fastfloat/fast_float.git
+#
+# Y las recetas de esta cola configuran `--wrap-mode=nodownload` —correctamente: el sandbox no tiene
+# red y un build que descarga no es reproducible—, así que ahí vte muere. La salida no es aflojar el
+# wrap-mode, es tener la cabecera. Una receta de tres líneas evita un agujero de red en el build.
+#
+# ⚠ LA VERSIÓN NO ES «la última»: es **la que upstream pinea en su propio `.wrap`** (v6.1.6). Si vte
+# sube el pin, esto sube con él. Tomar una más nueva porque sí sería decidir por upstream sobre una
+# API que su prueba de compilación verifica — la prueba usa `from_chars(start, end, value, 16)`, o
+# sea la sobrecarga con base, que no existe en las 3.x.
+#
+# ⚠ `configure`/`compile` en `true` a propósito, como `x11-compose-data`: no hay nada que compilar y
+# un `make` inventado sólo serviría para que un fallo futuro sea más difícil de leer.
+#
+# ⚠ NO instala `.pc`, y es correcto: vte sólo pide el `.pc` (`dependency('fast_float')`) en la rama
+# donde el header del sistema NO sirve. Con el header puesto, esa rama no se toma — `fast_float_dep`
+# queda en `dependency('', required: false)` y no se busca ningún `.pc`. Si algún día otro
+# consumidor lo pide por pkg-config, se le agrega: es una línea, y hoy sería adivinar el nombre.
+name    = "fast-float"
+version = "6.1.6"
+license = "Apache-2.0 OR MIT OR BSL-1.0"
+
+[source]
+tarball = "https://github.com/fastfloat/fast_float/archive/refs/tags/v6.1.6.tar.gz"
+sha256  = "4458aae4b0eb55717968edda42987cabf5f7fc737aee8fede87a70035dba9ab0"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "static"
+
+[build.phases]
+configure = "true"
+compile   = "true"
+install   = '''
+set -e
+mkdir -p /out/usr/include
+cp -a include/fast_float /out/usr/include/
+test -f /out/usr/include/fast_float/fast_float.h
+'''
+
+[deps]
+build = []
diff --git a/recipes/incoming-gnome/gnome-console.toml b/recipes/incoming-gnome/gnome-console.toml
new file mode 100644
index 00000000..609f2cb5
--- /dev/null
+++ b/recipes/incoming-gnome/gnome-console.toml
@@ -0,0 +1,47 @@
+# gnome-console 48.1 (kgx) — el emulador de terminal de GNOME. Cierra uno de los tres `wanted` que
+# le quedaban al perfil.
+#
+# ── «PERO SI YA ESTÁ `foot`» — sí, y no es lo mismo ─────────────────────────────────────────────
+# `foot` está sellado y es el terminal del perfil de sway. Lo que no hace es INTEGRARSE: no habla
+# el tema oscuro/claro de GNOME, no aparece en el «Abrir en terminal» de nautilus —que busca el
+# `org.gnome.Terminal`/`org.gnome.Console` por D-Bus—, y no tiene las pestañas ni el aviso de
+# proceso vivo que el escritorio espera. `targets.toml` ya lo anotaba: «foot ya está, pero no
+# integra». Un escritorio con terminal ajeno funciona; se nota en la costura.
+#
+# ── SUS DOS FRONTERAS, y las dos entran con esta tanda ─────────────────────────────────────────
+#     meson.build:155  vte-2.91-gtk4 >= 0.77.0   ← el widget de terminal de verdad
+#     meson.build:157  libgtop-2.0               ← saber qué corre en la pestaña antes de cerrarla
+# El resto de su cierre ya estaba: gtk4, libadwaita, pango, pcre2, gsettings-desktop-schemas.
+#
+# ── LAS PERILLAS: sólo dos, y las dos ya vienen bien ────────────────────────────────────────────
+# `meson_options.txt` de este proyecto tiene EXACTAMENTE dos opciones, `devel` y `tests`, ambas
+# `false` por defecto. Se declaran igual —como en gvfs— porque un default no es una decisión
+# escrita, y el día que upstream cambie uno, esta receta no cambia de comportamiento en silencio.
+#
+# ⚠ `desktop-file-validate` y `appstreamcli` los busca con `required: false` (`data/meson.build:3-4`)
+# ⇒ son validadores de sus propios ficheros, no deps. No se declaran: lo único que harían es
+# validar, y si no están el build sigue. Es lo contrario del `update-desktop-database` de nautilus,
+# que sí era `required` y sí tumbó el configure.
+#
+# ⚠ SIN `sed` del `ar`: su `po/ar.po` tiene CERO `msgstr[5]` (medido) ⇒ el árabe de esta app se
+# conserva. La mina de gettext-tiny es por-fichero, no por-proyecto.
+name    = "gnome-console"
+version = "48.1"
+license = "GPL-3.0-or-later"
+
+[source]
+tarball = "https://download.gnome.org/sources/gnome-console/48/gnome-console-48.1.tar.xz"
+sha256  = "70d10999fe5f5b1bf4b5583efc4828d8361c7c87e8fbae49d4a4ff9726276bcf"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddevel=false -Dtests=false -Dc_args=-Wno-error=date-time"
+compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
+install   = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "gtk4", "libadwaita", "vte", "libgtop", "gsettings-desktop-schemas", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "pcre2", "lz4-shared", "icu4c", "fribidi", "harfbuzz", "fontconfig-shared", "freetype-shared", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "appstream", "libxmlb", "libyaml-shared", "curl", "openssl", "zstd", "libffi", "zlib-shared"]
diff --git a/recipes/incoming-gnome/libgtop.toml b/recipes/incoming-gnome/libgtop.toml
new file mode 100644
index 00000000..80ac2623
--- /dev/null
+++ b/recipes/incoming-gnome/libgtop.toml
@@ -0,0 +1,41 @@
+# libgtop 2.41.3 — lectura portable de procesos y sistema (lo que en Linux es leer `/proc` con
+# cuidado). La pide `gnome-console` sin perilla: `meson.build:157`, `dependency('libgtop-2.0')`.
+#
+# ── QUÉ HACE EN UNA TERMINAL, que no es obvio ──────────────────────────────────────────────────
+# gnome-console la usa para saber **qué está corriendo dentro de la pestaña**: si al cerrar hay un
+# proceso hijo vivo, avisa antes de matarlo; y de ahí saca el título y el indicador de «esto sigue
+# ocupado». Sin libgtop no es que se vea distinto: es que cerrar una pestaña con un `make` adentro
+# deja de preguntar.
+#
+# Autotools del tarball publicado (no hay meson en este proyecto). `--disable-static`: el consumidor
+# es un ejecutable y podría enlazar la `.a`, pero toda esta cola es la isla dinámica y mezclar
+# criterios por receta es cómo se llega a dos versiones de la misma lib en el mismo proceso.
+#
+# ⚠ EL `sed` DEL `ar`: medido en ESTE tarball, `po/ar.po` trae **3** `msgstr[5]`, y el `msgfmt` de
+# gettext-tiny muere con SIGILL ante el primero dejando un `.mo` de 0 bytes
+# ([[gettext-tiny-msgfmt-plural-arabe]]). De las cinco recetas de esta tanda es la ÚNICA que lo
+# necesita —gnome-console, vte, libspelling y gnome-keyring traen `ar.po` con CERO `msgstr[5]`, y
+# gnome-text-editor no trae `ar.po`—, así que el sed va donde se midió que hace falta y no «por si
+# acaso»: un sed de más es una diferencia sin motivo entre el artefacto y su fuente.
+name    = "libgtop"
+version = "2.41.3"
+license = "GPL-2.0-or-later"
+
+[source]
+tarball = "https://download.gnome.org/sources/libgtop/2.41/libgtop-2.41.3.tar.xz"
+sha256  = "775676df958e2ea2452f7568f28b2ea581063d312773dd5c0b7624c1b9b2da8c"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+configure = "sed -i '/^ar$/d' po/LINGUAS && CFLAGS='-O2 -fPIC' PKG_CONFIG_PATH=/usr/lib/pkgconfig ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --disable-dependency-tracking"
+compile   = 'make -j"$(nproc)"'
+install   = 'make DESTDIR=/out install'
+
+[deps]
+# glib de la ISLA (shadow de esta cola) + su cierre `.pc`, que es lo que `PKG_CHECK_MODULES(GLIB,
+# glib-2.0 gobject-2.0)` de `configure.ac:107` va a resolver.
+build = ["make", "pkgconf", "gettext-tiny", "glib", "libffi", "pcre2", "zlib-shared"]
diff --git a/recipes/incoming-gnome/lz4-shared.toml b/recipes/incoming-gnome/lz4-shared.toml
new file mode 100644
index 00000000..5ff31364
--- /dev/null
+++ b/recipes/incoming-gnome/lz4-shared.toml
@@ -0,0 +1,38 @@
+# lz4-shared 1.10.0 — variante DINÁMICA de lz4 para la isla de GNOME.
+#
+# La pide `vte` (`meson.build:650`, `dependency('liblz4')` sin perilla: lz4 es lo que comprime el
+# scrollback de la terminal en disco), y vte produce `libvte-2.91-gtk4.so`. La canónica
+# (`recipes/lz4.toml`) es `BUILD_SHARED=no` y su `.a` no es PIC:
+#
+#     readelf -r liblz4.a | awk '/^Relocation section/{s=$3}
+#                                /R_X86_64_32/{if (s !~ /debug/) n++} END{print n+0}'
+#     ⇒ 76
+#
+# Son pocas —libarchive daba 3205— y la tentación es pensar que con 76 «casi entra». No entra: una
+# sola reubicación absoluta basta para que el link de la `.so` muera. El número mide cuánto trabajo
+# tendría el linker, no si es posible.
+#
+# Mismo criterio que `libarchive-shared` en esta cola: la canónica NO se toca (la consumen zstd-cli
+# y compañía en el corpus, y tocarla re-hashea sin motivo), el sufijo `-shared` no sombrea, y sólo
+# la ve quien la declara.
+name    = "lz4-shared"
+version = "1.10.0"
+license = "BSD-2-Clause AND GPL-2.0-only"
+
+[source]
+tarball = "https://github.com/lz4/lz4/releases/download/v1.10.0/lz4-1.10.0.tar.gz"
+sha256  = "537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+# Sólo `lib`: los ejecutables (`lz4`, `lz4c`) ya los publica la canónica y dos proveedores del mismo
+# nombre en el store es lo que esta cola evita con los sufijos.
+compile = "make BUILD_SHARED=yes BUILD_STATIC=no MOREFLAGS='-fPIC' -C lib"
+install = "make -C lib install BUILD_SHARED=yes BUILD_STATIC=no PREFIX=/usr DESTDIR=/out"
+
+[deps]
+build = ["make"]
diff --git a/recipes/incoming-gnome/vte.toml b/recipes/incoming-gnome/vte.toml
new file mode 100644
index 00000000..8448f67f
--- /dev/null
+++ b/recipes/incoming-gnome/vte.toml
@@ -0,0 +1,56 @@
+# vte 0.80.5 — el widget de terminal de GNOME: el emulador de verdad (parser de secuencias de
+# escape, scrollback, selección) que gnome-console dibuja alrededor. `gnome-console/meson.build:155`
+# la pide como `vte-2.91-gtk4 >= 0.77.0`, sin perilla.
+#
+# ⚠ Esta receta es C++20, no C. Es la primera de la isla de GNOME que lo es a esta escala.
+#
+# ── LAS PERILLAS, y tres de ellas son bloqueantes, no ahorros ───────────────────────────────────
+#   -D_b_symbolic_functions=false  (default TRUE) → **BLOQUEANTE**. Es `-Bsymbolic`, que el lld de
+#        zig no soporta. Ya está documentado en esta misma cola: es uno de los 13 muros que costó
+#        `gjs` ([[gnome-introspection-dinamica]]). Dejarlo en su default rompe el link, no degrada.
+#   -Dgnutls=false                 (default TRUE) → **BLOQUEANTE**: `gnutls` no existe en el
+#        catálogo. Lo que apaga es el borrado seguro de la memoria del scrollback (`vte_secure_
+#        memset`). Vale decirlo: el historial de la terminal se libera sin sobreescribir.
+#   -D_systemd=false               (default TRUE) → **BLOQUEANTE**: pide `libsystemd`, y acá no hay
+#        (ADR 0007). Apaga el registro de cada terminal como scope de systemd, que no tiene sentido
+#        sin systemd.
+#   -Dgtk3=false                   → GTK3 aparcado por diseño en este frente. gnome-console pide la
+#        variante `-gtk4`, que es la que queda encendida.
+#   -Dglade=false                  → sólo instala el catálogo XML del diseñador Glade, que no está.
+#   -Dgir=false / -Ddocs=false     → typelib y gi-docgen; el consumidor de hoy es C.
+#   -Dicu=true / -Dfribidi=true / -Da11y=true → ENCENDIDAS y no es el default por casualidad: icu4c
+#        y fribidi ya están selladas. icu da las codificaciones heredadas (un `ssh` a una máquina en
+#        latin-1 deja de ser basura) y fribidi el bidireccional (árabe, hebreo). a11y es el árbol de
+#        accesibilidad: sin él un lector de pantalla no ve NADA de lo que pasa en la terminal.
+#
+# ── `fast-float` NO es una dep opcional disfrazada ──────────────────────────────────────────────
+# `meson.build:694` compila una sonda con `#include <fast_float/fast_float.h>`; si falla, cae a un
+# subproyecto **git** que `--wrap-mode=nodownload` no puede traer. Ver `fast-float.toml`, que existe
+# exactamente para que esa sonda pase.
+#
+# ⚠ `lz4-shared` y no `lz4`: vte produce `libvte-2.91-gtk4.so` y el `liblz4.a` canónico no es PIC
+# (76 reubicaciones `R_X86_64_32` fuera de `.debug`). Que sean pocas no lo salva — una sola rompe
+# el link.
+#
+# ⚠ SIN `sed` del `ar`: medido, `po/ar.po` de este tarball tiene CERO `msgstr[5]` ⇒ el msgfmt de
+# gettext-tiny no se atraganta y no hay por qué perder la traducción.
+name    = "vte"
+version = "0.80.5"
+license = "LGPL-3.0-or-later"
+
+[source]
+tarball = "https://download.gnome.org/sources/vte/0.80/vte-0.80.5.tar.xz"
+sha256  = "58a4e00ab5d4a95b4be4dc57b48308deafd72d6839dbbd076648fa353321cc41"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared -D_b_symbolic_functions=false -Dgtk3=false -Dgtk4=true -Dgnutls=false -Dglade=false -Dgir=false -Ddocs=false -D_systemd=false -Dicu=true -Dfribidi=true -Da11y=true -Dc_args=-Wno-error=date-time -Dcpp_args=-Wno-error=date-time"
+compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
+install   = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "fast-float", "glib", "gtk4", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "pcre2", "lz4-shared", "icu4c", "fribidi", "harfbuzz", "fontconfig-shared", "freetype-shared", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "libffi", "zlib-shared"]