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 1181Shell 82Rust 62Markdown 521515 Definiciones

plataforma Gecko: atk + GTK3 Wayland-only — la base que comparten Firefox, Waterfox y Zen

GTK3 no existía en NINGUNA cola y es el único toolkit de Gecko en Linux. Como
Waterfox y Zen son forks de Gecko, los tres navegadores consumen exactamente esta
misma pieza: una receta sostiene a los tres. Por eso va al CORPUS y no a una cola
—una receta resuelve sibling-first y después el catálogo padre, nunca una cola
hermana—, que es la lección de mpv y justo lo que OBS no pudo cumplir al quedar
atado a incoming-kde por Qt6. La plataforma nace bien puesta para que los tres
navegadores no repitan ese error.

Al medir el cierre antes de escribir, TODO estaba ya en el corpus salvo `atk`. Un
ladrillo chico destrabando una pieza grande: por eso atk fue primero.

WAYLAND-ONLY de verdad, no de intención: -Dx11_backend=false. A diferencia de OBS
—que exigía find_package(X11) incondicional— GTK3 sí deja apagarlo, y eso saca
libX11/libXext/libXi/libXrandr/… del cierre. Esa cadena vive sólo en incoming-kde
y meterla en el corpus la pondría en las CINCO imágenes.
Verificado en el artefacto: los .pc son gdk-wayland-3.0 y gtk+-wayland-3.0 (no hay
gdk-x11-3.0), libgtk-3.so.0 no enlaza X11 ni xcb, y libgdk-3.so trae NEEDED
libwayland-client/cursor/egl + libxkbcommon.

⚠ Consecuencia escrita en la receta: un Firefox contra este GTK3 no correrá como
cliente X11 ni bajo Xwayland. Bajo Wayland nativo sí. Es la postura de la distro
aplicada al navegador, no un accidente.

Las deps van a las variantes -shared EN LUGAR DE las estáticas, nunca junto a
ellas: libgtk-3.so es un objeto compartido y un .a sin PIC adentro da
`relocation R_X86_64_32 against png_default_write_data`. Se sustituye y no se suma
porque ambas variantes instalan los MISMOS .pc y cabeceras — declarar las dos
serían dos artefactos peleando por lib/pkgconfig/glib-2.0.pc.

7c58f6b62ec9026932458e35f2dab1dde4414227 · por Sergio · (hace 1 mes) · padre e684c26e5 · ver el árbol en este commit

Delta semántico

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

2 archivos · +122 −0

