cosmic: dav1d 1.5.4 sellado (b3:aab7a874) — la feature de cargo la prende OTRO, no el paquete

cosmic-bg declara `image` con default-features=false y sin AVIF, y aun así se
compila dav1d-sys: las features de cargo se UNIFICAN en el grafo, así que alcanza
con que otro crate del árbol la prenda para que la decisión del que la apagó no
mande. Mismo modo de falla que un '.pc Requires' arrastrando una dep que nadie
declaró.

Se podría parchear el Cargo.toml de upstream para cortarlo; no se hizo, porque
eso es mentirle al paquete sobre lo que hace. Si el grafo dice que sabe
decodificar AVIF, que lo sepa de verdad — y cualquier cosa del corpus que decodifique
AV1 va a querer dav1d igual.

Dos decisiones del build, las dos leídas del meson.build y no supuestas: nasm es
dep REAL (find_program en :536, exige >= 2.14; copiado de la cola GNOME con hash
verificado b3:33383070), y default_library=both porque quien consuma dav1d con
enlace estático necesita la .a — publicar sólo la .so convierte cualquier
link=static río abajo en una etiqueta falsa.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-03 10:58:39 -04:00
co-authored by Claude Opus 5
parent b1bbdefc85
commit 1355fc1650
3 changed files with 67 additions and 1 deletions
+4 -1
View File
@@ -42,4 +42,7 @@ cd data && find v1 -type f -exec install -Dm0644 {} /out/usr/share/cosmic/com.sy
'''
[deps]
build = ["libxkbcommon", "pkgconf"]
# dav1d: NO lo pide cosmic-bg sino la unificación de features de cargo — el crate `image`
# termina con AVIF prendida por otro consumidor del árbol aunque acá esté declarada sin
# defaults. Ver el comentario de recipes/incoming-cosmic/dav1d.toml.
build = ["libxkbcommon", "pkgconf", "dav1d"]
+41
View File
@@ -0,0 +1,41 @@
# dav1d 1.5.4 — el decodificador AV1 de VideoLAN. Entra por la puerta de atrás: lo pide `dav1d-sys`,
# que llega al grafo de `cosmic-bg` a través del crate `image`.
#
# ── POR QUÉ ESTÁ ACÁ Y NO SE APAGÓ LA FEATURE ───────────────────────────────────────────────────
# cosmic-bg declara `image` con `default-features = false` y sin AVIF. Igual se compila `dav1d-sys`,
# porque **las features de cargo se UNIFICAN en el grafo**: alcanza con que otro crate del árbol
# —acá, los que traen `image` con sus defaults— la prenda, y la decisión del paquete que la apagó no
# manda. Es el mismo modo de falla que un `.pc Requires` arrastrando una dep que nadie declaró.
# Se podría parchear el Cargo.toml de upstream para cortarlo, pero eso es mentirle al paquete sobre
# lo que hace: si el grafo dice que sabe decodificar AVIF, que lo sepa de verdad.
#
# Y no es una dep de un solo cliente: cualquier cosa del corpus que decodifique AV1 la va a querer.
#
# ── DECISIONES DEL BUILD, LAS DOS MEDIDAS EN EL meson.build ─────────────────────────────────────
# · `nasm` es dep de build REAL, no opcional: con `enable_asm` (el default) `meson.build:536` hace
# `find_program('nasm')` y exige >= 2.14. La alternativa honesta sería `-Denable_asm=false`, que
# deja un decodificador AV1 en C puro — varias veces más lento. nasm ya está sellado en la cola
# GNOME, así que la copia no cuesta un build (hash verificado: b3:33383070).
# · `default_library=both`: dav1d-sys resuelve por pkg-config, y quien lo consuma con enlace ESTÁTICO
# necesita la `.a`. Publicar sólo la `.so` convierte cualquier `link = "static"` río abajo en una
# etiqueta falsa — la deuda que el frente static-audit ya persiguió una vez.
name = "dav1d"
version = "1.5.4"
[source]
tarball = "https://code.videolan.org/videolan/dav1d/-/archive/1.5.4/dav1d-1.5.4.tar.gz"
sha256 = "a1d5b63d2d38ec9bd03acf643caa51fa22edd1e89c5a109c4807717216bbec07"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --libdir=/usr/lib --buildtype=release --default-library=both -Denable_tools=false -Denable_tests=false"
compile = "ninja -C output"
install = "DESTDIR=/out ninja -C output install"
[deps]
build = ["meson", "samurai", "python3", "pkgconf", "nasm"]
+22
View File
@@ -0,0 +1,22 @@
# nasm — ensamblador x86. Herramienta de BUILD de mozjs (algunas rutas de código generan .asm) y de
# varias libs de media más adelante. No está en el rootfs Alpine ni tenía receta. C plano, autotools.
name = "nasm"
version = "2.16.03"
[source]
tarball = "https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.xz"
sha256 = "1412a1c760bbd05db026b6c0d1657affd6631cd0a63cddb6f73cc6d4aa616148"
strip_components = 1
[build]
compiler = "gcc"
target = "x86_64-linux-musl"
link = "static" # binario de herramienta: estático, sin runtime que arrastrar
[build.phases]
configure = "./configure --build=$CBUILD --host=$CHOST --prefix=/usr"
compile = "make -j\"$(nproc)\""
install = "make DESTDIR=/out install"
[deps]
build = ["make"]