gnome: accountsservice SELLA (b3:0328b0d0) — cae la frontera de la C-ABI de logind

Los dos huecos que bloqueaban esta receta estaban medidos desde ayer símbolo por
símbolo, y ninguno era de accountsservice. Los dos cerrados:

1. libelogind pasa de 14 a 22 símbolos (tawasuyu 8d892151b, re-pineado a b56aeff46,
   re-sellado b3:9650ee06). Los ocho nuevos son los que usa accountsservice, con
   `sd_login_monitor_*` implementado sobre inotify en /run/systemd/{sessions,seats,users}.

2. `fgetspent_r` no existe en musl ⇒ accountsservice-fgetspent_r-musl.patch. NO es
   sustituir por `fgetspent()` a secas: daemon.c guarda los buffers en un GHashTable
   y `fgetspent()` devuelve un struct estático que se reescribe en cada llamada —
   todas las entradas de la tabla apuntarían al último usuario leído. El parche copia
   el registro al buffer del llamador, y sigue el patrón que el propio accountsservice
   ya usa para /etc/passwd (`src/fgetpwent.c` bajo `#ifndef HAVE_FGETPWENT`).

Produce `AccountsService-1.0.typelib`, que es exactamente lo que la capa JS pedía.

De paso, dos cosas que este frente enseñó y quedan horneadas:
- libelogind necesitaba `cargo_vendor_dir` (el `vendor/` de smithay entró a la rama
  selfhost con el merge de main; el mismo choque que ya tenía arje-logind-compat).
- `hydrate-gnome.sh` ahora hidrata DOS raíces por defecto. accountsservice no es dep
  de build de nadie: es dep de RUNTIME, resuelta por gjs al arrancar. **El cierre de
  build no es el cierre de runtime**, y lo que el shell carga por `imports.gi.*` hay
  que nombrarlo a mano o no entra al rootfs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-29 11:54:52 -04:00
co-authored by Claude Opus 5
parent b29bdbb346
commit 08fc1d4b92
4 changed files with 140 additions and 17 deletions
+11 -1
View File
@@ -19,7 +19,17 @@ set -uo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
RFS="${RFS:-work/gnome-rootfs}"; STORE="${STORE:-./store}"; LINK="${LINK:-static}"
HAMMER="${HAMMER:-./target/release/hammer}"; KEEP="${KEEP:-0}"
TARGETS=("${@:-recipes/incoming-gnome/gnome-shell.toml}")
# Por defecto se hidratan DOS raíces, no una. accountsservice no es dep de build de gnome-shell —no
# aparece en su meson.build ni en su cierre— sino dep de RUNTIME: la capa JS del shell hace
# `imports.gi.AccountsService` y gjs resuelve el typelib al arrancar. Todo lo que el shell carga por
# `imports.gi.*` es invisible al grafo de deps, así que hay que nombrarlo acá o no entra al rootfs.
# El cierre de BUILD no es el cierre de RUNTIME; ésta es la lista de las raíces que faltan.
# (no `${@:-...}`: con dos valores por defecto y comillas, bash los pasaría como UN solo argumento)
if [ $# -gt 0 ]; then
TARGETS=("$@")
else
TARGETS=(recipes/incoming-gnome/gnome-shell.toml recipes/incoming-gnome/accountsservice.toml)
fi
# ── cierre transitivo por el grafo de recetas, en orden topológico ──────────────────────────────
PLAN=$(python3 - "${TARGETS[@]}" <<'PY'