# gnome-shell 48.8 — LA CIMA del frente GNOME: la UI del escritorio (barra superior, overview,
# pantalla de bloqueo). Su lógica está en JavaScript sobre gjs/spidermonkey y su compositor es
# mutter; por eso es lo último que cae y por eso toda la onda 3 tuvo que ser una ISLA DINÁMICA —
# el shell lee sus dependencias por typelib, y un typelib exige una .so real que gjs pueda dlopen().
# Ver [[gnome-introspection-dinamica]].
#
# ── LA FRONTERA, YA CERRADA ─────────────────────────────────────────────────────────────────────
# El draft de esta receta estimaba "~10 recetas nuevas, dominadas por eds+icu; es una campaña, no
# una tanda". Fue una campaña, y el presupuesto se movió en las dos direcciones:
#   · icu4c NO había que autorarla: ya estaba sellada por KDE y sólo depende de pkgconf+python3,
#     o sea del corpus padre, así que copiarla a esta cola dio hash idéntico y cero rebuild.
#   · libxml2 para libsoup NO hacía falta (libsoup 3.x la dejó de usar), ni para libical (sólo la
#     enlaza un binario de build). Sí para eds, y ahí sí en .so ⇒ libxml2-shared.
#   · NSS, en cambio, NO se pudo esquivar: el -DENABLE_SMIME=OFF de eds está roto en 3.56.2 porque
#     camel.c incluye nss/nspr sin guardar. Se pagó, y selló a la primera (ver nss.toml).
# Las deps de :71-89 verificadas contra el meson.build real están TODAS selladas hoy:
#   atk-bridge-2.0 → at-spi2-core · libecal-2.0 + libedataserver-1.2 → evolution-data-server
#   gcr-4 → gcr · polkit-agent-1 → polkit · libxml-2.0 → libxml2-shared · json-glib
#   clutter/cogl/mtk/libmutter → mutter · gjs · gtk4 · gnome-desktop-4 · gsettings-desktop-schemas
#
# ── APAGADOS, y la receta que cada uno ahorra ───────────────────────────────────────────────────
# Ojo que acá TODOS los defaults vienen en true (meson.options), así que no apagar es optar por la
# frontera más cara:
#   -Dnetworkmanager=false → libnm (NetworkManager entero). Es el applet de red del panel; el
#                        escritorio arranca sin él. libsecret, la otra dep de esa rama, YA está
#                        sellada (entró por eds), así que lo único que falta acá es NetworkManager.
#   -Dportal_helper=false → el propio meson ERROREA si se deja en true sin networkmanager (:113).
#   -Dcamera_monitor=false → libpipewire-0.3. Es el indicador de "cámara en uso"; PipeWire es una
#                        campaña propia y no la pide nada más de esta onda.
#   -Dsystemd=false     → libsystemd. Cuarta vez que la C-ABI de logind aparece en este frente y
#                        cuarta que se esquiva; mutter sigue siendo la única sin salida (por eso
#                        existe libelogind sobre arje-sdlogin-compat).
#   -Dman=false         → rst2man (docutils). Mismo motivo que en mutter, donde hubo que sacar
#                        subdir('doc/man') a mano.
#   -Dtests=false -Dgtk_doc=false
#   -Dextensions_app=false -Dextensions_tool=false → la app GTK4 de extensiones y su CLI. NO son el
#                        shell: son herramientas aparte que se instalan al lado. Se dejan fuera de
#                        la primera pasada para que la cima caiga con la superficie mínima; ambas
#                        tienen todas sus deps ya selladas, así que encenderlas después es barato.
#
# El segundo sed borra `#include <X11/Xlib.h>` y `<X11/Xatom.h>` de src/shell-app-usage.c. NO es
# una mutilación: son includes VESTIGIALES de la era X11 — el fichero no usa un solo símbolo de X11
# (`grep X11\|XA_\|Display \*\|Atom ` devuelve exactamente esas dos líneas y nada más). El código X11
# de verdad vive en src/tray/ (el tray XEmbed), y ÉSE sí está cerrado por `have_x11_client`, que sale
# de mutter y acá es false porque nuestro mutter es Wayland puro. O sea que shell-app-usage.c es el
# único que quedó fuera del guard, por olvido del upstream.
#
# El primer sed saca `subdir('po')` (:324). CUARTA vez en esta campaña que el msgfmt de gettext-tiny —lo
# único que hay en el corpus— aborta con SIGABRT, acá en po/ar.po; ya pasó en iso-codes, gcr y eds.
# La deuda está clara y anotada: hace falta autorar el gettext de GNU de verdad. Se pierden los
# textos traducidos del shell, no el shell.
#
# ISLA DINÁMICA: link=dynamic y las variantes -shared de la cadena C (cairo/freetype/libpng/
# libjpeg-turbo/libtiff/zlib/fontconfig), igual que gtk4 y mutter. Con las estáticas el linker corta
# con `relocation R_X86_64_32 ... recompile with -fPIC` — es el muro que ya frenó a mutter.
name    = "gnome-shell"
version = "48.8"
license = "GPL-2.0-or-later"

[source]
tarball = "https://download.gnome.org/sources/gnome-shell/48/gnome-shell-48.8.tar.xz"
sha256  = "cb9b7d86cf362530e648e68caaf109a32af4e832874a26791ca8789773efd233"

[build]
compiler = "zig-cc"
target   = "x86_64-linux-musl"
link     = "dynamic"

[build.phases]
configure = "sed -i \"/^subdir('po')$/d\" meson.build && sed -i '/^#include <X11\\/X\\(lib\\|atom\\).h>$/d' src/shell-app-usage.c && PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared -Dnetworkmanager=false -Dportal_helper=false -Dcamera_monitor=false -Dsystemd=false -Dman=false -Dtests=false -Dgtk_doc=false -Dextensions_app=false -Dextensions_tool=false -Dc_args=-Wno-error=date-time"
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", "gettext-tiny", "py3-setuptools", "gi-foreign-girs", "gobject-introspection", "glib", "glib-introspected", "gjs", "mutter", "gtk4", "gnome-desktop", "gsettings-desktop-schemas", "at-spi2-core", "dbus-shared", "gcr", "polkit", "evolution-data-server", "json-glib", "libxml2-shared", "libsecret", "pulseaudio", "libsndfile", "spidermonkey", "graphene", "pango", "gdk-pixbuf", "mesa", "libdrm", "libepoxy", "pixman", "harfbuzz", "fribidi", "wayland", "wayland-protocols", "libinput", "libxkbcommon", "cairo-shared", "libpng-shared", "freetype-shared", "libjpeg-turbo-shared", "libtiff-shared", "fontconfig-shared", "zlib-shared", "expat", "libffi", "pcre2", "sqlite-shared", "libsoup", "libical", "icu4c", "nspr", "nss", "libgcrypt-shared", "libgpg-error-shared", "libuuid-shared", "nghttp2", "libpsl", "p11-kit", "lcms2", "libdisplay-info", "hwdata", "colord", "libgudev", "libudev-zero", "libgusb", "libusb", "libei", "libevdev", "xkeyboard-config", "iso-codes", "libseccomp", "libelogind", "udev-pc", "libxcvt"]
