tawasuyu

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…

TOML 1488Shell 182Rust 107Markdown 963619 Sutichaykuna

⎇ 84e3737e10e17927380ed3e232e50cebfdd39123 recipes/incoming-gnome/gcr3.toml TOML · 91 siq'ikuna · 6.7 KB Ñawpa willay ch'uya

gnome-console y gnome-keyring SELLADOS: cuatro muros más, dos de ellos de la distro 563fd0efd · Sergio ·

1# gcr3 3.41.2 — la serie 3.x de gcr, que CONVIVE con la 4.x ya sellada en esta cola.
2#
3# ── POR QUÉ DOS gcr, Y NO ES UN OLVIDO NI UN DUPLICADO ─────────────────────────────────────────
4# `gnome-keyring 48` —la última versión que hay— sigue pidiendo la API vieja, y sin perilla:
5#
6#     meson.build:37  gck_dep      = dependency('gck-1',       version: '>= 3.3.4')
7#     meson.build:38  gcr_base_dep = dependency('gcr-base-3',  version: '>= 3.27.90')
8#
9# Y el artefacto de `gcr.toml` (4.4.0.1) publica `gck-2.pc` y `gcr-4.pc` — comprobado sobre el store,
10# no supuesto. Son APIs distintas con nombres distintos, no dos versiones de la misma cosa: upstream
11# renumeró al pasar a GTK4 y gnome-keyring no siguió. O se autora la 3.x, o gnome-keyring no entra.
12#
13# ⚠ NO COLISIONAN, y conviene dejarlo medido para quien dude:
14#     gcr 4.4.0.1 → libgcr-4.so, libgck-2.so, cabeceras en gcr-4/ y gck-2/, binario gcr4-ssh-askpass
15#     gcr 3.41.2  → libgcr-base-3.so, libgck-1.so, cabeceras en gcr-3/ y gck-1/
16# Ningún fichero compartido. Lo ÚNICO que podría chocar son las traducciones —las dos series usan el
17# dominio `gcr`— y hoy no chocan porque `gcr.toml` borra su `subdir('po')` entero. Si algún día se
18# le devuelven las traducciones a gcr4, hay que mirar esto.
19#
20# ── LAS PERILLAS ───────────────────────────────────────────────────────────────────────────────
21#   -Dgtk=false        (default TRUE) → **BLOQUEANTE**: la UI de esta serie es GTK**3**
22#                      (`meson.build:70`, `dependency('gtk+-3.0')`), aparcado por diseño en este
23#                      frente. Lo que se pierde es `gcr-viewer` y los diálogos de certificado de la
24#                      serie vieja; gnome-keyring sólo necesita `gcr-base-3`, que es la parte sin UI.
25#   -Dssh_agent=false  (default TRUE) → construiría un SEGUNDO agente SSH además del que el propio
26#                      gnome-keyring puede dar. Dos agentes compitiendo por `SSH_AUTH_SOCK` es peor
27#                      que ninguno. (El de gnome-keyring también queda apagado; ver su receta.)
28#   -Dsystemd=disabled → activación por socket de systemd, que acá no existe (ADR 0007).
29#   -Dintrospection=false / -Dgtk_doc=false → typelib `Gcr-3`/`Gck-1` y gtk-doc: nadie los pide. El
30#                      consumidor es gnome-keyring, que es C. ⚠ Ojo si algún día se encienden: el
31#                      typelib de la serie 3 y el de la 4 SÍ comparten espacio de nombres de fichero
32#                      por versión de API, y ahí sí habría que mirar.
33#   -Dgpg_path=/usr/bin/gpg → explícito, igual que en gcr4: sin esto el configure lo AUTODETECTA del
34#                      sysroot de build y la ruta horneada dependería de qué hubiera ese día.
35#
36# ── EL OTRO `sed`: UN BUG DE UPSTREAM QUE SÓLO SE VE AL APAGAR `ssh_agent` ─────────────────────
37# `meson.build:55-56` hace, sin guardar nada:
38#
39#     ssh_add_path   = find_program('ssh-add',   required: get_option('ssh_agent')).path()
40#     ssh_agent_path = find_program('ssh-agent', required: get_option('ssh_agent')).path()
41#
42# Con `ssh_agent=false` el `find_program` devuelve un programa NO encontrado —correctamente, porque
43# no es obligatorio— y acto seguido se le pide `.path()`, que en meson moderno es un error duro:
44#
45#     meson.build:55:74: ERROR: Unable to get the path of a not-found external program
46#
47# O sea: la opción existe, apagarla es lo razonable, y apagarla rompe el configure. Nadie lo ve
48# porque las distros construyen esta serie con el agente encendido.
49# Los dos valores sólo alimentan `SSH_ADD_EXECUTABLE`/`SSH_AGENT_EXECUTABLE` en el `config.h`
50# (`:85-86`), que únicamente lee el código del agente — el que esta receta no compila. Se sustituyen
51# por las rutas que `openssh` instala en esta distro, en vez de por cadenas vacías: si algún día se
52# enciende el agente, el valor horneado ya es el correcto en vez de una mentira silenciosa.
53#
54# ── `-D_GNU_SOURCE`: `getpass()` EXISTE EN MUSL, PERO NO SE DECLARA SOLO ──────────────────────
55# `gcr/console-interaction.c:100` usa `getpass()` e incluye `<unistd.h>` (`:33`), que es donde vive.
56# En glibc con eso alcanza; **musl la esconde detrás de un guard de feature test** —la declara sólo
57# con `_XOPEN_SOURCE`, `_GNU_SOURCE` o `_BSD_SOURCE` definidos—, y clang moderno ya no acepta
58# declaraciones implícitas:
59#
60#     error: call to undeclared function 'getpass'; ISO C99 and later do not support implicit …
61#     error: incompatible integer to pointer conversion assigning to 'const gchar *' … from 'int'
62#
63# El segundo error es consecuencia del primero y es el que despista: sin declaración, C asume que
64# `getpass` devuelve `int`, y asignarlo a un `const gchar *` es lo que el compilador denuncia. Se
65# arregla en la raíz (declarar la función), no silenciando la conversión.
66# Segundo muro de esta tanda que es de la DISTRO y no de las herramientas, después del `W_EXITCODE`
67# de vte. Los dos son el mismo patrón: código que da por sentada la glibc.
68#
69# ⚠ EL `sed` DEL `ar`: `po/ar.po` trae 1 `msgstr[5]` y con uno alcanza para el SIGILL del msgfmt de
70# gettext-tiny ([[gettext-tiny-msgfmt-plural-arabe]]). Acá se saca SÓLO el árabe, en vez de borrar
71# `subdir('po')` como hizo gcr4: esta receta conserva las otras ~40 traducciones.
72name    = "gcr3"
73version = "3.41.2"
74license = "LGPL-2.1-or-later"
75
76[source]
77tarball = "https://download.gnome.org/sources/gcr/3.41/gcr-3.41.2.tar.xz"
78sha256  = "bad10f3c553a0e1854649ab59c5b2434da22ca1a54ae6138f1f53961567e1ab7"
79
80[build]
81compiler = "zig-cc"
82target   = "x86_64-linux-musl"
83link     = "dynamic"
84
85[build.phases]
86configure = "sed -i '/^ar$/d' po/LINGUAS && sed -i \"s@^ssh_add_path = find_program.*@ssh_add_path = '/usr/bin/ssh-add'@; s@^ssh_agent_path = find_program.*@ssh_agent_path = '/usr/bin/ssh-agent'@\" 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=shared -Dgtk=false -Dssh_agent=false -Dsystemd=disabled -Dintrospection=false -Dgtk_doc=false -Dgpg_path=/usr/bin/gpg -Dc_args=\"-Wno-error=date-time -D_GNU_SOURCE\""
87compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
88install   = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
89
90[deps]
91build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "p11-kit", "libgcrypt-shared", "libgpg-error-shared", "libffi", "pcre2", "zlib-shared"]