Files
takana/recipes/harfbuzz-shared.toml
Sergio a828e74c40 la cadena GTK3 se enlazaba estática dentro de dos .so: cuatro variantes -shared y xkeyboard-config al corpus
Con `atk` arreglado, atuq llegó más lejos y murió igual, ahora con Pango:

    GLib-GObject-CRITICAL: cannot register existing type 'PangoFontMap'
    … decenas de líneas … tipo '<invalid>'

MISMO CUADRO, CULPABLE DISTINTO Y MÁS GRANDE. `gtk3` produce DOS objetos compartidos —libgtk-3.so y
libgdk-3.so— y libxul declara NEEDED las dos, así que se cargan siempre juntas. Con las variantes
ESTÁTICAS de sus deps, cada una se llevaba adentro su propia copia. Medido con el mismo instrumento
que cazó a atk, `nm -D --defined-only`, preguntando quién DEFINE cada símbolo:

    pango_font_map_get_type → libgdk-3.so, libgtk-3.so, libgailutil-3.so
    cairo_create            → libgdk-3.so, libgtk-3.so
    gdk_pixbuf_get_type     → libgdk-3.so, libgtk-3.so
    hb_buffer_create        → libgdk-3.so, libgtk-3.so, libgailutil-3.so

Y se comprobó el otro lado: libxul NO embebe ninguna —enlaza libgtk-3/libgdk-3 como debe—, así que
la duplicación es toda interna del par GTK3.

Cuatro variantes nuevas: harfbuzz-shared, cairo-shared, gdk-pixbuf-shared, pango-shared. Sólo cambia
el modo de librería; se conservan todos los switches del canónico para no arrastrar deps nuevas.

DOS DEUDAS ANOTADAS, NO OLVIDADAS: `fribidi` y `pixman` siguen estáticos —no existe variante— pero
quedan embebidos en UNA sola .so cada uno, así que no hay copia que colisione; y `libepoxy` sí queda
en las dos, y se deja porque no registra tipos de GObject ni mantiene estado global. Si algún día
otra .so del mismo proceso los embebe, vuelve el cuadro.

`firefox` swapea las mismas cuatro: declarar las ESTÁTICAS junto a un gtk3 que trae las compartidas
son dos artefactos peleando por el mismo `pango.pc`, que es la otra forma conocida de este fallo.

Y `xkeyboard-config` SUBE AL CORPUS. Existía idéntica en las cuatro colas de escritorio (un solo md5
entre las cuatro, verificado antes de mover) y atuq, que vive en el corpus, no podía alcanzar
ninguna: sibling-first y después el catálogo padre, nunca una cola hermana. Sin sus datos el
navegador ni pinta («xkbcommon: failed to add default include path /usr/share/X11/xkb»). Mismo hash
en el corpus que en las colas ⇒ cero rebuilds, y las copias de las colas se quedan donde están.
2026-09-05 12:02:24 +00:00

37 lines
2.3 KiB
TOML

# harfbuzz-shared 14.2.1 — variante DINÁMICA. **Existe por un fallo medido, no por simetría.**
#
# El canónico (`recipes/harfbuzz.toml`) es `-Ddefault_library=static`, así que quien lo enlaza se lo
# traga entero. Y `gtk3` produce DOS objetos compartidos —`libgtk-3.so` y `libgdk-3.so`—, de modo
# que cada uno se llevaba su propia copia. Los dos se cargan siempre juntos (libxul los declara
# NEEDED a los dos) ⇒ dos copias en un proceso, y el navegador moría antes de pintar:
#
# GLib-GObject-CRITICAL: cannot register existing type 'PangoFontMap'
# … decenas de líneas … tipo '<invalid>'
#
# Se midió con `nm -D --defined-only` sobre cada `.so` del rootfs, preguntando quién DEFINE
# `pango_font_map_get_type` / `cairo_create` / `gdk_pixbuf_get_type` / `hb_buffer_create`.
# Respuesta: `libgtk-3.so` Y `libgdk-3.so`, las dos. Debía ser una sola librería, y ninguna de ellas.
#
# Es la misma regla que ya arrastraba el corpus desde GTK4 y que la cadena GTK3 se había saltado:
# **las deps de una `.so` van a las variantes `-shared`, en lugar de las estáticas y jamás junto a
# ellas** (las dos instalan los mismos `.pc` y cabeceras).
#
# Sólo cambia el modo de librería: se conservan TODOS los switches del canónico para no arrastrar
# deps nuevas ni cambiar qué se construye.
name = "harfbuzz-shared"
version = "14.2.1"
license = "MIT"
[source]
tarball = "https://github.com/harfbuzz/harfbuzz/releases/download/14.2.1/harfbuzz-14.2.1.tar.xz"
sha256 = "a54a5d8e9380a41fbb762ce367bcbf7704792dfca0d93f1bbca86c5a57902e0e"
[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 -Ddefault_library=shared -Dglib=enabled -Dgobject=disabled -Dcairo=disabled -Dicu=disabled -Dgraphite=disabled -Dfreetype=enabled -Dtests=disabled -Ddocs=disabled -Dintrospection=disabled -Dutilities=disabled"
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", "freetype-shared", "glib-shared", "pcre2-shared", "libffi-shared", "zlib-shared", "libpng-shared"]