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>
64 lines
3.5 KiB
TOML
64 lines
3.5 KiB
TOML
# cosmic-screenshot — la captura de pantalla. **La receta más barata de toda la campaña y la más
|
|
# inútil por sí sola**, y las dos cosas por la misma razón: no captura nada; le PIDE la captura al
|
|
# portal XDG.
|
|
#
|
|
# ── LO QUE ES: 130 líneas de Rust y cero C ──────────────────────────────────────────────────────
|
|
# Sus deps son `ashpd` (cliente de portales sobre zbus), `jiff`, `dirs`, `tokio`, `clap`, `zbus` y el
|
|
# andamiaje de i18n. Los únicos `-sys` del lock son `dirs-sys`, `linux-raw-sys`, `js-sys` y
|
|
# `windows-sys`: ninguno compila C en Linux. No necesita ni el juego fijo de cuatro que pide todo
|
|
# cliente de la suite — no dibuja, no abre ventana, no habla wayland.
|
|
#
|
|
# ── LO QUE NO ES: no hay captura sin PORTAL ─────────────────────────────────────────────────────
|
|
# `src/main.rs` arranca con `use ashpd::desktop::screenshot::Screenshot` y todo su trabajo es
|
|
# `Screenshot::request()`, o sea una llamada a `org.freedesktop.portal.Desktop`. Ese nombre lo
|
|
# registra el frontend `xdg-desktop-portal`, que **no está en la imagen**; el backend que lo
|
|
# implementaría para este escritorio es `xdg-desktop-portal-cosmic`, que tampoco.
|
|
#
|
|
# Así que esta receta entrega **el binario correcto y el `.desktop` en la biblioteca**, y al
|
|
# ejecutarlo falla al no encontrar el portal. Se sella igual y a propósito: es la pieza cliente, ya
|
|
# está paga, y deja el frente reducido a UNA pregunta —¿se puede tener el portal sin la glib
|
|
# compartida?—. El frontend `xdg-desktop-portal` es C sobre GIO; el backend de COSMIC es Rust. Ver el
|
|
# runbook.
|
|
#
|
|
# Lo único que SÍ funciona hoy de su código es el aviso final: manda `org.freedesktop.Notifications`,
|
|
# y eso lo sirve `cosmic-notifications`, que ya está en la imagen.
|
|
#
|
|
# El `.desktop` y los iconos vienen ESTÁTICOS en `resources/`, no generados por `xdgen` como en
|
|
# term/files/settings/edit/store. Por eso acá no hacen falta `INSTALL_DIR` ni `APPID`.
|
|
name = "cosmic-screenshot"
|
|
version = "0.1.0"
|
|
license = "GPL-3.0"
|
|
|
|
[source]
|
|
tarball = "https://github.com/pop-os/cosmic-screenshot/archive/epoch-1.5.0/cosmic-screenshot-epoch-1.5.0.tar.gz"
|
|
sha256 = "2a0a1fb18303773fbfe54613b0b5603871a72cbbb5b0ae183b5390227671b9a3"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
# Acá el estático SÍ se podría: no enlaza wayland, así que no lo alcanza la trampa del `dlopen` de
|
|
# `wayland-client` que obliga a dinámico a todos los demás clientes. Se deja dinámico igual, por
|
|
# coherencia con la suite y para no ser la única pieza que resuelva distinto.
|
|
link = "dynamic"
|
|
|
|
[build.phases]
|
|
install = '''
|
|
mkdir -p /out/usr/bin /out/usr/share/applications
|
|
cp target/release/cosmic-screenshot /out/usr/bin/cosmic-screenshot
|
|
chmod 755 /out/usr/bin/cosmic-screenshot
|
|
cp resources/com.system76.CosmicScreenshot.desktop /out/usr/share/applications/
|
|
for size in resources/icons/hicolor/*; do
|
|
[ -d "$size" ] || continue
|
|
s=$(basename "$size")
|
|
if [ -f "$size/apps/com.system76.CosmicScreenshot.svg" ]; then
|
|
mkdir -p "/out/usr/share/icons/hicolor/$s/apps"
|
|
cp "$size/apps/com.system76.CosmicScreenshot.svg" "/out/usr/share/icons/hicolor/$s/apps/"
|
|
fi
|
|
done
|
|
'''
|
|
|
|
[deps]
|
|
# Vacío a propósito, y medido: no hay un solo `-sys` que compile C en Linux. Es la única pieza de la
|
|
# suite que no necesita ni `libxkbcommon` ni `libinput`.
|
|
build = []
|