gnome isla: glib default_library=both (.a + .so)

g-i (link=static) compila binarios internos que hacen `-static -lglib-2.0`; con la
glib sólo-shared, zig falla "unable to find static system library glib-2.0" (no hay
.a). La isla necesita AMBOS: el .so para que g-ir-scanner resuelva la introspección
(y gjs lo dlopee en runtime), el .a para el link estático interno de los consumidores.
default_library=shared → both.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 01:25:21 -04:00
co-authored by Claude Opus 4.8
parent 319cfd83ec
commit b57ce69311
2 changed files with 22 additions and 10 deletions
+11 -5
View File
@@ -10,9 +10,15 @@
# del resolver (hermano incoming-gnome/ → padre recipes/), SOMBREA la corpus SÓLO para las recetas
# GNOME; el resto del árbol sigue con la estática. Ver [[gnome-introspection-dinamica]].
#
# Deps internas (libffi/pcre2/zlib) siguen estáticas: el .so las embebe (self-contained para ésas).
# Deps internas (libffi/pcre2/zlib) estáticas: el .so las embebe (self-contained para ésas).
# Runtime: el rootfs de la imagen GNOME necesitará el loader musl (ld-musl-x86_64.so.1) — paso de
# ensamblado de imagen, no del build (el sandbox ya lo tiene).
#
# default_library=BOTH (no shared): la isla necesita AMBOS. El `.so` (con SONAME) es lo que
# g-ir-scanner resuelve para la introspección y lo que gjs dlopea en runtime; el `.a` es para el
# link ESTÁTICO INTERNO de los consumidores (el propio g-i compila binarios que hacen `-static
# -lglib-2.0` — sin el `.a` zig falla "unable to find static system library glib-2.0"). Con ambos,
# el consumidor estático encuentra el `.a` y el scanner encuentra el `.so`.
name = "glib"
version = "2.88.1"
@@ -26,10 +32,10 @@ target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
# default_library=shared ⇒ libglib-2.0.so.0 &co. con SONAME (lo que g-ir-scanner resuelve).
# introspection=disabled a propósito: los typelibs de GLib/GObject los produce gobject-introspection
# escaneando este .so (externo), no glib a sí misma (evita el ciclo glib↔g-i en el bootstrap).
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Ddefault_library=shared -Dtests=false -Dnls=disabled -Dlibmount=disabled -Dselinux=disabled -Dman-pages=disabled -Dintrospection=disabled -Dglib_debug=disabled -Dglib_assert=false -Dglib_checks=false"
# default_library=both ⇒ libglib-2.0.{a,so.0} &co. introspection=disabled a propósito: los typelibs
# de GLib/GObject los produce gobject-introspection escaneando este .so (externo), no glib a sí misma
# (evita el ciclo glib↔g-i en el bootstrap).
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Ddefault_library=both -Dtests=false -Dnls=disabled -Dlibmount=disabled -Dselinux=disabled -Dman-pages=disabled -Dintrospection=disabled -Dglib_debug=disabled -Dglib_assert=false -Dglib_checks=false"
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"
+11 -5
View File
@@ -10,9 +10,15 @@
# del resolver (hermano incoming-gnome/ → padre recipes/), SOMBREA la corpus SÓLO para las recetas
# GNOME; el resto del árbol sigue con la estática. Ver [[gnome-introspection-dinamica]].
#
# Deps internas (libffi/pcre2/zlib) siguen estáticas: el .so las embebe (self-contained para ésas).
# Deps internas (libffi/pcre2/zlib) estáticas: el .so las embebe (self-contained para ésas).
# Runtime: el rootfs de la imagen GNOME necesitará el loader musl (ld-musl-x86_64.so.1) — paso de
# ensamblado de imagen, no del build (el sandbox ya lo tiene).
#
# default_library=BOTH (no shared): la isla necesita AMBOS. El `.so` (con SONAME) es lo que
# g-ir-scanner resuelve para la introspección y lo que gjs dlopea en runtime; el `.a` es para el
# link ESTÁTICO INTERNO de los consumidores (el propio g-i compila binarios que hacen `-static
# -lglib-2.0` — sin el `.a` zig falla "unable to find static system library glib-2.0"). Con ambos,
# el consumidor estático encuentra el `.a` y el scanner encuentra el `.so`.
name = "glib"
version = "2.88.1"
@@ -26,10 +32,10 @@ target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
# default_library=shared ⇒ libglib-2.0.so.0 &co. con SONAME (lo que g-ir-scanner resuelve).
# introspection=disabled a propósito: los typelibs de GLib/GObject los produce gobject-introspection
# escaneando este .so (externo), no glib a sí misma (evita el ciclo glib↔g-i en el bootstrap).
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Ddefault_library=shared -Dtests=false -Dnls=disabled -Dlibmount=disabled -Dselinux=disabled -Dman-pages=disabled -Dintrospection=disabled -Dglib_debug=disabled -Dglib_assert=false -Dglib_checks=false"
# default_library=both ⇒ libglib-2.0.{a,so.0} &co. introspection=disabled a propósito: los typelibs
# de GLib/GObject los produce gobject-introspection escaneando este .so (externo), no glib a sí misma
# (evita el ciclo glib↔g-i en el bootstrap).
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Ddefault_library=both -Dtests=false -Dnls=disabled -Dlibmount=disabled -Dselinux=disabled -Dman-pages=disabled -Dintrospection=disabled -Dglib_debug=disabled -Dglib_assert=false -Dglib_checks=false"
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"