From 1355fc1650958d2a4c36b0fc75726eda433fb0a2 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 3 Aug 2026 10:58:39 -0400 Subject: [PATCH] =?UTF-8?q?cosmic:=20dav1d=201.5.4=20sellado=20(b3:aab7a87?= =?UTF-8?q?4)=20=E2=80=94=20la=20feature=20de=20cargo=20la=20prende=20OTRO?= =?UTF-8?q?,=20no=20el=20paquete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- recipes/incoming-cosmic/cosmic-bg.toml | 5 +++- recipes/incoming-cosmic/dav1d.toml | 41 ++++++++++++++++++++++++++ recipes/incoming-cosmic/nasm.toml | 22 ++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 recipes/incoming-cosmic/dav1d.toml create mode 100644 recipes/incoming-cosmic/nasm.toml diff --git a/recipes/incoming-cosmic/cosmic-bg.toml b/recipes/incoming-cosmic/cosmic-bg.toml index f5958b59..a688cc72 100644 --- a/recipes/incoming-cosmic/cosmic-bg.toml +++ b/recipes/incoming-cosmic/cosmic-bg.toml @@ -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"] diff --git a/recipes/incoming-cosmic/dav1d.toml b/recipes/incoming-cosmic/dav1d.toml new file mode 100644 index 00000000..8aabddbc --- /dev/null +++ b/recipes/incoming-cosmic/dav1d.toml @@ -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"] diff --git a/recipes/incoming-cosmic/nasm.toml b/recipes/incoming-cosmic/nasm.toml new file mode 100644 index 00000000..f047e0aa --- /dev/null +++ b/recipes/incoming-cosmic/nasm.toml @@ -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"]