Files
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

72 lines
4.7 KiB
TOML

# cosmic-settings — el panel de control. Tercera aplicación con ventana del catálogo.
#
# ── LO QUE NO ARRASTRA, Y ES LA BUENA NOTICIA ───────────────────────────────────────────────────
# Un panel de control suena a la peor dep del mundo: red, audio, discos, usuarios, energía,
# bluetooth. En COSMIC no lo es, porque **habla con los daemons por D-Bus vía `zbus`, que es Rust
# puro**: no enlaza NetworkManager, ni libpulse, ni udisks, ni accountsservice. Se comprobó ANTES de
# escribir la receta, listando los crates `-sys` del `Cargo.lock`, que es donde vive la verdad sobre
# qué C hace falta:
# drm-sys → libdrm · input-sys → libinput · libudev-sys → libudev-zero · dav1d-sys → dav1d
# wayland-sys → dlopen (runtime) · gettext-sys → trae su propio C
# O sea: el juego fijo de todo cliente, más `libdrm` (configuración de pantallas) y `dav1d`, que
# vuelve a aparecer por la unificación de features de cargo — la misma que lo trajo con cosmic-bg.
#
# `rust-version = "1.93"` en el workspace; el sandbox tiene 1.96 ⇒ entra sin tocar nada.
name = "cosmic-settings"
version = "1.5.0"
license = "GPL-3.0"
[source]
tarball = "https://github.com/pop-os/cosmic-settings/archive/epoch-1.5.0/cosmic-settings-epoch-1.5.0.tar.gz"
sha256 = "06070fae46b77a57f906b0ee670e9d5c8ec10604359653bc6ca7b1eece6237ec"
# ⚠ LA MISMA BARRA DE MÁS QUE EN `cosmic-applets`, y falla igual de temprano: el manifiesto apunta a
# `https://github.com/pop-os/cosmic-protocols//` (dos barras al final) para que cargo trate esa
# fuente como DISTINTA de la normal y el `[patch]` de al lado no se apunte a sí mismo. GitHub
# devuelve **404** a esa forma, así que `cargo vendor` no puede clonar y el build muere en el fetch:
# failed to load source for dependency `cosmic-client-toolkit` ← con tres reintentos de red
# La barra se MUEVE al medio (`pop-os//cosmic-protocols`), que es la forma que usa `cosmic-comp` —y
# por eso ése construyó sin parche—. Se tocan `Cargo.toml` **y** `Cargo.lock`: cambiar sólo uno rompe
# el `--locked` del build hermético.
patches = ["cosmic-settings-protocols-url.patch"]
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
# Dinámico como todo cliente de la suite: `wayland-client` entra con la feature `dlopen` y un musl
# estático no la honra.
link = "dynamic"
# El workspace es VIRTUAL (no tiene paquete raíz) pero declara
# `default-members = ["cosmic-settings"]`, así que `-p` deja el target único que `cargo rustc --`
# exige. Sin `-p`, cargo intentaría construir los ~30 miembros (`pages/*`, `subscriptions/*`).
flags = ["-p", "cosmic-settings", "--bin", "cosmic-settings"]
[build.phases]
# El `just install` traducido, con `rootdir=/`. Son CUATRO clases de fichero y ninguna es opcional:
# · el binario;
# · `target/xdgen/` → los `.desktop`, que el build GENERA (crate `xdgen`). Acá son VARIOS, uno por
# página del panel (pantalla, sonido, red…), así que la biblioteca lista cada sección como
# entrada propia. Por eso es un `find`, no un `cp` de un fichero.
# · `resources/default_schema/` → la config por defecto de cosmic-config, mismo árbol
# `<Componente>/v1/<clave>` que ya mordió en cosmic-comp: **cada clave es UN fichero cuyo nombre
# es la clave**, así que hay que preservar la estructura (de ahí el `find`, no un `cp` plano).
# · las reglas de polkit: sin ellas el panel abre pero no puede cambiar nada que pida autoridad
# (usuarios, hora del sistema). Van con el paquete, no con el shim de arje.
install = '''
mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/metainfo \
/out/usr/share/cosmic /out/usr/share/icons/hicolor \
/out/usr/share/polkit-1/actions /out/usr/share/polkit-1/rules.d
cp target/release/cosmic-settings /out/usr/bin/cosmic-settings
chmod 755 /out/usr/bin/cosmic-settings
cp resources/com.system76.CosmicSettings.metainfo.xml /out/usr/share/metainfo/
cp resources/polkit-1/rules.d/cosmic-settings.rules /out/usr/share/polkit-1/rules.d/
cp resources/polkit-1/actions/com.system76.CosmicSettings.Users.policy /out/usr/share/polkit-1/actions/
[ -d target/xdgen ] && (cd target/xdgen && find . -type f -exec cp --parents '{}' /out/usr/share/applications/ \;) || true
(cd resources/default_schema && find . -type f -exec cp --parents '{}' /out/usr/share/cosmic/ \;)
(cd resources/icons && find . -type f -exec cp --parents '{}' /out/usr/share/icons/hicolor/ \;)
'''
[deps]
# El juego fijo de todo cliente + `libdrm` (páginas de pantalla) + `dav1d` (unificación de features
# de cargo, igual que en cosmic-bg). Nada de NetworkManager/pipewire/udisks: todo eso es zbus.
build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput", "libdrm", "dav1d"]