Tres que había clasificado como decisión legal y no lo eran. Las dos causas son distintas y las dos me las estaba perdiendo por mirar sólo el árbol: **ffmpeg → LGPL-2.1-or-later.** Su raíz trae cuatro COPYING.* y por eso el detector se planta, con razón: el árbol solo no puede decidir. Pero el `LICENSE.md` del propio ffmpeg explica la regla —«In combination the LGPL v2.1+ applies to FFmpeg» y «None of these parts are used by default, you have to explicitly pass `--enable-gpl`… In this case, FFmpeg's license changes to GPL v2+»— y la respuesta la da NUESTRA receta: no pasa `--enable-gpl` ni `--enable-version3`, y encima va con `--disable-autodetect`. O sea que la licencia sale de cruzar el árbol con los flags, no de elegir uno de los cuatro ficheros. **llvm18 y clang18 → Apache-2.0 WITH LLVM-exception.** Acá el detector veía «tres licencias distintas» en un solo `LICENSE.TXT` y se plantaba, pero el fichero ABRE diciendo «The LLVM Project is under the Apache License v2.0 with LLVM Exceptions»: lo demás es la sección legada. La regla de «varias licencias ⇒ decide un humano» es correcta como default y aquí el humano sólo tuvo que leer la primera línea. `licenses/` pasa de 48 a 49 textos: `LLVM-exception` hacía falta para poder declararla, que es el lazo de siempre —no se declara lo que no se puede entregar—. El único sin texto canónico sigue siendo `LicenseRef-qorpa-ajena-no-enumerable`, que es identificador nuestro y SPDX no publica. 97% (1135/1165); la cola baja de 27 a 24. Los 3 ArtifactHash, idénticos.
92 lines
5.0 KiB
TOML
92 lines
5.0 KiB
TOML
# ══ SUBIÓ AL CORPUS (2026-09-04), Y LA COPIA DE LA COLA SE JUBILÓ ══════════════════════════════
|
|
# Nació en `incoming-cosmic` porque la pidió un crate `*-sys` del portal. Sube porque la PLATAFORMA
|
|
# GECKO la necesita: el build de Firefox corre `bindgen` sobre los headers de C++ y bindgen carga
|
|
# `libclang.so` en runtime — sin esto no hay Firefox, ni Waterfox, ni Zen. Y desde el corpus no se
|
|
# alcanza una cola hermana.
|
|
#
|
|
# La mudanza fue GRATIS y se midió antes: sus cinco deps (cmake, samurai, python3, pkgconf, llvm18)
|
|
# viven SÓLO en el corpus, o sea que `incoming-cosmic` ya las resolvía por caída al padre ⇒ el cierre
|
|
# no cambia. `hammer hash` dio el MISMO ArtifactHash (b3:25d95279…) en las dos rutas, así que
|
|
# `xdg-desktop-portal-cosmic` no se entera: sigue resolviéndola por caída al padre, sin rebuild.
|
|
# Se MUEVE y no se copia — dos ficheros para un artefacto es el cuadro de las dos glib esperando a
|
|
# que uno de los dos derive.
|
|
#
|
|
# clang18 (18.1.8) — **sólo `libclang.so`**, y no está acá por querer un compilador más: está porque
|
|
# `bindgen` no puede generar bindings sin él, y sin bindgen no hay backend del portal.
|
|
#
|
|
# ── LA CADENA DE POR QUÉ, QUE CONVIENE LEER ENTERA ANTES DE JUZGAR EL TAMAÑO ─────────────────────
|
|
# `cosmic-screenshot` pide una captura al portal
|
|
# → el frontend `xdg-desktop-portal` enruta al backend
|
|
# → `xdg-desktop-portal-cosmic` implementa ScreenCast/Screenshot
|
|
# → declara `pipewire` y `libspa-sys` como deps DURAS (no opcionales)
|
|
# → `libspa-sys/build.rs` corre `bindgen::builder()` **incondicional**, sin bindings
|
|
# pregenerados de reserva
|
|
# → bindgen carga `libclang.so` en tiempo de ejecución.
|
|
#
|
|
# Se verificó que no hay atajo: el `build.rs` de libspa-sys no tiene rama alternativa (a diferencia
|
|
# de `aws-lc-sys`, que sí cae a bindings pregenerados con `cargo:rustc-cfg=universal` y por eso cruzó
|
|
# a musl sin cmake ni perl). Y `libclang.so` no está en el corpus ni en los 182 binarios del rootfs
|
|
# del constructor: `llvm18` se selló con `-DLLVM_ENABLE_PROJECTS=""`, o sea LLVM a secas para el JIT
|
|
# de llvmpipe.
|
|
#
|
|
# ── POR QUÉ ES MÁS BARATO DE LO QUE PARECE ──────────────────────────────────────────────────────
|
|
# **No se recompila LLVM.** El artefacto `llvm18` ya publica `usr/include/llvm`, `usr/include/llvm-c`
|
|
# y `usr/lib/cmake/llvm`, así que esto es un build de clang CONTRA un LLVM ya sellado
|
|
# (`-DCLANG_LINK_CLANG_DYLIB=ON` + `LLVM_LINK_LLVM_DYLIB`), no el monstruo entero.
|
|
#
|
|
# Se instala sólo lo que bindgen necesita. El binario `clang` NO es el objetivo: el compilador de
|
|
# esta distro sigue siendo zig-cc, y agregar otro compilador al catálogo sería justo lo contrario de
|
|
# la deuda que la campaña «matar gcc» viene pagando.
|
|
#
|
|
# ── PATRÓN gcc-de-gueto, igual que llvm18 y cmake ───────────────────────────────────────────────
|
|
# C++ a escala ⇒ g++ del sandbox con `-static-libstdc++ -static-libgcc`, para que la `.so` quede con
|
|
# `NEEDED` sólo `libc.musl` y no arrastre el runtime C++ de Alpine a todo el que la declare. Es la
|
|
# lección de «MATAR GCC última milla»: sin esos dos flags, el artefacto contagia `libstdc++` y
|
|
# `libgcc_s` a cada build que lo use.
|
|
#
|
|
# ⚠ **BUILD PESADO**: mismo peso que llvm18, que se selló en el worker gordo de la granja. En el
|
|
# laptop pide horas y decenas de GB de `/home`.
|
|
name = "clang18"
|
|
version = "18.1.8"
|
|
license = "Apache-2.0 WITH LLVM-exception"
|
|
|
|
[source]
|
|
tarball = "https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-project-18.1.8.src.tar.xz"
|
|
sha256 = "0b58557a6d32ceee97c8d533a59b9212d87e0fc4d2833924eb6c611247db2f2a"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[build.phases]
|
|
configure = '''
|
|
CC=gcc CXX='g++ -static-libstdc++ -static-libgcc' \
|
|
cmake -S clang -B build -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
|
-DCMAKE_CXX_FLAGS="-include cstdint" \
|
|
-DCMAKE_C_FLAGS="-include stdint.h" \
|
|
-DLLVM_DIR=/usr/lib/cmake/llvm \
|
|
-DLLVM_LINK_LLVM_DYLIB=ON \
|
|
-DCLANG_LINK_CLANG_DYLIB=ON \
|
|
-DLLVM_ENABLE_RTTI=ON \
|
|
-DCLANG_INCLUDE_TESTS=OFF \
|
|
-DCLANG_INCLUDE_DOCS=OFF \
|
|
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
|
|
-DCLANG_ENABLE_ARCMT=OFF \
|
|
-DLLVM_INCLUDE_TESTS=OFF \
|
|
-DLLVM_INCLUDE_DOCS=OFF
|
|
'''
|
|
compile = "ninja -C build libclang.so clang-resource-headers"
|
|
# Sólo la librería y sus cabeceras: `ninja install` traería el binario `clang`, `clang-format`,
|
|
# `scan-build` y compañía, que acá no cumplen ninguna función.
|
|
install = '''
|
|
mkdir -p /out/usr/lib /out/usr/include
|
|
cp -a build/lib/libclang.so* /out/usr/lib/
|
|
cp -a clang/include/clang-c /out/usr/include/
|
|
'''
|
|
|
|
[deps]
|
|
build = ["cmake", "samurai", "python3", "pkgconf", "llvm18"]
|