Files
takana/recipes/incoming-gnome/evolution-data-server.toml
T
sergioandClaude Opus 5 a6a9d59e4f licencias: 936 de 1141 (82%) — detección por evidencia, con sus dos imprecisiones declaradas
Esta mañana eran 0. Tras la tabla curada (228) y este paso, 936. Ninguna receta se
re-hasheó: verificado en 30 de las 708 tocadas, 30 hashes idénticos, 0 cambiados.

DE DÓNDE SALE EL DATO, Y POR QUÉ NO ES ADIVINAR. `scripts/licencias-detectar.sh` consulta
la API /repos/{o}/{r}/license de GitHub para las 673 recetas cuya fuente vive allí. Eso
devuelve el resultado de DETECTAR el fichero LICENSE que el repo tiene de verdad
(licensee), no una etiqueta escrita a mano en una web: es la misma evidencia que veríamos
abriendo el tarball, obtenida sin bajar 673 tarballs por un enlace de 8 Mbps. 610 con SPDX
definido; las 63 que GitHub marca NOASSERTION/other se DESCARTAN — un «no sé» de la fuente
se propaga como hueco, no se redondea a una licencia plausible.

Las familias no-GitHub van curadas por la URL DE FUENTE, que es la evidencia que el nombre
no da. Y ahí cometí el error simétrico al que este mismo fichero advertía: había puesto
`knighttime` entre las «herramientas Go» POR SU NOMBRE, y su tarball sale de
download.kde.org — es un Framework de KDE, LGPL. Descartar por nombre falla igual que
aceptar por nombre. Corregido en la cabecera.

LAS DOS IMPRECISIONES, contables con `licencias.sh --revisar` en vez de escondidas:

 1. SPDX OBSOLETOS Y AMBIGUOS (71 recetas). GitHub devuelve `GPL-3.0`, `LGPL-2.1`,
    `AGPL-3.0`… identificadores que SPDX declaró obsoletos PRECISAMENTE porque no
    distinguen `-only` de `-or-later`, y esa diferencia decide con qué se puede combinar el
    paquete. NO se normalizan a ciegas: mapear GPL-3.0 → GPL-3.0-or-later sería inventar el
    dato que falta. Quedan marcadas para resolver mirando el fuente.

 2. LICENCIAS DOBLES COLAPSADAS. La API devuelve UNA sola licencia y muchos proyectos Rust
    son «MIT OR Apache-2.0» (p.ej. `fd` quedó como Apache-2.0). No es falso —cumplir una de
    las opciones concedidas basta— pero es incompleto. Lo resuelve el cierre estructural:
    leer el campo `license` del Cargo.toml en la fase de fetch.

Y un fallo que habría escrito basura en silencio: `licencias-detectadas.tsv` tiene TRES
columnas (añade el owner/repo consultado, para poder auditar) y el sembrador leía dos, así
que la licencia se habría llevado pegado el slug — `license = "MIT<TAB>owner/repo"`, sin
que nada lo validara. Arreglado antes de sembrar.

Quedan 205 sin licencia y 71 por desambiguar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 13:26:22 -04:00

129 lines
7.6 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
# (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"]