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 1463Shell 152Markdown 90Rust 853028 Sutichaykuna

⎇ fee383ff64be0f09a065475ac72a0056f4054e4a recipes/incoming-gnome/gi-foreign-typelibs.toml TOML · 89 siq'ikuna · 5.0 KB Ñawpa willay ch'uya

gnome: 🏔 LA SESIÓN ARRANCA Y SE QUEDA VIVA — cae el último muro de la capa JS 417ba2a50 · sergio ·

1# gi-foreign-typelibs — compila a TYPELIB los .gir foráneos escritos a mano que trae
2# gobject-introspection, y nada más.
3#
4# QUÉ RESUELVE, y cómo se destapó: gnome-shell arranca, expone `wayland-0` y su capa JS muere en
5#
6#   JS ERROR: Requiring Atspi, version 2.0: Typelib file for namespace 'DBus', version '1.0' not found
7#
8# `Atspi-2.0.gir` declara `<include name="DBus" version="1.0"/>`, y a diferencia del scanner —que se
9# conforma con el XML— **gjs necesita el TYPELIB compilado en runtime**. `gi-foreign-girs` ya pone el
10# `DBus-1.0.gir` en /usr/share/gir-1.0, pero un .gir no es un typelib.
11#
12# POR QUÉ UNA RECETA APARTE Y NO AGREGARLE EL COMPILE A gi-foreign-girs: `yupana radio
13# gi-foreign-girs` da **17 sellados cayendo a deuda** en la cola incoming-gnome —incluidos mutter y
14# gnome-shell—, porque catorce recetas la declaran para escanear. Compilar cuatro typelibs no
15# justifica reconstruir la cima. Esta receta no la pisa: instala sólo en girepository-1.0, mientras
16# que aquélla instala sólo en gir-1.0, así que las dos conviven en el mismo cierre. Es el mismo
17# criterio que separó `udev-pc` de `libudev-zero`.
18#
19# QUÉ SE COMPILA Y QUÉ NO: los .gir de gobject-introspection se parten en dos grupos. Los que sólo
20# dependen de GLib/GObject —o de nada— compilan sin más; los de X11 (xlib, xft, xfixes, xrandr) y
21# cairo arrastran includes que no tenemos y son además los que hacían SIGSEGV a g-ir-compiler, que es
22# la razón por la que nuestro g-i va con `-Dbuild_introspection_data=false`
23# (ver [[gnome-introspection-dinamica]]). Acá se compila el PRIMER grupo, nombrado explícitamente:
24#
25#   DBus-1.0        ← el que pide Atspi, y el motivo original de esta receta
26#   DBusGLib-1.0    ← su compañero; algunas .gir de la era GTK3 lo incluyen
27#   fontconfig-2.0  ← lo incluye Pango
28#   freetype2-2.0   ← lo incluye HarfBuzz y Pango
29#   cairo-1.0       ← lo incluyen Gdk-4.0, Pango-1.0 y PangoCairo-1.0
30#   GL-1.0          ← lo incluyen Clutter-16 y Cogl-16, o sea que sin él no carga `Meta`
31#   libxml2-2.0     ← lo incluyen Camel-1.2, EBook-1.2 y EDataServer-1.2 (evolution-data-server)
32#
33# No se ponen en un glob a propósito: un glob metería los de X11 y el build fallaría a lo lejos, o
34# peor, produciría typelibs rotos. La lista es corta y explícita para que se vea qué entra.
35#
36# LA LISTA NO SE ADIVINÓ, y la forma de sacarla es lo reusable: se leen los `<include>` de TODOS los
37# .gir del rootfs hidratado —incluidos los PRIVADOS de mutter y del shell, que están fuera de
38# /usr/share/gir-1.0— y se cruzan contra los typelibs presentes. Lo que queda es la lista exacta.
39#
40# La primera vez lo hice sólo sobre los girs del sistema y me faltaron GL-1.0 y libxml2-2.0, que
41# entran por `Clutter-16`/`Cogl-16` (⇒ sin GL no carga `Meta`, o sea el compositor entero) y por
42# `Camel`/`EBook`/`EDataServer`. Un ciclo de imagen+arranque perdido por auditar de menos.
43#
44# `xlib-2.0` NO entra aunque figure como huérfano: lo incluye únicamente `xft-2.0`, que a su vez no
45# lo incluye nadie. Es un .gir presente sin consumidor, no una falta.
46#
47# cairo-1.0 es el único que necesita trato especial, y por la misma razón que en gi-foreign-girs: no
48# viene como `.gir` sino como `.gir.in`, con dos placeholders que g-i sustituye por configure_file.
49# Se reproduce la sustitución con el mismo sed, para que el XML que se compila sea idéntico al que ya
50# está instalado en /usr/share/gir-1.0 (si divergieran, el typelib describiría otra librería).
51# Se compila con nuestro g-ir-compiler y NO segfaultea: el crash que motivó
52# `-Dbuild_introspection_data=false` era del g-i de antes de la isla dinámica.
53#
54# EL `--includedir` apunta a /usr/share/gir-1.0 (lo que puso gi-foreign-girs) para que g-ir-compiler
55# resuelva los includes de un .gir contra los otros .gir del sistema.
56name    = "gi-foreign-typelibs"
57version = "1.84.0"
58
59[source]
60# El mismo tarball que gi-foreign-girs: los .gir salen de ahí. No se compila nada del proyecto.
61tarball = "https://download.gnome.org/sources/gobject-introspection/1.84/gobject-introspection-1.84.0.tar.xz"
62sha256  = "945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779"
63
64[build]
65compiler = "zig-cc"
66target   = "x86_64-linux-musl"
67link     = "dynamic"
68
69[build.phases]
70configure = "true"
71compile   = "true"
72install   = '''
73set -e
74mkdir -p /out/usr/lib/girepository-1.0
75for g in DBus-1.0 DBusGLib-1.0 fontconfig-2.0 freetype2-2.0 GL-1.0 libxml2-2.0; do
76  g-ir-compiler --includedir=/usr/share/gir-1.0 \
77    -o "/out/usr/lib/girepository-1.0/$g.typelib" "gir/$g.gir"
78done
79# cairo-1.0: mismo sed que gi-foreign-girs, para compilar EXACTAMENTE el XML que está instalado.
80sed -e 's/@CAIRO_GIR_PACKAGE@/cairo-gobject/g' \
81    -e 's/@CAIRO_SHARED_LIBRARY@/libcairo-gobject.so.2/g' \
82    gir/cairo-1.0.gir.in > cairo-1.0.gir
83g-ir-compiler --includedir=/usr/share/gir-1.0 \
84  -o /out/usr/lib/girepository-1.0/cairo-1.0.typelib cairo-1.0.gir
85ls -l /out/usr/lib/girepository-1.0/
86'''
87
88[deps]
89build = ["gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "libffi", "pcre2", "zlib-shared"]