diff --git a/recipes/atk.toml b/recipes/atk.toml
new file mode 100644
index 00000000..43ff64a8
--- /dev/null
+++ b/recipes/atk.toml
@@ -0,0 +1,44 @@
+# ATK 2.38.0 — la capa de accesibilidad de GTK. Primer ladrillo de la PLATAFORMA GECKO.
+#
+# ══ POR QUÉ ENTRA AHORA: ES LO ÚNICO QUE LE FALTA A GTK3 ═══════════════════════════════════════
+# Firefox —y con él Waterfox y Zen, que son forks de Gecko— sólo tiene un toolkit en Linux: GTK3.
+# GTK3 no existía en ninguna cola, y al medir su cierre resultó que **todo lo demás YA está en el
+# corpus** (glib, cairo, pango, gdk-pixbuf, libepoxy, harfbuzz, fribidi, libxml2, wayland,
+# wayland-protocols, libxkbcommon). El único hueco era éste. Un ladrillo chico destrabando una pieza
+# grande: por eso va primero.
+#
+# ══ AL CORPUS, Y NO A UNA COLA — LA REGLA QUE OBS NO PUDO CUMPLIR ══════════════════════════════
+# Las tres —Firefox, Waterfox, Zen— comparten esta plataforma entera, y una app compartida sólo se
+# alcanza desde el CORPUS: una receta resuelve sibling-first y después el catálogo padre, nunca una
+# cola hermana. Es exactamente la lección que dejó mpv, y lo contrario de lo que le pasó a OBS, que
+# quedó atado a `incoming-kde` porque Qt6 vive sólo ahí. La plataforma Gecko nace bien puesta para
+# que los tres navegadores no repitan ese error.
+#
+# ══ SÓLO GObject, SIN X11 NI GI ════════════════════════════════════════════════════════════════
+# `-Dintrospection=false`: la introspección exige gobject-introspection y sólo la usan los bindings
+# dinámicos (gjs/PyGObject). GTK3 la consume en C, y un consumidor en C no la necesita. Es también
+# lo que evita repetir la torre de [[gnome-introspection-dinamica]] sin razón.
+# `-Ddocs=false`: gtk-doc no está en el corpus y la documentación no entra al artefacto.
+name    = "atk"
+version = "2.38.0"
+license = "LGPL-2.1-or-later"
+
+[source]
+tarball = "https://download.gnome.org/sources/atk/2.38/atk-2.38.0.tar.xz"
+sha256  = "ac4de2a4ef4bd5665052952fe169657e65e895c5057dffb3c2a810f6191a0c36"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+# DINÁMICO: GTK3 es una librería compartida y ATK entra en su cierre; un `.a` no-PIC dentro de
+# `libgtk-3.so` es el cuadro de gdk-pixbuf otra vez.
+link  = "dynamic"
+flags = []
+
+[build.phases]
+configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Ddefault_library=shared -Dintrospection=false -Ddocs=false"
+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", "glib", "pcre2", "libffi", "zlib"]
diff --git a/recipes/gtk3.toml b/recipes/gtk3.toml
new file mode 100644
index 00000000..0b79272b
--- /dev/null
+++ b/recipes/gtk3.toml
@@ -0,0 +1,78 @@
+# GTK 3.24.43 — el toolkit de Gecko. LA PIEZA CLAVE DE LA PLATAFORMA GECKO.
+#
+# ══ POR QUÉ EXISTE ESTA RECETA ═════════════════════════════════════════════════════════════════
+# Firefox no tiene alternativa: en Linux su único toolkit es GTK3 (`widget/gtk`). Y **Waterfox y Zen
+# son forks de Gecko**, así que los tres consumen exactamente esta misma pieza. Una sola receta
+# sostiene a los tres navegadores — de ahí que valga la pena ponerla en el CORPUS y no en una cola.
+#
+# Al medir el cierre antes de escribirla, TODO lo que pide ya estaba en el corpus salvo `atk`, que se
+# escribió primero. No es una torre nueva: es una pieza que faltaba sobre cimientos ya puestos.
+#
+# ══ WAYLAND-ONLY: `-Dx11_backend=false` ════════════════════════════════════════════════════════
+# La distro es Wayland-only por decisión firme, y GTK3 permite compilar SIN el backend X11 — a
+# diferencia de OBS, que exigía `find_package(X11)` incondicional. Apagarlo saca de un plumazo
+# libX11/libXext/libXi/libXrandr/libXcursor/libXdamage/libXcomposite/libXfixes/libXinerama del
+# cierre: **la cadena X11 vive sólo en `incoming-kde`, y meterla en el CORPUS la pondría en las cinco
+# imágenes**. Este flag es lo que mantiene la plataforma Gecko coherente con la postura de la distro.
+#
+# ⚠ Consecuencia que hay que tener escrita: un Firefox construido contra este GTK3 **no puede correr
+# bajo X11 ni bajo Xwayland como cliente X**. Bajo Wayland nativo sí. No es una limitación
+# accidental, es la postura de la distro aplicada al navegador.
+#
+# ══ LO DEMÁS QUE SE APAGA ══════════════════════════════════════════════════════════════════════
+#   introspection    sólo la usan los bindings dinámicos (gjs/PyGObject); Gecko consume GTK en C.
+#                    Evita arrastrar gobject-introspection y repetir la torre de GNOME sin motivo.
+#   demos/examples/  son programas de muestra: no entran al artefacto y alargan el build.
+#   tests
+#   cloudproviders,  integraciones opcionales (Dropbox y compañía, impresión por CUPS, colorimetría):
+#   print_backends,  ninguna hace falta para que un navegador dibuje, y cada una es una lib más.
+#   colord
+#   gtk_doc          gtk-doc no está en el corpus.
+name    = "gtk3"
+version = "3.24.43"
+license = "LGPL-2.1-or-later"
+
+[source]
+tarball = "https://download.gnome.org/sources/gtk+/3.24/gtk+-3.24.43.tar.xz"
+sha256  = "7e04f0648515034b806b74ae5d774d87cffb1a2a96c468cb5be476d51bf2f3c7"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+# DINÁMICO y no negociable: GTK carga módulos (temas, IM, print) por dlopen, y Gecko linkea
+# `libgtk-3.so.0` por SONAME. Un GTK estático no abre una ventana.
+link  = "dynamic"
+flags = []
+
+[build.phases]
+configure = '''
+PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release \
+  -Ddefault_library=shared \
+  -Dwayland_backend=true -Dx11_backend=false -Dbroadway_backend=false \
+  -Dintrospection=false -Ddemos=false -Dexamples=false -Dtests=false \
+  -Dgtk_doc=false -Dman=false \
+  -Dcloudproviders=false -Dprint_backends=file -Dcolord=no
+'''
+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"
+
+# `.pc Requires` → `[deps].build`, el patrón del corpus: gtk+-3.0.pc pide gdk-pixbuf, pango, cairo,
+# atk, glib y epoxy; cada uno arrastra los suyos (harfbuzz→glib, pango→fribidi+harfbuzz,
+# gdk-pixbuf→libpng/libjpeg/libtiff, cairo→pixman/freetype/fontconfig).
+[deps]
+# ⚠ VARIANTES `-shared`, Y **EN LUGAR DE** LAS ESTÁTICAS, NUNCA JUNTO A ELLAS. `libgtk-3.so` es un
+# objeto compartido: un `.a` sin PIC adentro da `relocation R_X86_64_32 cannot be used against symbol
+# 'png_default_write_data'`, el mismo cuadro de gdk-pixbuf. Las variantes existen en el corpus desde
+# la campaña de GTK4 — buscar antes de escribir.
+# Se SUSTITUYE porque las dos variantes instalan **los mismos `.pc` y las mismas cabeceras**
+# (verificado listando los dos artefactos): declarar ambas serían dos artefactos peleando por
+# `lib/pkgconfig/glib-2.0.pc`. Una u otra, jamás las dos.
+build = [
+  "meson", "samurai", "python3", "pkgconf",
+  "atk", "gdk-pixbuf", "pango", "cairo", "libepoxy",
+  "glib-shared", "pcre2-shared", "libffi-shared", "zlib-shared",
+  "harfbuzz", "fribidi", "freetype-shared", "fontconfig-shared", "pixman",
+  "libpng-shared", "libjpeg-turbo-shared", "libtiff-shared",
+  "wayland", "wayland-protocols", "libxkbcommon",
+  "libxml2-shared", "mesa", "libdrm",
+]