# 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
# (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_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"]
