From d1032c03366f6009cb65a356a7d37cbc645cb706 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 17 Sep 2026 21:27:16 +0000 Subject: [PATCH] =?UTF-8?q?linux-firmware:=20los=20enlaces=20de=20WHENCE?= =?UTF-8?q?=20se=20encadenan,=20as=C3=AD=20que=20van=20en=20tres=20pasadas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Primer intento con el arreglo: 2078 de 2415 (86 %), y el guardián cortó. La causa es que WHENCE encadena —declara `a -> b` donde `b` es a su vez un enlace que aparece más abajo—, así que en una sola pasada el destino todavía no existe cuando toca crear el primero. Se repite hasta que una pasada no agregue nada, con tope de tres. Y ahora salta los que ya existen, para no recontar. Co-Authored-By: Claude Opus 5 (1M context) --- recipes/linux-firmware.toml | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/recipes/linux-firmware.toml b/recipes/linux-firmware.toml index 72a96f59..31f15bea 100644 --- a/recipes/linux-firmware.toml +++ b/recipes/linux-firmware.toml @@ -77,16 +77,25 @@ cp -a ./* /out/lib/firmware/ sed -n 's/^Link:[[:space:]]*//p' /out/lib/firmware/WHENCE \ | sed 's/[[:space:]]*->[[:space:]]*/\t/' > /tmp/whence-links.tsv declarados=$(wc -l < /tmp/whence-links.tsv) +# TRES PASADAS, y el motivo es medido: WHENCE encadena enlaces —`a -> b` donde `b` es a su vez un +# enlace que se declara más abajo—. Con una sola pasada el destino todavía no existe cuando toca +# crear el primero, y quedaban 2078 de 2415 (86 %), que es justo lo que hizo saltar al guardián. hechos=0 -while IFS="$(printf '\t')" read -r dst src; do - [ -n "$dst" ] && [ -n "$src" ] || continue - dir=$(dirname "/out/lib/firmware/$dst") - [ -e "$dir/$src" ] || continue # sólo si el destino existe de verdad - mkdir -p "$dir" - ln -sf "$src" "/out/lib/firmware/$dst" - hechos=$((hechos+1)) -done < /tmp/whence-links.tsv -echo "linux-firmware: $hechos/$declarados enlaces de WHENCE creados" +for pasada in 1 2 3; do + antes=$hechos + while IFS="$(printf '\t')" read -r dst src; do + [ -n "$dst" ] && [ -n "$src" ] || continue + dst_abs="/out/lib/firmware/$dst" + [ -e "$dst_abs" ] && continue # ya hecho (o es un fichero de verdad) + dir=$(dirname "$dst_abs") + [ -e "$dir/$src" ] || continue # sólo si el destino existe de verdad + mkdir -p "$dir" + ln -sf "$src" "$dst_abs" + hechos=$((hechos+1)) + done < /tmp/whence-links.tsv + echo "linux-firmware: pasada $pasada — $hechos/$declarados enlaces" + [ "$hechos" -eq "$antes" ] && break +done [ "$hechos" -ge $((declarados * 9 / 10)) ] || { echo "linux-firmware: sólo $hechos de $declarados enlaces — el árbol no casa con su WHENCE" >&2; exit 1; } # ── Aserción de completitud, CONTRA WHENCE y no contra un número mágico ─────────────────────────