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

51 lines
4.2 KiB
TOML

# gjs 1.84.2 — los bindings JavaScript de GNOME (GNOME 48). gnome-shell cuelga de gjs, y gjs cuelga de
# spidermonkey (mozjs-128), que YA está sellado en este repo (recipes/incoming-gnome/spidermonkey.toml,
# provee mozjs-128.pc). gjs 1.84 requiere mozjs 128 ✓ — coincide con el spidermonkey sellado.
#
# ⚠ PRIMER BORRADOR feature-minimal — NO garantiza sellar a la primera. Notas de diseño:
# · Build = meson (idioma GNOME, auto-detectado por el lab; calcado de gtk4/glib/libadwaita).
# · compiler = zig-cc (como todo el stack meson GNOME del corpus). gjs es cpp+c; zig lo cubre.
# · link = DYNAMIC (NO static como gtk4/glib): spidermonkey sólo provee libmozjs-128.so (shared-js);
# no hay .a de mozjs contra la que enlazar estáticamente, así que gjs enlaza la .so ⇒ dynamic.
# · Feature-minimal: sin instalar tests, sin profiler (evita la dep sysprof-capture), tests de
# DBus/GTK saltados, sin x11 (gjs no tiene backend x11 propio; cairo-xlib es `required: false`).
# readline SÍ (la receta readline existe y da la shell interactiva/depurador).
name = "gjs"
version = "1.84.2"
license = "MIT AND LGPL-2.0-or-later"
[source]
tarball = "https://download.gnome.org/sources/gjs/1.84/gjs-1.84.2.tar.xz"
sha256 = "35142edf345705636300291ec3a7d583f14969ff3fae0ff30f4a95b1e6740166"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
# -Dbsymbolic_functions=false: el linker zig/lld NO soporta -Bsymbolic-functions (meson.build:89 aborta).
# BLOQUEADO en el link por cairo: cairo es dep OBLIGATORIA (no hay -Dcairo) y el cairo estático arrastra
# fontconfig.a→expat, freetype→png/z, pixman ⇒ 'undefined symbol: XML_GetCurrentLineNumber'. cpp_link_args
# global rompe el sanity-check de meson. Fix real = cairo isla DINÁMICA (cierre C #7): entonces gjs linkea
# libcairo.so con NEEDED libfontconfig.so y la cadena resuelve al cargar. Ver [[gnome-introspection-dinamica]].
# sed: gjs incluye INCONDICIONALMENTE el subproyecto gobject-introspection-tests (Regress/WarnLib,
# con 'cairo=true') + subdirs installed-tests/test. Sus g-ir-scanner piden cairo-1.0.gir, que nuestro
# g-i (cairo=disabled) no instala ⇒ "Couldn't find include 'cairo-1.0.gir'". Son SÓLO fixtures de test;
# los removemos (gi_tests no se usa fuera del bloque). Deja la libgjs + GjsPrivate typelib, que es el hito.
configure = "sed -i \"/gi_tests = subproject('gobject-introspection-tests'/,/install_dir=@0@/d; /subdir('installed-tests')/d; /subdir('test')/d\" meson.build; PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dbsymbolic_functions=false -Dinstalled_tests=false -Dprofiler=disabled -Dskip_dbus_tests=true -Dskip_gtk_tests=true -Dreadline=disabled -Dc_args=-Wno-error=date-time"
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
[deps]
# spidermonkey → mozjs-128.pc (sellado); glib → glib-2.0/gobject-2.0/gio-2.0/gthread-2.0; cairo →
# cairo + cairo-gobject; libffi, readline, pkgconf existen en el corpus. meson/samurai/python3 = tooling.
# gobject-introspection: g-ir-scanner ⇒ typelib GjsPrivate + gobject-introspection-1.0.pc en link.
# glib-introspected: gjs escanea GjsPrivate, que referencia GObject/GLib ⇒ el scan necesita los .gir
# CORE (GObject-2.0.gir/GLib-2.0.gir) que SÓLO produce glib-introspected. hammer hidrata deps DIRECTAS,
# no transitivas de g-i ⇒ hay que declararla aquí (misma lección del keystone [[gnome-introspection-dinamica]]).
# cairo-shared (+ su cierre -shared) = cairo DINÁMICO: gjs linkea libcairo.so y la cadena resuelve por
# NEEDED (no undefined XML_GetCurrentLineNumber). glib-2.0.pc → libpcre2-8 (pcre2 canónico da el .pc).
# pixman canónico ya es dinámico. expat canónico (--with-pic, embebido en el cierre).
build = ["spidermonkey", "nspr", "glib", "glib-introspected", "cairo-shared", "freetype-shared", "fontconfig-shared", "pixman", "libpng-shared", "zlib-shared", "expat", "libffi", "readline", "ncurses", "gobject-introspection", "meson", "samurai", "python3", "py3-setuptools", "pkgconf", "pcre2"]