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…
⎇ f8f679d0380e47ef213dbcb44d3928e0f94d2890
recipes/incoming-gnome/evolution-data-server.toml
Historia
crudo
licencias: 936 de 1141 (82%) — detección por evidencia, con sus dos imprecisiones declaradas
1# evolution-data-server 3.56.2 — el almacén de contactos/calendario/correo de GNOME. Es LA frontera
2# de la cima: gnome-shell exige libecal-2.0 y libedataserver-1.2 (meson.build:72-73) para el
3# calendario del panel superior, y no hay opción para apagarlo — verificado que la serie 50.x lo
4# sigue pidiendo igual, así que subir de versión tampoco lo esquiva.
5#
6# ── SMIME/NSS: EL ATAJO QUE NO ERA ──────────────────────────────────────────────────────────────
7# Primer intento: esquivar NSS con -DENABLE_SMIME=OFF. eds declara esa opción (FindSMIME.cmake:19) y
8# su cabecera hasta promete "Searches for Mozilla's NSS and NSPR libraries, unless -DENABLE_SMIME=OFF
9# is used"… pero en 3.56.2 ese guard NO EXISTE: `include(FindSMIME)` es incondicional
10# (CMakeLists.txt:303) y el fichero nunca vuelve a mirar la variable. Se cableó el guard que faltaba
11# (tres líneas con el mismo `return()` que el fichero ya usa en :56) y el configure pasó.
12#
13# Y el build igual cortó, en el 11%: src/camel/camel.c incluye <nspr.h>, "nss.h" y <ssl.h> SIN
14# guardar por el #ifdef, y hace init/shutdown reales de NSS (nss_initlock, NSS_Shutdown);
15# camel-msgport.c y camel-operation.c también usan NSPR. O sea que ENABLE_SMIME=OFF sólo compila
16# fuera camel-smime-context.c, no camel entero. El modo está roto de verdad en esta versión, y
17# arrancarlo a parches sería reescribir camel.
18#
19# Conclusión honesta: NSS no se esquiva, se paga. Se autoró `nss.toml` (b3:d0659c9c, selló a la
20# primera pese a coreconf) y con eso el parche a FindSMIME sobra — la rama de pkg-config de
21# FindSMIME encuentra `nspr` y `nss` sola y S/MIME queda ENCENDIDO, que es el default del upstream.
22# Tampoco era deuda huérfana: NSS es la base criptográfica del frente del navegador.
23#
24# ── LOS OTROS DOS PARCHES: traducciones ─────────────────────────────────────────────────────────
25# Se saca `add_subdirectory(po)` (:1023) por la misma razón que en gcr e iso-codes: el msgfmt de
26# gettext-tiny —lo único que hay en el corpus— aborta con SIGABRT en ciertos .po, y eds trae ~100.
27#
28# Pero eso NO alcanza, y ahí está la sorpresa: eds usa msgfmt DOS veces por motivos distintos. La
29# segunda es `i18n_merge_file` (I18n.cmake:19), que corre `msgfmt --desktop --template` para fusionar
30# traducciones dentro de los .desktop y los .metainfo. Esa regla vive en data/, no en po/, así que
31# sobrevivió al primer parche y el build cortó en el 5% con
32# `GETTEXT_MSGFMT_EXECUTABLE-NOTFOUND: not found`.
33#
34# Se reemplaza el COMMAND por `cmake -E copy`. NO es una aproximación: los templates traen las claves
35# PLANAS (`Name=Events and Tasks Reminders`, verificado en
36# data/org.gnome.Evolution-alarm-notify.desktop.in.in) y lo único que hace `msgfmt --desktop` es
37# AGREGAR las variantes `Name[es]=`. Sin catálogos que fusionar, copiar produce exactamente el mismo
38# fichero que produciría msgfmt. Se pierden los textos traducidos, no la librería que enlaza el shell.
39#
40# Es la TERCERA receta que choca con ese msgfmt; ya conviene autorar el gettext de GNU de verdad en
41# vez de seguir apagando traducciones receta por receta.
42#
43# ── DEPS DURAS, contra el CMakeLists real ───────────────────────────────────────────────────────
44# libsecret-1, libxml-2.0, libsoup-3.0 :932 (DATA_SERVER) — las tres selladas en esta cola.
45# libical-glib :938 (CALENDAR) — sellada.
46# json-glib-1.0, uuid, sqlite3 :423,424,850 — selladas.
47# ICU :379 opcional, encendida: ya estaba paga por KDE.
48# nspr/nss :932,944 — sólo si ENABLE_SMIME (ver arriba).
49#
50# ── APAGADOS, y la receta que cada uno ahorra ───────────────────────────────────────────────────
51# -DENABLE_GTK=OFF → viene ON y pide gtk+-3.0, o sea GTK **3**, que no existe en este corpus
52# (la onda 3 es Wayland/GTK4). Apagarlo también borra ENABLE_OAUTH2_WEBKITGTK
53# (:427), que arrastraba WebKitGTK — el paquete más caro del ecosistema.
54# -DENABLE_GTK4=OFF → mismo caso para WebKitGTK4 (:437). gtk4 SÍ está sellada, pero lo que el
55# shell enlaza es libedataserver, no la UI de eds.
56# -DENABLE_GOA=OFF → gnome-online-accounts.
57# -DENABLE_WEATHER=OFF → libgweather (backend de calendario del clima).
58# -DENABLE_CANBERRA=OFF→ libcanberra-gtk3 (sonido de la alarma).
59# -DWITH_OPENLDAP=OFF → openldap (libreta de direcciones corporativa).
60# -DWITH_KRB5=OFF → kerberos. Ojo: es variable_path con default "ON", no un option booleano.
61# -DWITH_LIBDB=OFF → Berkeley DB (:516), backend heredado.
62# -DWITH_PHONENUMBER=OFF → libphonenumber (C++ de Google).
63# -DWITH_SYSTEMDUSERUNITDIR=no → eds instala units de usuario de systemd; acá PID1 es arje-zero.
64# -DENABLE_TESTS=OFF -DENABLE_INSTALLED_TESTS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_GTK_DOC=OFF
65# -DENABLE_VALA_BINDINGS=OFF → no hay valac en el corpus.
66#
67# -DENABLE_INTROSPECTION=ON viene OFF por defecto y acá NO es opcional: gnome-shell es JavaScript y
68# lee EDataServer/ECal por typelib. Isla dinámica, ver [[gnome-introspection-dinamica]].
69name = "evolution-data-server"
70version = "3.56.2"
71license = "LGPL-2.0-or-later"
72
73[source]
74tarball = "https://download.gnome.org/sources/evolution-data-server/3.56/evolution-data-server-3.56.2.tar.xz"
75sha256 = "df4ec29950f29a76eac6fbe0f814c48d2cef7d3fdb905002a4a883dd761ce93c"
76
77[build]
78compiler = "zig-cc"
79target = "x86_64-linux-musl"
80link = "dynamic"
81
82[build.phases]
83configure = '''
84python3 - <<'PY'
85p = 'CMakeLists.txt'
86s = open(p).read()
87assert 'add_subdirectory(po)\n' in s, 'ancla add_subdirectory(po) no encontrada'
88s = s.replace('add_subdirectory(po)\n', '', 1)
89open(p, 'w').write(s)
90
91p = 'cmake/modules/I18n.cmake'
92s = open(p).read()
93anchor = """ COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
94 --${_I18N_TYPE}
95 --template=${_source}
96 -d ${_po_dir}
97 -o ${_target}
98 ${_I18N_EXTRA_ARGS}
99"""
100assert anchor in s, 'ancla del COMMAND de i18n_merge_file no encontrada'
101s = s.replace(anchor, '\t\tCOMMAND ${CMAKE_COMMAND} -E copy ${_source} ${_target}\n', 1)
102open(p, 'w').write(s)
103PY
104PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages cmake -S . -B build \
105 -DCMAKE_INSTALL_PREFIX=/usr \
106 -DCMAKE_BUILD_TYPE=Release \
107 -DENABLE_INTROSPECTION=ON \
108 -DENABLE_GTK=OFF \
109 -DENABLE_GTK4=OFF \
110 -DENABLE_GOA=OFF \
111 -DENABLE_WEATHER=OFF \
112 -DENABLE_CANBERRA=OFF \
113 -DENABLE_EXAMPLES=OFF \
114 -DENABLE_TESTS=OFF \
115 -DENABLE_INSTALLED_TESTS=OFF \
116 -DENABLE_GTK_DOC=OFF \
117 -DENABLE_VALA_BINDINGS=OFF \
118 -DWITH_OPENLDAP=OFF \
119 -DWITH_KRB5=OFF \
120 -DWITH_LIBDB=OFF \
121 -DWITH_PHONENUMBER=OFF \
122 -DWITH_SYSTEMDUSERUNITDIR=no
123'''
124compile = 'PYTHONPATH=/usr/lib/python3.12/site-packages cmake --build build -j"$(nproc)"'
125install = 'PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out cmake --install build'
126
127[deps]
128build = ["cmake", "pkgconf", "python3", "gperf", "py3-setuptools", "gi-foreign-girs", "gobject-introspection", "glib", "glib-introspected", "libsoup", "libical", "libsecret", "nspr", "nss", "libxml2-shared", "libuuid-shared", "sqlite-shared", "json-glib", "icu4c", "libgcrypt-shared", "libgpg-error-shared", "nghttp2", "libpsl", "libffi", "pcre2", "zlib-shared"]