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>
70 lines
4.3 KiB
TOML
70 lines
4.3 KiB
TOML
# pop-launcher — el MOTOR del lanzador. No es de la suite COSMIC y por eso casi se pasa por alto.
|
|
#
|
|
# ── POR QUÉ APARECE RECIÉN AHORA ────────────────────────────────────────────────────────────────
|
|
# `cosmic-launcher` selló, arranca, se registra en el bus… y `Super` no abre nada. La razón está en
|
|
# una línea del serial que no menciona ninguna tecla:
|
|
# ERROR pop-launcher failed to start: No such file or directory (os error 2)
|
|
# `cosmic-launcher` es **sólo la interfaz**: dibuja la lista y manda lo que tecleás por stdin a un
|
|
# proceso hijo, `pop-launcher`, que es quien busca. Sin ese binario la ventana no tiene nada que
|
|
# mostrar, así que no se muestra. Mismo modo de falla que el panel sin applets: **el componente que
|
|
# falta es un HIJO, no una librería**, y el log del padre se lee sano.
|
|
#
|
|
# Vive en OTRO repo (`pop-os/launcher`), no versiona por `epoch-N` y no entra en el pin lockstep de
|
|
# la suite: la versión la fija el `Cargo.lock` de cosmic-launcher, que pinea la rev exacta
|
|
# `a332a3a7` de la 1.2.7. Ese lock es la fuente de verdad — no el último tag del repo, que podría
|
|
# hablar otro protocolo con la interfaz que ya tenemos sellada.
|
|
name = "pop-launcher"
|
|
version = "1.2.7"
|
|
license = "MPL-2.0"
|
|
|
|
[source]
|
|
# Tarball por COMMIT, no por tag: la rev sale del Cargo.lock de cosmic-launcher y no hay tag que la
|
|
# nombre. GitHub sirve `/archive/<sha>.tar.gz` igual que los de tag, y el sha256 de abajo lo ancla.
|
|
tarball = "https://github.com/pop-os/launcher/archive/a332a3a73316a3595816dd02fe426a1d3543167a.tar.gz"
|
|
sha256 = "adff78338a1680d9efa068741f6a95458b21e8278d96f4903f06004fda8ad7c6"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
# DINÁMICO, por la misma razón que todo cliente de la suite: el plugin `cosmic_toplevel` entra con
|
|
# `cctk`/`sctk`, que traen `wayland-client` con la feature `dlopen`. Un musl estático no la honra.
|
|
link = "dynamic"
|
|
# El binario se llama `pop-launcher-bin` (paquete `bin/` del workspace) y se INSTALA como
|
|
# `pop-launcher`. Los tres nombres —paquete, binario compilado, binario instalado— no coinciden, y el
|
|
# que importa para que la interfaz lo encuentre es el último. `-p` además de `--bin` porque el
|
|
# workspace tiene cuatro miembros y `cargo rustc` exige un único target cuando hay flags tras `--`.
|
|
flags = ["-p", "pop-launcher-bin", "--bin", "pop-launcher-bin"]
|
|
|
|
[build.phases]
|
|
# El `just install` traducido, con `rootdir=/` (o sea `/usr`, no `~/.local`).
|
|
#
|
|
# ⚠ EL DISEÑO ES UN MULTIPLEXOR POR SYMLINK, igual que cosmic-applets: hay UN binario y cada plugin
|
|
# es un enlace con su nombre dentro de su propio directorio, junto al `plugin.ron` que lo describe.
|
|
# El servicio enumera `plugins/*/` y ejecuta el enlace; si el `.ron` está y el enlace no —o al revés—
|
|
# el plugin simplemente no existe para él, sin error. Por eso van los dos, y por eso el bucle no se
|
|
# puede "simplificar" a copiar los .ron sueltos.
|
|
#
|
|
# El `sed 's/_/-/'` de upstream cambia SÓLO el primer guión bajo, y así queda: `desktop_entries` es
|
|
# el directorio y `desktop-entries` el ejecutable de adentro. No es un descuido: son dos nombres
|
|
# distintos a propósito.
|
|
install = '''
|
|
mkdir -p /out/usr/bin /out/usr/lib/pop-launcher/plugins /out/usr/lib/pop-launcher/scripts
|
|
cp target/release/pop-launcher-bin /out/usr/bin/pop-launcher
|
|
chmod 755 /out/usr/bin/pop-launcher
|
|
for p in calc desktop_entries files find pop_shell pulse recent scripts terminal web cosmic_toplevel; do
|
|
mkdir -p /out/usr/lib/pop-launcher/plugins/$p
|
|
cp plugins/src/$p/*.ron /out/usr/lib/pop-launcher/plugins/$p/
|
|
ln -sf /usr/bin/pop-launcher "/out/usr/lib/pop-launcher/plugins/$p/$(echo $p | sed 's/_/-/')"
|
|
done
|
|
cp -r scripts/. /out/usr/lib/pop-launcher/scripts/ 2>/dev/null || true
|
|
'''
|
|
|
|
[deps]
|
|
# El juego fijo de todo cliente de la suite. `sctk`/`cctk` (plugin cosmic_toplevel) enlazan
|
|
# xkbcommon; udev/input llegan por la misma cadena. NO hace falta openssl: `reqwest` entra con
|
|
# `default-features = false` y `rustls-tls`, o sea TLS en Rust puro — al revés que
|
|
# cosmic-settings-daemon, que sí lo arrastra por native-tls.
|
|
# Tampoco hace falta pulseaudio pese al plugin `pulse`: habla con el servidor por su protocolo, no
|
|
# por libpulse.
|
|
build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"]
|