# 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 , "nss.h" y 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"]