Files
takana/recipes/incoming-gnome/evolution-data-server.toml
Sergio 73b288171c libical y evolution-data-server: dos rotas más del censo — y una cae enlazando una .so, no un binario
Segunda tanda del censo con `verificar-repro.sh`, esta vez sobre `poppler-glib` y las dos recetas
CMake de la cola de GNOME: **2 de 3 no construyen**. Con esto el censo va en **7 rotas de 18
barridas**, todas por el mismo crash del `lld` de zig con el `--dependency-file` de CMake ≥3.27.

⚠ **`libical` cae enlazando `libical.so` — una librería COMPARTIDA, no un ejecutable.** Eso termina
de enterrar el predictor barato que intenté ayer («falla la que instala binarios», 12 aciertos de
14): el crash puede estar en CUALQUIER link del build. Ni ejecutables instalados, ni sólo
ejecutables: cualquier link.

`evolution-data-server` muere en `camel-lock-helper` y `camel-gpg-photo-saver`, y necesita su propia
perilla además de la de su dep — arreglar `libical` no la arregla, porque el fallo está en SU link.

Las dos estaban selladas y rotas a la vez. El artefacto tapaba que la cola de GNOME ya no se puede
reconstruir entera.
2026-09-14 01:32:19 +00:00

135 lines
8.1 KiB
TOML

