gnome: 5 de los 7 typelibs de runtime — gnome-desktop a la isla dinámica + 5 recetas nuevas
De los siete que faltaban quedan dos (Rsvg, IBus). Cerrados acá: GnomeDesktop-4.0 + GnomeBG-4.0 gnome-desktop b3:b3aed0d6 UPowerGlib-1.0 upower b3:95d1081a Geoclue-2.0 geoclue b3:50e9de94 GWeather-4.0 libgweather b3:d289ac66 gnome-desktop NO se duplicó en una variante `-introspected`, y la razón es la regla de los dos registros de GType: mutter y gnome-shell ENLAZAN libgnome-desktop y gjs además dlopearía la .so del typelib ⇒ convivirían la .a enlazada y la .so cargada, cada una con su tabla. Es el cuadro que costó el episodio de colord. `yupana radio` = 2 sellados a deuda (mutter, gnome-shell), el mismo par de siempre. Con introspección encendida los dos seds que borraban `libgnome_rr_gir`/`libgnome_bg_gir` dejan de hacer falta. Su cierre tuvo que pasar a las variantes `-shared`, y no por prolijidad: con `libpng` estática no hay libpng16.so, `libgdk_pixbuf-2.0.so.0` no relocaliza y el `ldd` con que g-ir-scanner resuelve las shlibs sale con 127. **Si una receta introspecta, su cierre entero tiene que ser CARGABLE** — el scanner compila y ejecuta un binario de verdad. Dos recetas entraron por transitividad, no por la lista del shell: - geocode-glib (b3:f24e4147), que pide libgweather. Su `-Dsoup2=false` es LA opción: con el default se construye `geocode-glib-1.0` contra libsoup2 —que esta distro no tiene— y libgweather no la encuentra aunque esté instalada. - py3-gobject/pygobject (b3:492930f2), y ésta ni siquiera va a la imagen: va al CONSTRUCTOR. `gen_locations_variant.py` de libgweather importa gi.repository.GLib para serializar la base de ciudades a un GVariant binario. El formato lo define GLib. Decisiones de alcance escritas en cada receta: geoclue va SIN demonio (-Denable-backend=false evita ModemManager, Avahi y libsoup; la librería cliente habla por D-Bus), upower sin libimobiledevice, y libgweather sin `po-locations` ⇒ las ciudades salen en inglés, la base de datos se genera igual. De upower, tres perillas que hay que fijar porque su `auto` significa "preguntale a un pkg-config de systemd": udevrulesdir/udevhwdbdir (nuestro udev-pc declara `udevdir`, no `udev_dir`) y systemdsystemunitdir=no. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# geoclue 2.8.2 — SÓLO `libgeoclue` y su typelib `Geoclue-2.0`, sin el demonio.
|
||||
#
|
||||
# POR QUÉ ENTRA: gnome-shell lo importa desde JavaScript sin condicional
|
||||
# (`js/misc/dependencies.js`: `import 'gi://Geoclue?version=2.0'`) — lo usa el indicador de
|
||||
# «ubicación en uso» del panel y el ajuste automático de zona horaria. Dep de RUNTIME del shell,
|
||||
# invisible a su grafo de build, destapada arrancando la sesión.
|
||||
#
|
||||
# `-Denable-backend=false` es la decisión de alcance de esta receta, y no es un recorte arbitrario:
|
||||
# el demonio (`src/`) es el que arrastra ModemManager (fuentes 3G/CDMA/GPS de módem), Avahi (NMEA por
|
||||
# red) y libsoup+json-glib (geolocalización por IP y por WiFi). La librería cliente no toca nada de
|
||||
# eso: habla con el servicio por D-Bus. Como acá lo que hace falta es el typelib, se construye la
|
||||
# mitad cliente y se deja escrito que la otra existe. Cuando haya un caso de uso real —ubicación de
|
||||
# verdad, no el ícono— hay que volver por el demonio y traer esas dependencias.
|
||||
#
|
||||
# Sin el backend quedan `public-api`, `interface`, `libgeoclue` y `data`. Se borran a mano:
|
||||
# · `subdir('demo')` → `where-am-i`, un ejecutable de ejemplo que nadie instala en una imagen.
|
||||
# · `subdir('po')` → el msgfmt de gettext-tiny aborta. SÉPTIMA vez en la campaña; ya no es un
|
||||
# gotcha, es la deuda de autorar el gettext de GNU.
|
||||
#
|
||||
# `-Dvapi=false` (no hay valac en el corpus) y `-Dgtk-doc=false`.
|
||||
#
|
||||
# ISLA DINÁMICA: el typelib nombra `libgeoclue-2.so.0` y gjs la dlopea.
|
||||
#
|
||||
# FUENTE: archivo de gitlab.freedesktop.org, como cairo/libdrm/libinput/pixman/modemmanager.
|
||||
name = "geoclue"
|
||||
version = "2.8.2"
|
||||
|
||||
[source]
|
||||
tarball = "https://gitlab.freedesktop.org/geoclue/geoclue/-/archive/2.8.2/geoclue-2.8.2.tar.gz"
|
||||
sha256 = "5435f7d48105fe89a4259f807658281e854881267254bcd4eeac6e26c222055b"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
configure = '''
|
||||
set -e
|
||||
sed -i "/^subdir('demo')$/d; /^subdir('po')$/d" meson.build
|
||||
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=both -Denable-backend=false -Dlibgeoclue=true \
|
||||
-Dintrospection=true -Dvapi=false -Dgtk-doc=false -Ddemo-agent=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", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "libffi", "pcre2", "zlib-shared"]
|
||||
@@ -0,0 +1,46 @@
|
||||
# geocode-glib 3.26.4 — geocodificación (dirección ↔ coordenadas) contra Nominatim, sobre libsoup.
|
||||
#
|
||||
# POR QUÉ ENTRA, y no por donde se esperaba: no la pide el shell directamente. La pide **libgweather**
|
||||
# (`libgweather/meson.build:115`, `dependency('geocode-glib-2.0')`), y libgweather sí es dep de
|
||||
# runtime del shell — `import 'gi://GWeather?version=4.0'` en `js/misc/dependencies.js`, para el
|
||||
# clima del calendario. O sea que es la única de esta tanda que entra por transitividad y no por
|
||||
# aparecer en la lista del shell.
|
||||
#
|
||||
# `-Dsoup2=false` es LA opción de esta receta. El default de upstream es `true`, y con él pide
|
||||
# `libsoup-2.4`, que esta distro no tiene ni va a tener: el corpus va con libsoup 3. Con `false` el
|
||||
# proyecto se renombra a sí mismo `geocode-glib-2.0` (mismo código, otro `.pc` y otro soname), que es
|
||||
# exactamente el nombre que libgweather busca. Sin esto se construye la variante equivocada y
|
||||
# libgweather no la encuentra aunque esté instalada.
|
||||
#
|
||||
# `-Denable-installed-tests=false`: sus tests instalados descargan de Nominatim en tiempo de test.
|
||||
# `-Denable-gtk-doc=false`: gtk-doc no está en el corpus.
|
||||
#
|
||||
# ISLA DINÁMICA: la introspección genera `GeocodeGlib-2.0.typelib`, que gjs no carga directamente
|
||||
# pero el `.gir` de GWeather sí referencia.
|
||||
name = "geocode-glib"
|
||||
version = "3.26.4"
|
||||
|
||||
[source]
|
||||
tarball = "https://download.gnome.org/sources/geocode-glib/3.26/geocode-glib-3.26.4.tar.xz"
|
||||
sha256 = "2d9a6826d158470449a173871221596da0f83ebdcff98b90c7049089056a37aa"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
configure = '''
|
||||
set -e
|
||||
sed -i "/^subdir('po')$/d" meson.build
|
||||
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=both -Dsoup2=false -Denable-introspection=true \
|
||||
-Denable-gtk-doc=false -Denable-installed-tests=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", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "json-glib", "libsoup", "libpsl", "nghttp2", "sqlite-shared", "icu4c", "libffi", "pcre2", "zlib-shared"]
|
||||
@@ -9,8 +9,31 @@
|
||||
# correcta para un escritorio GNOME 48. sha256 REAL de `curl -sL <url> | sha256sum`.
|
||||
#
|
||||
# Feature-minimal: build_gtk4=true, legacy_library=false (SIN libgnome-desktop-3/gtk3 — no está en
|
||||
# el corpus), introspection/docs/debug_tools/installed_tests OFF, udev/systemd disabled (Wayland-only,
|
||||
# el corpus), docs/debug_tools/installed_tests OFF, udev/systemd disabled (Wayland-only,
|
||||
# el logind/udev lo cubre arje). backend GL vía gtk4 (ya wayland-only, sin X11).
|
||||
#
|
||||
# ══ PASA A LA ISLA DINÁMICA CON INTROSPECCIÓN (2026-07-29) ══════════════════════════════════════
|
||||
# Antes iba estática y con `-Dintrospection=false`. Lo cambió el arranque de la sesión: gnome-shell
|
||||
# importa `GnomeDesktop` y `GnomeBG` desde JavaScript sin condicional
|
||||
# (`js/misc/dependencies.js`), o sea que los DOS typelibs son dep de runtime del shell.
|
||||
#
|
||||
# **No se hizo una variante `-introspected` aparte, y la razón es la regla de los dos registros de
|
||||
# GType**: mutter y gnome-shell ENLAZAN libgnome-desktop, y gjs además dlopearía la `.so` que el
|
||||
# typelib nombra. Con una variante convivirían la `.a` enlazada y la `.so` cargada, cada una con su
|
||||
# tabla de GType — el mismo cuadro que costó el episodio de colord (`assertion 'G_IS_FILE (file)'
|
||||
# failed` + SIGSEGV en binarios que el propio build acababa de enlazar). Acá la variante sería el
|
||||
# error; el idioma `-shared` vale para librerías de C sin GObject, no para ésta.
|
||||
#
|
||||
# `yupana radio gnome-desktop` = **2 sellados a deuda** (mutter y gnome-shell), el mismo par que ya
|
||||
# se reconstruyó dos veces en esta campaña. Barato y correcto.
|
||||
#
|
||||
# `default_library=both` y no `shared`: es el mismo remedio que json-glib. Los consumidores que
|
||||
# siguen estáticos piden la `.a` y con shared-only cortan; la introspección sólo necesita que EXISTA
|
||||
# la `.so`.
|
||||
#
|
||||
# Con `introspection=true` los dos seds de abajo que borraban las referencias a `libgnome_rr_gir` /
|
||||
# `libgnome_bg_gir` **dejan de hacer falta y serían dañinos**: ahora esos .gir SÍ se generan, y
|
||||
# borrarlos de `sources:` es justo lo que impediría que se declaren.
|
||||
name = "gnome-desktop"
|
||||
version = "44.5"
|
||||
|
||||
@@ -21,24 +44,25 @@ sha256 = "20e0995a6e3a03e8c1026c5a27bc3f45e69ffcc392ad743dcab6107a541d232f"
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "static"
|
||||
link = "dynamic"
|
||||
|
||||
# El sed cierra un bug UPSTREAM que sólo aparece con introspection=false y meson moderno: dos
|
||||
# declare_dependency() alimentan `sources:` con el .gir que no se generó. gnome-rr lo deja como
|
||||
# cadena VACÍA (meson 1.x la trata como fichero ⇒ «ERROR: File does not exist») y gnome-bg lo
|
||||
# deja directamente SIN DEFINIR (⇒ «unknown variable»). El tercer sitio, libgnome-desktop/
|
||||
# meson.build:163, NO se toca: ése sí inicializa a `[]`, que meson aplana sin ruido — es el
|
||||
# patrón correcto y la prueba de que los otros dos son el descuido. Sin gir no hay nada que
|
||||
# declarar, así que se borra la referencia. Anclado con [[:space:]]* para no depender del sangrado.
|
||||
# (HISTÓRICO, por si alguien vuelve a apagar la introspección: con `-Dintrospection=false` hacían
|
||||
# falta dos seds más, que borraban `libgnome_rr_gir` y `libgnome_bg_gir` de sendos
|
||||
# `declare_dependency()`. Es un bug upstream que sólo aparece en esa combinación — alimentan
|
||||
# `sources:` con un .gir que no se generó; gnome-rr lo deja como cadena VACÍA (meson 1.x la trata
|
||||
# como fichero ⇒ «File does not exist») y gnome-bg SIN DEFINIR (⇒ «unknown variable»). El tercer
|
||||
# sitio, libgnome-desktop/meson.build:163, inicializa a `[]`, que meson aplana sin ruido: es el
|
||||
# patrón correcto y la prueba de que los otros dos son el descuido. Con introspección encendida los
|
||||
# .gir existen y los seds sobran.)
|
||||
#
|
||||
# El segundo sed saca `subdir('tests')`: `-Dinstalled_tests=false` sólo decide si los tests se
|
||||
# El sed que SÍ queda saca `subdir('tests')`: `-Dinstalled_tests=false` sólo decide si los tests se
|
||||
# INSTALAN, no si se compilan, y el subdir se incluye incondicionalmente. Su único ejecutable
|
||||
# (bg-slide-show) se enlaza con `-static` contra `-lgtk-4`, y desde la onda 2 gtk4 es DINÁMICA
|
||||
# (isla dinámica de la introspección) ⇒ no existe libgtk-4.a y el link muere. La librería —lo
|
||||
# único que esta receta produce para el escritorio— ya está enlazada cuando eso pasa: 26 de 27
|
||||
# targets. No se compila un exe de prueba que nadie instala.
|
||||
[build.phases]
|
||||
configure = "sed -i '/^[[:space:]]*libgnome_rr_gir,[[:space:]]*$/d' libgnome-desktop/gnome-rr/meson.build && sed -i '/^[[:space:]]*libgnome_bg_gir,[[:space:]]*$/d' libgnome-desktop/gnome-bg/meson.build && sed -i \"/^subdir('tests')$/d\" meson.build && PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload --prefer-static -Ddefault_library=static -Dbuild_gtk4=true -Dlegacy_library=false -Dintrospection=false -Ddesktop_docs=false -Ddebug_tools=false -Dgtk_doc=false -Dinstalled_tests=false -Dudev=disabled -Dsystemd=disabled -Dc_args=-Wno-error=date-time"
|
||||
configure = "sed -i \"/^subdir('tests')$/d\" meson.build && 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=both -Dbuild_gtk4=true -Dlegacy_library=false -Dintrospection=true -Ddesktop_docs=false -Ddebug_tools=false -Dgtk_doc=false -Dinstalled_tests=false -Dudev=disabled -Dsystemd=disabled -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"
|
||||
|
||||
@@ -54,4 +78,12 @@ install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson ins
|
||||
# (b3:bcf9b766) ⇒ cache-hit del artefacto que KDE ya selló, cero rebuild.
|
||||
# libseccomp → receta nueva en esta misma cola (autotools estático, gperf de build-dep).
|
||||
[deps]
|
||||
build = ["meson", "samurai", "python3", "pkgconf", "gsettings-desktop-schemas", "gtk4", "glib", "gdk-pixbuf", "fontconfig", "libxkbcommon", "cairo", "pango", "graphene", "libepoxy", "wayland", "wayland-protocols", "libdrm", "harfbuzz", "fribidi", "libpng", "pixman", "freetype", "expat", "libffi", "pcre2", "zlib", "libjpeg-turbo", "libtiff", "mesa", "iso-codes", "xkeyboard-config", "libseccomp"]
|
||||
# Las variantes `-shared` (cairo, fontconfig, freetype, libpng, zlib, libjpeg-turbo, libtiff) NO son
|
||||
# cosmética: con las estáticas el scanner MUERE. g-ir-scanner compila y EJECUTA un binario temporal
|
||||
# contra la librería recién construida, y para eso carga todo el árbol dinámico. Con `libpng` estática
|
||||
# no hay `libpng16.so`, así que `libgdk_pixbuf-2.0.so.0` —que sí es dinámica— no relocaliza:
|
||||
# Error relocating /usr/lib/libgdk_pixbuf-2.0.so.0: png_set_write_fn: symbol not found
|
||||
# y el `ldd` con que el scanner resuelve las shlibs sale con 127 («Error loading shared library»),
|
||||
# que es lo que se ve en el traceback de shlibs.py:106. Es la misma lista que declara gtk4, por la
|
||||
# misma razón. Regla: si una receta introspecta, su cierre entero tiene que ser cargable.
|
||||
build = ["meson", "samurai", "python3", "pkgconf", "py3-setuptools", "gobject-introspection", "gi-foreign-girs", "glib-introspected", "gsettings-desktop-schemas", "gtk4", "glib", "gdk-pixbuf", "fontconfig-shared", "libxkbcommon", "cairo-shared", "pango", "graphene", "libepoxy", "wayland", "wayland-protocols", "libdrm", "harfbuzz", "fribidi", "libpng-shared", "pixman", "freetype-shared", "expat", "libffi", "pcre2", "zlib-shared", "libjpeg-turbo-shared", "libtiff-shared", "mesa", "iso-codes", "xkeyboard-config", "libseccomp"]
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# libgweather 4.4.4 — el clima y la base de datos de ubicaciones (ciudades, estaciones METAR, zonas
|
||||
# horarias). De acá sale el typelib `GWeather-4.0`.
|
||||
#
|
||||
# POR QUÉ ENTRA: gnome-shell lo importa desde JavaScript sin condicional
|
||||
# (`js/misc/dependencies.js`: `import 'gi://GWeather?version=4.0'`) — lo usa el widget de clima del
|
||||
# calendario y el selector de ciudades del reloj mundial. Dep de RUNTIME del shell, invisible a su
|
||||
# grafo de build.
|
||||
#
|
||||
# ARRASTRA DOS RECETAS MÁS, y son de naturaleza distinta:
|
||||
# · `geocode-glib` (libgweather/meson.build:115) — dep de ENLACE. Ojo con su `-Dsoup2=false`: sin
|
||||
# eso se construye la variante `geocode-glib-1.0` contra libsoup2 y ésta no la encuentra.
|
||||
# · `py3-gobject` (pygobject) — dep del CONSTRUCTOR, no de la imagen. meson.build:50 exige
|
||||
# `find_installation('python3', modules: ['gi'])` porque `gen_locations_variant.py` importa
|
||||
# `gi.repository.GLib` para serializar la base de ubicaciones a un GVariant binario. El formato lo
|
||||
# define GLib; el script sólo lo alimenta. Reescribirlo sin `gi` sería reimplementar el
|
||||
# serializador de GVariant.
|
||||
#
|
||||
# `-Dsoup2=false` acá también, por lo mismo: el corpus va con libsoup 3.
|
||||
#
|
||||
# `-Dtests=false` no alcanza para el `subdir('po-locations')`: ese catálogo NO es de traducciones de
|
||||
# interfaz sino de los NOMBRES de las ciudades de la base de datos, y su `gen_locations_variant.py`
|
||||
# corre msgfmt sobre él. Igual que `po`, se borra — el msgfmt de gettext-tiny aborta (OCTAVA vez).
|
||||
# Consecuencia honesta y acotada: las ciudades salen en inglés. La base de datos en sí (`Locations.xml`
|
||||
# y su variante compilada) se genera igual, que es lo que el shell consulta.
|
||||
#
|
||||
# `-Dgtk_doc=false` y `-Denable_vala=false`: no hay gtk-doc ni valac en el corpus.
|
||||
#
|
||||
# ISLA DINÁMICA: el typelib nombra `libgweather-4.so.0` y gjs la dlopea.
|
||||
name = "libgweather"
|
||||
version = "4.4.4"
|
||||
|
||||
[source]
|
||||
tarball = "https://download.gnome.org/sources/libgweather/4.4/libgweather-4.4.4.tar.xz"
|
||||
sha256 = "7017677753cdf7d1fdc355e4bfcdb1eba8369793a8df24d241427a939cbf4283"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
configure = '''
|
||||
set -e
|
||||
sed -i "/^subdir('doc')$/d; /^subdir('po')$/d; /^subdir('po-locations')$/d" meson.build
|
||||
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=both -Dintrospection=true -Dsoup2=false \
|
||||
-Dgtk_doc=false -Denable_vala=false -Dtests=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", "py3-gobject", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "geocode-glib", "json-glib", "libsoup", "libpsl", "nghttp2", "sqlite-shared", "icu4c", "libxml2-shared", "libffi", "pcre2", "zlib-shared"]
|
||||
@@ -0,0 +1,38 @@
|
||||
# pygobject 3.50.0 — los bindings de GObject-Introspection para Python (`from gi.repository import …`).
|
||||
#
|
||||
# POR QUÉ APARECE ACÁ, y es un tipo de dep distinto a todos los de esta tanda: **no va a la imagen,
|
||||
# va al CONSTRUCTOR**. libgweather no la enlaza ni la carga; la usa su build:
|
||||
#
|
||||
# meson.build:50 py = import('python').find_installation('python3', modules: ['gi'])
|
||||
#
|
||||
# y `build-aux/meson/gen_locations_variant.py` importa `gi.repository.GLib` para serializar la base
|
||||
# de datos de ubicaciones —miles de ciudades, estaciones METAR y zonas horarias— a un GVariant
|
||||
# binario. O sea que el formato de salida lo define GLib y el script sólo lo alimenta: reescribirlo
|
||||
# sin `gi` sería reimplementar el serializador de GVariant, que es exactamente el error de
|
||||
# reimplementar lo que ya existe. Se paga la receta.
|
||||
#
|
||||
# `-Dpycairo=disabled`: la integración con pycairo sólo sirve para pasar objetos `cairo.Context`
|
||||
# entre Python y C, y no hay pycairo en el corpus. `gen_locations_variant.py` no toca cairo.
|
||||
# `-Dtests=false`: la suite pide `pytest` y arranca un bucle de GLib.
|
||||
#
|
||||
# ISLA DINÁMICA por obligación: el módulo `gi._gi` ES un objeto compartido que Python dlopea, y su
|
||||
# cierre entero (glib, girepository, libffi) tiene que ser cargable. Con las estáticas no hay módulo.
|
||||
name = "py3-gobject"
|
||||
version = "3.50.0"
|
||||
|
||||
[source]
|
||||
tarball = "https://download.gnome.org/sources/pygobject/3.50/pygobject-3.50.0.tar.xz"
|
||||
sha256 = "8d836e75b5a881d457ee1622cae4a32bcdba28a0ba562193adb3bbb472472212"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dpycairo=disabled -Dtests=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", "py3-setuptools", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "libffi", "pcre2", "zlib-shared"]
|
||||
@@ -0,0 +1,57 @@
|
||||
# upower 1.90.10 — el servicio de energía (batería, carga, suspensión por batería crítica) y su
|
||||
# librería cliente `libupower-glib`, de donde sale el typelib `UPowerGlib-1.0`.
|
||||
#
|
||||
# POR QUÉ ENTRA: gnome-shell lo importa desde JavaScript sin condicional
|
||||
# (`js/misc/dependencies.js`: `import 'gi://UPowerGlib?version=1.0'`). O sea que **es dep de RUNTIME
|
||||
# del shell** aunque no aparezca en su meson.build — el indicador de batería del panel se apoya en
|
||||
# esto. Se destapó arrancando la sesión, no compilando.
|
||||
#
|
||||
# FUENTE: el archivo de gitlab.freedesktop.org y no `upower.freedesktop.org/releases/`, que hoy sirve
|
||||
# un índice generado por `tree` sin los tarballs de la serie 1.90. Es el mismo patrón que ya usan
|
||||
# cairo, libdrm, libinput, pixman y modemmanager en este repo.
|
||||
#
|
||||
# LAS TRES PERILLAS QUE HAY QUE FIJAR A MANO, y las tres por el mismo motivo — el `auto` de upower
|
||||
# significa «preguntale a un pkg-config de systemd», que acá no existe:
|
||||
#
|
||||
# -Dudevrulesdir / -Dudevhwdbdir: con `auto` hace `udev_dep.get_variable(pkgconfig: 'udev_dir')`
|
||||
# (meson.build:97 y :103). Nuestro `udev-pc` declara la variable **`udevdir`**, no `udev_dir` —
|
||||
# el nombre con guión bajo es de systemd-udev; el sin guión es el histórico de eudev, que es el que
|
||||
# copiamos. En vez de tocar `udev-pc` (que arrastraría a libudev-zero y sus 51 dependientes) se
|
||||
# fijan los dos directorios acá, que es lo que la opción existe para permitir.
|
||||
#
|
||||
# -Dsystemdsystemunitdir=no: con la cadena vacía hace `dependency('systemd')` DURA
|
||||
# (meson.build:120-122). El valor `no` está contemplado por upstream y saltea la instalación de la
|
||||
# unit (src/meson.build:107). Acá PID1 es arje-zero.
|
||||
#
|
||||
# -Dintrospection=enabled es el punto de todo esto. `-Didevice=disabled` saca libimobiledevice (el
|
||||
# soporte de batería de iPhone), que no está en el corpus. `-Dpolkit=enabled` porque polkit YA está
|
||||
# sellada y es lo que decide quién puede suspender.
|
||||
#
|
||||
# ISLA DINÁMICA: el typelib nombra `libupower-glib.so.3` y gjs la dlopea.
|
||||
name = "upower"
|
||||
version = "1.90.10"
|
||||
|
||||
[source]
|
||||
tarball = "https://gitlab.freedesktop.org/upower/upower/-/archive/v1.90.10/upower-v1.90.10.tar.gz"
|
||||
sha256 = "7fcd51bece2526dbee5170feb3ffd1adab5b0cd023575f1fd119d969b73f4b90"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
configure = '''
|
||||
set -e
|
||||
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output \
|
||||
--prefix=/usr --buildtype=release --wrap-mode=nodownload \
|
||||
-Ddefault_library=both -Dos_backend=linux -Dintrospection=enabled \
|
||||
-Didevice=disabled -Dpolkit=enabled -Dman=false -Dgtk-doc=false \
|
||||
-Dudevrulesdir=/usr/lib/udev/rules.d -Dudevhwdbdir=/usr/lib/udev/hwdb.d \
|
||||
-Dsystemdsystemunitdir=no -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", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "libgudev", "udev-pc", "libudev-zero", "polkit", "libffi", "pcre2", "zlib-shared", "expat", "dbus-shared"]
|
||||
Reference in New Issue
Block a user