wireplumber: el -I$PWD/lib/wp NO hacía falta — era la carrera del ADR 0012
La receta llevaba una bandera de include que su propio comentario marcaba EN DUDA: se había puesto porque el build cortaba con `../lib/wp/wp.h:13: fatal error: 'client.h' file not found`, un header que SÍ existe justo al lado del que lo incluye. La explicación real era que **otro agente construía en el mismo repo y borraba árboles de work/sources/ en pleno build** — la carrera del ADR 0012, que produce exactamente esa firma: ficheros que existen cuando los mirás después y no existían al compilar. Re-probado CON EL REPO QUIETO —comprobando primero que no hubiera ningún `hammer build` vivo— y sella igual sin la bandera. Confirmado, no supuesto. Verificado además de punta a punta: audio sigue dando `48. HDA Intel [alsa]` con sink y source reales, 0 page-flips fallidos. La lección queda en la receta: antes de agregar una bandera que no se explica, mirar si hay otro build vivo. Es barato y evita inventar arreglos para síntomas que no son del código. **GOTCHA DEL LAB, aprendido a la mala en el mismo movimiento: los BYTES del fichero .patch entran al ArtifactHash.** Corregir la PROSA obsoleta de `pipewire-sound-initialized.patch` —decía que la decisión libudev-zero-vs-eudev seguía pendiente cuando ya está resuelta— re-hasheó pipewire y arrastró wireplumber. La distinción que conviene tener presente: **comentar una RECETA es gratis** (hash_inputs toma source/compiler/target/link/flags/fases/ deps, no los comentarios del TOML) **y comentar un PARCHE cuesta un rebuild**. Anotado en pipewire.toml, que es donde se va a leer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,10 @@ o sea que **sólo acepta el device CARD** (`/sys/.../sound/card0`), no `controlC
|
||||
`/sys/class/*` entero, con nodo o sin él.
|
||||
|
||||
⇒ **El device que SPA necesita nunca entra en la enumeración.** No hay guarda que sacar: falta la
|
||||
mitad del espacio de búsqueda. Las salidas son (a) enseñarle a libudev-zero a recorrer `/sys/class`
|
||||
—`yupana radio libudev-zero` = 51 sellados a deuda— o (b) empaquetar eudev. Es una decisión de
|
||||
arquitectura, no un parche, y queda para quien la tome.
|
||||
mitad del espacio de búsqueda.
|
||||
|
||||
**YA RESUELTO (2026-07-30)**, y por el camino (a): `recipes/libudev-zero-scan-class.patch` enseña a
|
||||
libudev-zero a enumerar devices de CLASE para una lista acotada de subsistemas (hoy `sound`). Se
|
||||
descartó eudev porque sin udevd es PEOR —rompió el input en otro frente— y correr udevd contradice la
|
||||
arquitectura. El audio funciona: `48. HDA Intel [alsa]` con sink y source reales. Los detalles, y por
|
||||
qué la lista es acotada (recorrer `/sys/class` entero rompía el VÍDEO), están en ese parche.
|
||||
|
||||
@@ -15,6 +15,14 @@
|
||||
# parche: dice por qué se toca pipewire (radio 2) y no libudev-zero (radio 51), y por qué quitar ese
|
||||
# guarda es legítimo (protege de una carrera contra udevd que sin udevd no existe).
|
||||
#
|
||||
# ⚠ GOTCHA DEL LAB, aprendido a la mala el 2026-07-30: **los BYTES del fichero `.patch` entran al
|
||||
# ArtifactHash** (`Recipe::hash_inputs` lee el patch entero, no sólo su diff), así que **editar la PROSA
|
||||
# de un parche re-sella el artefacto y todo lo que dependa de él**. Corregir un comentario obsoleto en
|
||||
# `pipewire-sound-initialized.patch` re-hasheó pipewire y arrastró wireplumber.
|
||||
# La distinción que conviene tener presente: **comentar una RECETA es gratis** —`hash_inputs` sólo toma
|
||||
# source/compiler/target/link/flags/fases/deps, no los comentarios del TOML— **y comentar un PARCHE
|
||||
# cuesta un rebuild**. Si hay que corregir el relato de un parche, hacerlo cuando se pueda pagar.
|
||||
#
|
||||
# ⚠ SIN GESTOR DE SESIÓN todavía (`-Dsession-managers=[]`). PipeWire arranca y acepta clientes —lo que
|
||||
# quita el `Gvc-WARNING: Failed to connect context: Connection refused` del shell— pero sin
|
||||
# wireplumber no enumera ni enruta dispositivos: no hay política de qué entra y qué sale. Para una VM
|
||||
|
||||
@@ -21,15 +21,18 @@
|
||||
# saber si la sesión está activa antes de tomar los dispositivos de audio, que es exactamente el
|
||||
# problema que resuelve nuestro shim.
|
||||
#
|
||||
# ⚠ EL `-I$PWD/lib/wp` DE `c_args` ESTÁ EN DUDA, y conviene decirlo antes de que alguien lo copie.
|
||||
# Se agregó porque el build cortaba con `../lib/wp/wp.h:13: fatal error: 'client.h' file not found`,
|
||||
# un header que SÍ existe justo al lado del que lo incluye — o sea que el `#include "..."` relativo
|
||||
# al fichero incluyente debería haberlo encontrado. Al rato apareció la explicación de verdad: **otro
|
||||
# agente estaba construyendo en el mismo repo y había borrado árboles de `work/sources/` en pleno
|
||||
# build**, que es la carrera del ADR 0012 (el árbol de fuentes es caché Y workspace a la vez) y
|
||||
# produce exactamente esa firma: ficheros que existen al mirarlos después y no existían al compilar.
|
||||
# La receta sella con la bandera puesta; **falta re-probar SIN ella con el repo quieto** para saber si
|
||||
# hacía falta o si sólo tapó el síntoma de la carrera.
|
||||
# ✅ RESUELTO (2026-07-30): el `-I$PWD/lib/wp` de `c_args` NO HACÍA FALTA y ya no está.
|
||||
#
|
||||
# Se había agregado porque el build cortaba con `../lib/wp/wp.h:13: fatal error: 'client.h' file not
|
||||
# found` — un header que SÍ existe justo al lado del que lo incluye, o sea que el `#include "..."`
|
||||
# relativo debía haberlo encontrado. La explicación real era la CARRERA DEL ADR 0012: otro agente
|
||||
# construía en el mismo repo y borraba árboles de `work/sources/` en pleno build. Esa carrera produce
|
||||
# exactamente esa firma —ficheros que existen cuando los mirás después y no existían al compilar—, y es
|
||||
# de las que hacen inventar arreglos para síntomas que no son del código.
|
||||
#
|
||||
# **Re-probado con el repo QUIETO y sella igual sin la bandera.** Confirmado, no supuesto: se comprobó
|
||||
# primero que no hubiera ningún `hammer build` corriendo, después se quitó el flag y el build pasó
|
||||
# entero. La lección: antes de agregar una bandera que no se explica, mirar si hay otro build vivo.
|
||||
#
|
||||
# Por lo mismo se QUITÓ de esta receta un `rm -rf output` que había puesto antes en el configure: con
|
||||
# el árbol compartido, borrar el directorio de build es sabotear a quien esté compilando en paralelo.
|
||||
@@ -61,7 +64,7 @@ PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages
|
||||
-Dsystemd-system-service=false -Dsystemd-user-service=false \
|
||||
-Dintrospection=disabled -Ddoc=disabled \
|
||||
-Dtests=false -Ddbus-tests=false \
|
||||
"-Dc_args=-Wno-error=date-time -I$PWD/lib/wp"
|
||||
-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"
|
||||
|
||||
Reference in New Issue
Block a user