diff --git a/recipes/incoming-gnome/gi-foreign-typelibs.toml b/recipes/incoming-gnome/gi-foreign-typelibs.toml new file mode 100644 index 00000000..530169a7 --- /dev/null +++ b/recipes/incoming-gnome/gi-foreign-typelibs.toml @@ -0,0 +1,62 @@ +# gi-foreign-typelibs — compila a TYPELIB los .gir foráneos escritos a mano que trae +# gobject-introspection, y nada más. +# +# QUÉ RESUELVE, y cómo se destapó: gnome-shell arranca, expone `wayland-0` y su capa JS muere en +# +# JS ERROR: Requiring Atspi, version 2.0: Typelib file for namespace 'DBus', version '1.0' not found +# +# `Atspi-2.0.gir` declara ``, y a diferencia del scanner —que se +# conforma con el XML— **gjs necesita el TYPELIB compilado en runtime**. `gi-foreign-girs` ya pone el +# `DBus-1.0.gir` en /usr/share/gir-1.0, pero un .gir no es un typelib. +# +# POR QUÉ UNA RECETA APARTE Y NO AGREGARLE EL COMPILE A gi-foreign-girs: `yupana radio +# gi-foreign-girs` da **17 sellados cayendo a deuda** en la cola incoming-gnome —incluidos mutter y +# gnome-shell—, porque catorce recetas la declaran para escanear. Compilar cuatro typelibs no +# justifica reconstruir la cima. Esta receta no la pisa: instala sólo en girepository-1.0, mientras +# que aquélla instala sólo en gir-1.0, así que las dos conviven en el mismo cierre. Es el mismo +# criterio que separó `udev-pc` de `libudev-zero`. +# +# QUÉ SE COMPILA Y QUÉ NO: los .gir de gobject-introspection se parten en dos grupos. Los que sólo +# dependen de GLib/GObject —o de nada— compilan sin más; los de X11 (xlib, xft, xfixes, xrandr) y +# cairo arrastran includes que no tenemos y son además los que hacían SIGSEGV a g-ir-compiler, que es +# la razón por la que nuestro g-i va con `-Dbuild_introspection_data=false` +# (ver [[gnome-introspection-dinamica]]). Acá se compila el PRIMER grupo, nombrado explícitamente: +# +# DBus-1.0 ← el que pide Atspi, y el motivo de esta receta +# DBusGLib-1.0 ← su compañero; algunas .gir de la era GTK3 lo incluyen +# fontconfig-2.0 ← lo incluye Pango +# freetype2-2.0 ← lo incluye HarfBuzz y Pango +# +# 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 +# peor, produciría typelibs rotos. La lista es corta y explícita para que se vea qué entra. +# +# EL `--includedir` apunta a /usr/share/gir-1.0 (lo que puso gi-foreign-girs) para que g-ir-compiler +# resuelva los includes de un .gir contra los otros .gir del sistema. +name = "gi-foreign-typelibs" +version = "1.84.0" + +[source] +# El mismo tarball que gi-foreign-girs: los .gir salen de ahí. No se compila nada del proyecto. +tarball = "https://download.gnome.org/sources/gobject-introspection/1.84/gobject-introspection-1.84.0.tar.xz" +sha256 = "945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[build.phases] +configure = "true" +compile = "true" +install = ''' +set -e +mkdir -p /out/usr/lib/girepository-1.0 +for g in DBus-1.0 DBusGLib-1.0 fontconfig-2.0 freetype2-2.0; do + g-ir-compiler --includedir=/usr/share/gir-1.0 \ + -o "/out/usr/lib/girepository-1.0/$g.typelib" "gir/$g.gir" +done +ls -l /out/usr/lib/girepository-1.0/ +''' + +[deps] +build = ["gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "libffi", "pcre2", "zlib-shared"] diff --git a/scripts/gnome/gnome-start-qemu.sh b/scripts/gnome/gnome-start-qemu.sh index 5c0ba981..2bcce43a 100755 --- a/scripts/gnome/gnome-start-qemu.sh +++ b/scripts/gnome/gnome-start-qemu.sh @@ -183,6 +183,21 @@ export XDG_SESSION_ID=1 export XDG_SEAT=seat0 export XDG_VTNR=1 +# accounts-daemon: el servicio D-Bus de cuentas (org.freedesktop.Accounts). El shell lo consulta +# desde JavaScript vía `imports.gi.AccountsService` para el nombre y el avatar del usuario del menú. +# +# Se lanza EXPLÍCITO aunque el artefacto instale su `.service` de activación: la activación por bus +# de sistema pasa por `dbus-daemon-launch-helper`, que en una distro normal es setuid root y acá no +# lo es. Corriendo todo como root la activación probablemente funcionaría igual, pero depender de eso +# es depender de un accidente; lanzarlo a mano es una línea y no deja ambigüedad. Si además llegara a +# activarse por bus, el segundo simplemente no adquiere el nombre y se va: no hay daño. +if [ -x /usr/libexec/accounts-daemon ]; then + /usr/libexec/accounts-daemon >/tmp/accounts-daemon.log 2>&1 & + say "accounts-daemon lanzado (pid $!)" +else + say "!! sin /usr/libexec/accounts-daemon — el menú de usuario del shell va a fallar" +fi + if [ "${DIAG:-1}" = 1 ]; then ulimit -c unlimited 2>/dev/null || true echo '/core.%e.%p' > /proc/sys/kernel/core_pattern 2>/dev/null || true diff --git a/scripts/gnome/hydrate-gnome.sh b/scripts/gnome/hydrate-gnome.sh index d17f02f8..042841b3 100755 --- a/scripts/gnome/hydrate-gnome.sh +++ b/scripts/gnome/hydrate-gnome.sh @@ -28,7 +28,11 @@ HAMMER="${HAMMER:-./target/release/hammer}"; KEEP="${KEEP:-0}" if [ $# -gt 0 ]; then TARGETS=("$@") else - TARGETS=(recipes/incoming-gnome/gnome-shell.toml recipes/incoming-gnome/accountsservice.toml) + TARGETS=( + recipes/incoming-gnome/gnome-shell.toml + recipes/incoming-gnome/accountsservice.toml # imports.gi.AccountsService + recipes/incoming-gnome/gi-foreign-typelibs.toml # DBus-1.0, que Atspi-2.0 incluye + ) fi # ── cierre transitivo por el grafo de recetas, en orden topológico ──────────────────────────────