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