# evolution-data-server 3.56.2 — el almacén de contactos/calendario/correo de GNOME. Es LA frontera
# de la cima: gnome-shell exige libecal-2.0 y libedataserver-1.2 (meson.build:72-73) para el
# calendario del panel superior, y no hay opción para apagarlo — verificado que la serie 50.x lo
# sigue pidiendo igual, así que subir de versión tampoco lo esquiva.
#
# ── SMIME/NSS: EL ATAJO QUE NO ERA ──────────────────────────────────────────────────────────────
# Primer intento: esquivar NSS con -DENABLE_SMIME=OFF. eds declara esa opción (FindSMIME.cmake:19) y
# su cabecera hasta promete "Searches for Mozilla's NSS and NSPR libraries, unless -DENABLE_SMIME=OFF
# is used"… pero en 3.56.2 ese guard NO EXISTE: `include(FindSMIME)` es incondicional
# (CMakeLists.txt:303) y el fichero nunca vuelve a mirar la variable. Se cableó el guard que faltaba
# ⚠ **`CMAKE_LINK_DEPENDS_USE_LINKER=OFF`: sin esto NO CONSTRUYE HOY.** Estaba sellada y rota a la
# vez; el link de `camel-lock-helper` y `camel-gpg-photo-saver` muere con
# `Error running link command: Segmentation fault`. El `lld` de zig 0.16.0 segfaultea con el
# `--dependency-file` que CMake ≥3.27 emite. Ver `recipes/dwarves.toml`, donde se bisecó la línea de
# enlace literal, y `libical.toml`, que es su dep y tenía el mismo problema.
# (tres líneas con el mismo `return()` que el fichero ya usa en :56) y el configure pasó.
#
# Y el build igual cortó, en el 11%: src/camel/camel.c incluye <nspr.h>, "nss.h" y <ssl.h> SIN
# guardar por el #ifdef, y hace init/shutdown reales de NSS (nss_initlock, NSS_Shutdown);
# camel-msgport.c y camel-operation.c también usan NSPR. O sea que ENABLE_SMIME=OFF sólo compila
# fuera camel-smime-context.c, no camel entero. El modo está roto de verdad en esta versión, y
# arrancarlo a parches sería reescribir camel.
#
# Conclusión honesta: NSS no se esquiva, se paga. Se autoró `nss.toml` (b3:d0659c9c, selló a la
# primera pese a coreconf) y con eso el parche a FindSMIME sobra — la rama de pkg-config de
# FindSMIME encuentra `nspr` y `nss` sola y S/MIME queda ENCENDIDO, que es el default del upstream.
# Tampoco era deuda huérfana: NSS es la base criptográfica del frente del navegador.
#
# ── LOS OTROS DOS PARCHES: traducciones ─────────────────────────────────────────────────────────
# Se saca `add_subdirectory(po)` (:1023) por la misma razón que en gcr e iso-codes: el msgfmt de
# gettext-tiny —lo único que hay en el corpus— aborta con SIGABRT en ciertos .po, y eds trae ~100.
#
# Pero eso NO alcanza, y ahí está la sorpresa: eds usa msgfmt DOS veces por motivos distintos. La
# segunda es `i18n_merge_file` (I18n.cmake:19), que corre `msgfmt --desktop --template` para fusionar
# traducciones dentro de los .desktop y los .metainfo. Esa regla vive en data/, no en po/, así que
# sobrevivió al primer parche y el build cortó en el 5% con
# `GETTEXT_MSGFMT_EXECUTABLE-NOTFOUND: not found`.
#
# Se reemplaza el COMMAND por `cmake -E copy`. NO es una aproximación: los templates traen las claves
# PLANAS (`Name=Events and Tasks Reminders`, verificado en
# data/org.gnome.Evolution-alarm-notify.desktop.in.in) y lo único que hace `msgfmt --desktop` es
# AGREGAR las variantes `Name[es]=`. Sin catálogos que fusionar, copiar produce exactamente el mismo
# fichero que produciría msgfmt. Se pierden los textos traducidos, no la librería que enlaza el shell.
#
# Es la TERCERA receta que choca con ese msgfmt; ya conviene autorar el gettext de GNU de verdad en
# vez de seguir apagando traducciones receta por receta.
#
# ── DEPS DURAS, contra el CMakeLists real ───────────────────────────────────────────────────────
# libsecret-1, libxml-2.0, libsoup-3.0 :932 (DATA_SERVER) — las tres selladas en esta cola.
# libical-glib :938 (CALENDAR) — sellada.
# json-glib-1.0, uuid, sqlite3 :423,424,850 — selladas.
# ICU :379 opcional, encendida: ya estaba paga por KDE.
# nspr/nss :932,944 — sólo si ENABLE_SMIME (ver arriba).
#
# ── APAGADOS, y la receta que cada uno ahorra ───────────────────────────────────────────────────
# -DENABLE_GTK=OFF → viene ON y pide gtk+-3.0, o sea GTK **3**, que no existe en este corpus
# (la onda 3 es Wayland/GTK4). Apagarlo también borra ENABLE_OAUTH2_WEBKITGTK
# (:427), que arrastraba WebKitGTK — el paquete más caro del ecosistema.
# -DENABLE_GTK4=OFF → mismo caso para WebKitGTK4 (:437). gtk4 SÍ está sellada, pero lo que el
# shell enlaza es libedataserver, no la UI de eds.
# -DENABLE_GOA=OFF → gnome-online-accounts.
# -DENABLE_WEATHER=OFF → libgweather (backend de calendario del clima).
# -DENABLE_CANBERRA=OFF→ libcanberra-gtk3 (sonido de la alarma).
# -DWITH_OPENLDAP=OFF → openldap (libreta de direcciones corporativa).
# -DWITH_KRB5=OFF → kerberos. Ojo: es variable_path con default "ON", no un option booleano.
# -DWITH_LIBDB=OFF → Berkeley DB (:516), backend heredado.
# -DWITH_PHONENUMBER=OFF → libphonenumber (C++ de Google).
# -DWITH_SYSTEMDUSERUNITDIR=no → eds instala units de usuario de systemd; acá PID1 es arje-zero.
# -DENABLE_TESTS=OFF -DENABLE_INSTALLED_TESTS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_GTK_DOC=OFF
# -DENABLE_VALA_BINDINGS=OFF → no hay valac en el corpus.
#
# -DENABLE_INTROSPECTION=ON viene OFF por defecto y acá NO es opcional: gnome-shell es JavaScript y
# lee EDataServer/ECal por typelib. Isla dinámica, ver [[gnome-introspection-dinamica]].
name = "evolution-data-server"
version = "3.56.2"
license = "LGPL-2.0-or-later"
[source]
tarball = "https://download.gnome.org/sources/evolution-data-server/3.56/evolution-data-server-3.56.2.tar.xz"
sha256 = "df4ec29950f29a76eac6fbe0f814c48d2cef7d3fdb905002a4a883dd761ce93c"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
configure = '''
python3 - <<'PY'
p = 'CMakeLists.txt'
s = open(p).read()
assert 'add_subdirectory(po)\n' in s, 'ancla add_subdirectory(po) no encontrada'
s = s.replace('add_subdirectory(po)\n', '', 1)
open(p, 'w').write(s)
p = 'cmake/modules/I18n.cmake'
s = open(p).read()
anchor = """ COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
--${_I18N_TYPE}
--template=${_source}
-d ${_po_dir}
-o ${_target}
${_I18N_EXTRA_ARGS}
"""
assert anchor in s, 'ancla del COMMAND de i18n_merge_file no encontrada'
s = s.replace(anchor, '\t\tCOMMAND ${CMAKE_COMMAND} -E copy ${_source} ${_target}\n', 1)
open(p, 'w').write(s)
PY
PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages cmake -S . -B build \
-DCMAKE_LINK_DEPENDS_USE_LINKER=OFF \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_INTROSPECTION=ON \
-DENABLE_GTK=OFF \
-DENABLE_GTK4=OFF \
-DENABLE_GOA=OFF \
-DENABLE_WEATHER=OFF \
-DENABLE_CANBERRA=OFF \
-DENABLE_EXAMPLES=OFF \
-DENABLE_TESTS=OFF \
-DENABLE_INSTALLED_TESTS=OFF \
-DENABLE_GTK_DOC=OFF \
-DENABLE_VALA_BINDINGS=OFF \
-DWITH_OPENLDAP=OFF \
-DWITH_KRB5=OFF \
-DWITH_LIBDB=OFF \
-DWITH_PHONENUMBER=OFF \
-DWITH_SYSTEMDUSERUNITDIR=no
'''
compile = 'PYTHONPATH=/usr/lib/python3.12/site-packages cmake --build build -j"$(nproc)"'
install = 'PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out cmake --install build'
[deps]
build = ["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"]