gnome: gi-foreign-typelibs (b3:a159373c) — un .gir NO es un typelib
Con accountsservice adentro, la capa JS avanzó y murió un paso después: JS ERROR: Requiring Atspi, version 2.0: Typelib file for namespace 'DBus', version '1.0' not found `Atspi-2.0.gir` declara `<include name="DBus" version="1.0"/>`. El `DBus-1.0.gir` YA estaba en /usr/share/gir-1.0 (lo pone gi-foreign-girs), pero gjs resuelve en runtime contra el TYPELIB compilado, no contra el XML — el XML le alcanza al scanner, no al cargador. Receta aparte y no un compile agregado a gi-foreign-girs porque `yupana radio` da **17 sellados cayendo a deuda** ahí (catorce recetas la declaran para escanear, mutter y gnome-shell entre ellas). Compilar cuatro typelibs no justifica reconstruir la cima. No se pisan: una instala sólo en gir-1.0 y la otra sólo en girepository-1.0. Mismo criterio que separó udev-pc de libudev-zero. Se compilan CUATRO nombrados explícitamente —DBus-1.0, DBusGLib-1.0, fontconfig-2.0, freetype2-2.0— y no un glob: los .gir de X11 y cairo arrastran includes que no tenemos y son justamente los que hacían SIGSEGV a g-ir-compiler (la razón de nuestro -Dbuild_introspection_data=false). Además: gnome-start lanza accounts-daemon explícito. Su .service de activación está instalado, pero la activación por bus de sistema pasa por dbus-daemon-launch-helper, que acá no es setuid root; correr como root probablemente alcanzaría, pero depender de eso es depender de un accidente. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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 `<include name="DBus" version="1.0"/>`, 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"]
|
||||||
@@ -183,6 +183,21 @@ export XDG_SESSION_ID=1
|
|||||||
export XDG_SEAT=seat0
|
export XDG_SEAT=seat0
|
||||||
export XDG_VTNR=1
|
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
|
if [ "${DIAG:-1}" = 1 ]; then
|
||||||
ulimit -c unlimited 2>/dev/null || true
|
ulimit -c unlimited 2>/dev/null || true
|
||||||
echo '/core.%e.%p' > /proc/sys/kernel/core_pattern 2>/dev/null || true
|
echo '/core.%e.%p' > /proc/sys/kernel/core_pattern 2>/dev/null || true
|
||||||
|
|||||||
@@ -28,7 +28,11 @@ HAMMER="${HAMMER:-./target/release/hammer}"; KEEP="${KEEP:-0}"
|
|||||||
if [ $# -gt 0 ]; then
|
if [ $# -gt 0 ]; then
|
||||||
TARGETS=("$@")
|
TARGETS=("$@")
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
# ── cierre transitivo por el grafo de recetas, en orden topológico ──────────────────────────────
|
# ── cierre transitivo por el grafo de recetas, en orden topológico ──────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user