sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
⎇ 3379a1f1709f6dab9d012cbbb46d7e6ace20db45
recipes/incoming-gnome/gi-girepository-typelib.toml
Ñawpa willay
ch'uya
licencias: las 26 que faltaban, y el guardián que las contaba mal
1# gi-girepository-typelib — `GIRepository-2.0.typelib`, y nada más.
2#
3# QUÉ RESUELVE: con los siete typelibs de la lista del shell ya cerrados, gnome-shell avanzó un paso
4# más y murió en uno que NO está en esa lista:
5#
6# JS ERROR: Requiring GIRepository, version 2.0: Typelib file for namespace 'GIRepository',
7# version '2.0' not found
8#
9# El que lo pide no es el shell sino **gjs**, desde su propio JavaScript embebido: su GResource trae
10# literalmente `imports.gi.versions.GIRepository = '2.0';` (verificado con `strings` sobre
11# `libgjs.so.0`). O sea que es una dep de runtime del INTÉRPRETE, invisible tanto al grafo de build
12# como al `dependencies.js` del shell. Se encuentra arrancando y de ninguna otra forma.
13#
14# POR QUÉ NO ESTABA: hay DOS GIRepository y no son la misma cosa.
15# · `GIRepository-3.0` — la API nueva, la que GLib absorbió (`libgirepository-2.0`). La produce
16# `glib-introspected` y ya estaba en el cierre.
17# · `GIRepository-2.0` — la API vieja, la de `libgirepository-1.0.so.1`, que es contra la que gjs
18# está enlazado. La produce gobject-introspection… pero sólo con
19# `-Dbuild_introspection_data=true`, y el nuestro va con `false`.
20# Los números confunden a propósito: la 2.0 es la vieja porque nombra la librería 1.0, y la 3.0 es
21# la nueva porque nombra la 2.0.
22#
23# POR QUÉ UNA RECETA APARTE Y NO PRENDERLE LA OPCIÓN A g-i: `yupana radio gobject-introspection`
24# alcanza a TODA la cadena GNOME —gtk4, pango, mutter, gnome-shell— porque catorce recetas la
25# declaran para escanear. Prender esa opción también traería de vuelta los typelibs de X11 y cairo
26# que motivaron apagarla. Acá se genera UN typelib y el radio es cero. Mismo criterio que
27# `gi-foreign-typelibs` y que `udev-pc`.
28#
29# CÓMO: se replica el `custom_target('gir-girepository')` de `gir/meson.build:494` de upstream —los
30# mismos `--identifier-prefix`, `--symbol-prefix`, `--c-include`, `--library` y `-DGI_COMPILATION`—
31# pero escaneando contra la `libgirepository-1.0` YA INSTALADA en vez de la del árbol de build. La
32# lista de fuentes es la `girepo_gir_sources` de `girepository/meson.build:116`, **enumerada a mano y
33# no un glob**, y eso no es prolijidad: `girepository/*.h` barre además `gitypelib-internal.h`, que
34# declara `G_TYPELIB_ERROR`. El scanner entonces emite el stanza del error-quark, y el binario
35# temporal que compila para introspeccionar no linkea:
36# ld.lld: error: undefined symbol: g_typelib_error_quark
37# porque ese símbolo es LOCAL en la `.so` instalada (`nm` lo muestra en minúscula) — es interno, como
38# dice el nombre del header. Upstream nunca lo escanea; el glob fue el error.
39name = "gi-girepository-typelib"
40version = "1.84.0"
41# licencia: el COPYING de gobject-introspection es explícito: «The typelib libraries (girepository/) are licensed under the LGPLv2+». Esta receta instala GIRepository-2.0.typelib y nada más
42license = "LGPL-2.1-or-later"
43
44[source]
45tarball = "https://download.gnome.org/sources/gobject-introspection/1.84/gobject-introspection-1.84.0.tar.xz"
46sha256 = "945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779"
47
48[build]
49compiler = "zig-cc"
50target = "x86_64-linux-musl"
51link = "dynamic"
52
53[build.phases]
54configure = "true"
55compile = '''
56set -e
57PYTHONPATH=/usr/lib/python3.12/site-packages g-ir-scanner \
58 --output=GIRepository-2.0.gir \
59 --no-libtool --quiet --reparse-validate \
60 --add-include-path=/usr/share/gir-1.0 \
61 --identifier-prefix=GI --symbol-prefix=g --symbol-prefix=gi \
62 --c-include=girepository.h \
63 --namespace=GIRepository --nsversion=2.0 \
64 --library=girepository-1.0 \
65 --pkg-export=gobject-introspection-1.0 \
66 --include=GObject-2.0 \
67 --cflags-begin \
68 $(pkg-config --cflags glib-2.0 gobject-2.0) \
69 -I/usr/include/gobject-introspection-1.0 \
70 -Igirepository -DGI_COMPILATION \
71 --cflags-end \
72 $(cd girepository && printf 'girepository/%s ' \
73 giarginfo.c gibaseinfo.c gicallableinfo.c giconstantinfo.c gienuminfo.c \
74 gifieldinfo.c gifunctioninfo.c giinterfaceinfo.c giobjectinfo.c \
75 gipropertyinfo.c giregisteredtypeinfo.c girepository.c gisignalinfo.c \
76 gistructinfo.c gitypeinfo.c giunioninfo.c giversion.c givfuncinfo.c \
77 giarginfo.h gibaseinfo.h gicallableinfo.h giconstantinfo.h gienuminfo.h \
78 gifieldinfo.h gifunctioninfo.h giinterfaceinfo.h giobjectinfo.h \
79 gipropertyinfo.h giregisteredtypeinfo.h girepository.h gisignalinfo.h \
80 gistructinfo.h gitypeinfo.h gitypelib.h gitypes.h giunioninfo.h givfuncinfo.h)
81'''
82install = '''
83set -e
84mkdir -p /out/usr/lib/girepository-1.0 /out/usr/share/gir-1.0
85g-ir-compiler --includedir=/usr/share/gir-1.0 \
86 -o /out/usr/lib/girepository-1.0/GIRepository-2.0.typelib GIRepository-2.0.gir
87cp GIRepository-2.0.gir /out/usr/share/gir-1.0/
88ls -l /out/usr/lib/girepository-1.0/
89'''
90
91[deps]
92build = ["pkgconf", "python3", "py3-setuptools", "gobject-introspection", "gi-foreign-girs", "glib", "glib-introspected", "libffi", "pcre2", "zlib-shared"]