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/gtk3.toml TOML · 88 líneas · 5.8 KB Historia crudo

la cadena GTK3 se enlazaba estática dentro de dos `.so`: cuatro variantes `-shared` y xkeyboard-config al corpus a828e74c4 · Sergio ·

1# GTK 3.24.43 — el toolkit de Gecko. LA PIEZA CLAVE DE LA PLATAFORMA GECKO.
2#
3# ══ POR QUÉ EXISTE ESTA RECETA ═════════════════════════════════════════════════════════════════
4# Firefox no tiene alternativa: en Linux su único toolkit es GTK3 (`widget/gtk`). Y **Waterfox y Zen
5# son forks de Gecko**, así que los tres consumen exactamente esta misma pieza. Una sola receta
6# sostiene a los tres navegadores — de ahí que valga la pena ponerla en el CORPUS y no en una cola.
7#
8# Al medir el cierre antes de escribirla, TODO lo que pide ya estaba en el corpus salvo `atk`, que se
9# escribió primero. No es una torre nueva: es una pieza que faltaba sobre cimientos ya puestos.
10#
11# ══ WAYLAND-ONLY: `-Dx11_backend=false` ════════════════════════════════════════════════════════
12# La distro es Wayland-only por decisión firme, y GTK3 permite compilar SIN el backend X11 — a
13# diferencia de OBS, que exigía `find_package(X11)` incondicional. Apagarlo saca de un plumazo
14# libX11/libXext/libXi/libXrandr/libXcursor/libXdamage/libXcomposite/libXfixes/libXinerama del
15# cierre: **la cadena X11 vive sólo en `incoming-kde`, y meterla en el CORPUS la pondría en las cinco
16# imágenes**. Este flag es lo que mantiene la plataforma Gecko coherente con la postura de la distro.
17#
18# ⚠ Consecuencia que hay que tener escrita: un Firefox construido contra este GTK3 **no puede correr
19# bajo X11 ni bajo Xwayland como cliente X**. Bajo Wayland nativo sí. No es una limitación
20# accidental, es la postura de la distro aplicada al navegador.
21#
22# ══ LO DEMÁS QUE SE APAGA ══════════════════════════════════════════════════════════════════════
23#   introspection    sólo la usan los bindings dinámicos (gjs/PyGObject); Gecko consume GTK en C.
24#                    Evita arrastrar gobject-introspection y repetir la torre de GNOME sin motivo.
25#   demos/examples/  son programas de muestra: no entran al artefacto y alargan el build.
26#   tests
27#   cloudproviders,  integraciones opcionales (Dropbox y compañía, impresión por CUPS, colorimetría):
28#   print_backends,  ninguna hace falta para que un navegador dibuje, y cada una es una lib más.
29#   colord
30#   gtk_doc          gtk-doc no está en el corpus.
31name    = "gtk3"
32version = "3.24.43"
33license = "LGPL-2.1-or-later"
34
35[source]
36tarball = "https://download.gnome.org/sources/gtk+/3.24/gtk+-3.24.43.tar.xz"
37sha256  = "7e04f0648515034b806b74ae5d774d87cffb1a2a96c468cb5be476d51bf2f3c7"
38
39[build]
40compiler = "zig-cc"
41target   = "x86_64-linux-musl"
42# DINÁMICO y no negociable: GTK carga módulos (temas, IM, print) por dlopen, y Gecko linkea
43# `libgtk-3.so.0` por SONAME. Un GTK estático no abre una ventana.
44link  = "dynamic"
45flags = []
46
47[build.phases]
48configure = '''
49PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release \
50  -Ddefault_library=shared \
51  -Dwayland_backend=true -Dx11_backend=false -Dbroadway_backend=false \
52  -Dintrospection=false -Ddemos=false -Dexamples=false -Dtests=false \
53  -Dgtk_doc=false -Dman=false \
54  -Dcloudproviders=false -Dprint_backends=file -Dcolord=no
55'''
56compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
57install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
58
59# `.pc Requires` → `[deps].build`, el patrón del corpus: gtk+-3.0.pc pide gdk-pixbuf, pango, cairo,
60# atk, glib y epoxy; cada uno arrastra los suyos (harfbuzz→glib, pango→fribidi+harfbuzz,
61# gdk-pixbuf→libpng/libjpeg/libtiff, cairo→pixman/freetype/fontconfig).
62[deps]
63# ⚠ VARIANTES `-shared`, Y **EN LUGAR DE** LAS ESTÁTICAS, NUNCA JUNTO A ELLAS. `libgtk-3.so` es un
64# objeto compartido: un `.a` sin PIC adentro da `relocation R_X86_64_32 cannot be used against symbol
65# 'png_default_write_data'`, el mismo cuadro de gdk-pixbuf. Las variantes existen en el corpus desde
66# la campaña de GTK4 — buscar antes de escribir.
67# Se SUSTITUYE porque las dos variantes instalan **los mismos `.pc` y las mismas cabeceras**
68# (verificado listando los dos artefactos): declarar ambas serían dos artefactos peleando por
69# `lib/pkgconfig/glib-2.0.pc`. Una u otra, jamás las dos.
70build = [
71  "meson", "samurai", "python3", "pkgconf",
72  # ── LAS VARIANTES `-shared`, PORQUE gtk3 PRODUCE DOS `.so` (2026-09-05) ──────────────────────
73  # `libgtk-3.so` y `libgdk-3.so` se cargan SIEMPRE juntas (libxul declara NEEDED las dos). Con las
74  # variantes estáticas, cada una se llevaba su propia copia de pango, cairo, gdk-pixbuf y harfbuzz
75  # adentro ⇒ dos sistemas de tipos de Pango en un proceso, y el navegador moría antes de pintar:
76  #     GLib-GObject-CRITICAL: cannot register existing type 'PangoFontMap'
77  # Medido con `nm -D --defined-only` sobre cada `.so`, preguntando quién DEFINE
78  # `pango_font_map_get_type` — salieron libgtk-3 y libgdk-3, y ninguna debía.
79  # ⚠ `libepoxy` sigue estático y también queda embebido en las dos: se deja porque NO registra
80  # tipos de GObject ni mantiene estado global compartido, así que la duplicación no colisiona. Es
81  # deuda anotada, medida, no un olvido.
82  "atk", "gdk-pixbuf-shared", "pango-shared", "cairo-shared", "libepoxy",
83  "glib-shared", "pcre2-shared", "libffi-shared", "zlib-shared",
84  "harfbuzz-shared", "fribidi", "freetype-shared", "fontconfig-shared", "pixman",
85  "libpng-shared", "libjpeg-turbo-shared", "libtiff-shared",
86  "wayland", "wayland-protocols", "libxkbcommon",
87  "libxml2-shared", "mesa", "libdrm",
88]