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.
79 lines
4.8 KiB
TOML
79 lines
4.8 KiB
TOML
# 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",
|
|
]
|