sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
⎇ 51c6830f584d28e2a35f5ea56df7b303a51d1e0e
recipes/incoming-gnome/wireplumber.toml
Ñawpa willay
ch'uya
audio: wireplumber (b3:39a9a06c) + lua (b3:e6c35f98) — y el Devices vacío es del KERNEL
1# wireplumber 0.5.15 — EL GESTOR DE SESIÓN de PipeWire. La pieza que faltaba para que el audio sea
2# audio y no sólo un socket que acepta conexiones.
3#
4# QUÉ APORTA, y por qué no alcanzaba con pipewire: `pipewire` se construyó con
5# `-Dsession-managers=[]`, así que arranca, acepta clientes y gnome-shell conecta —el
6# `Gvc-WARNING: Failed to connect context` desapareció— pero **no enumera ni enruta dispositivos**: no
7# hay política de qué es entrada, qué es salida, qué se enlaza con qué. El sink que veía el shell era
8# `auto_null` («Dummy Output»). Eso es el nodo de descarte, no una tarjeta.
9#
10# wireplumber es esa política, y está escrita EN LUA: embebe un intérprete (`lib/wplua`) y sus reglas
11# viven en `src/scripts/*.lua`. De ahí que la dep interesante de esta receta no sea PipeWire sino
12# **`lua`**, que hubo que autorar (el Makefile de Lua no produce `.so` ni `.pc`; ver esa receta).
13#
14# `-Dsystem-lua=true` es obligatorio acá: por defecto wireplumber usa su `subprojects/lua.wrap`, que
15# **DESCARGA Lua 5.5 de lua.org**, y el sandbox va con `--wrap-mode=nodownload`. Con la perilla
16# prendida busca por pkg-config `lua-5.5`/`lua5.5`/`lua55`, después las 5.4 y después las 5.3
17# (meson.build:91-95): nuestra `lua5.4.pc` entra por la segunda tanda.
18#
19# `-Delogind=enabled` — cuarta vez que la C-ABI de logind aparece en esta campaña, y la primera en que
20# está desde el principio: `libelogind` (arje-sdlogin-compat) ya está sellada. wireplumber la usa para
21# saber si la sesión está activa antes de tomar los dispositivos de audio, que es exactamente el
22# problema que resuelve nuestro shim.
23#
24# ⚠ EL `-I$PWD/lib/wp` DE `c_args` ESTÁ EN DUDA, y conviene decirlo antes de que alguien lo copie.
25# Se agregó porque el build cortaba con `../lib/wp/wp.h:13: fatal error: 'client.h' file not found`,
26# un header que SÍ existe justo al lado del que lo incluye — o sea que el `#include "..."` relativo
27# al fichero incluyente debería haberlo encontrado. Al rato apareció la explicación de verdad: **otro
28# agente estaba construyendo en el mismo repo y había borrado árboles de `work/sources/` en pleno
29# build**, que es la carrera del ADR 0012 (el árbol de fuentes es caché Y workspace a la vez) y
30# produce exactamente esa firma: ficheros que existen al mirarlos después y no existían al compilar.
31# La receta sella con la bandera puesta; **falta re-probar SIN ella con el repo quieto** para saber si
32# hacía falta o si sólo tapó el síntoma de la carrera.
33#
34# Por lo mismo se QUITÓ de esta receta un `rm -rf output` que había puesto antes en el configure: con
35# el árbol compartido, borrar el directorio de build es sabotear a quien esté compilando en paralelo.
36#
37# Apagados: `-Dsystemd=disabled` y sus units (acá PID1 es arje-zero, y el arranque lo hace
38# `gnome-start`); `-Ddoc=disabled` (falta sphinx/doxygen); `-Dtests=false -Ddbus-tests=false`;
39# `-Dintrospection=disabled` porque nadie carga `Wp-0.5` por typelib — el shell habla con PipeWire por
40# el protocolo de PulseAudio, no con wireplumber por GObject.
41name = "wireplumber"
42version = "0.5.15"
43
44[source]
45tarball = "https://gitlab.freedesktop.org/pipewire/wireplumber/-/archive/0.5.15/wireplumber-0.5.15.tar.gz"
46sha256 = "baa121bc918df5fa0e0e70755bb1c99ffab0ab107225ecf99aa470e2c6ba5e7b"
47
48[build]
49compiler = "zig-cc"
50target = "x86_64-linux-musl"
51link = "dynamic"
52
53[build.phases]
54configure = '''
55set -e
56PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output \
57 --prefix=/usr --buildtype=release --wrap-mode=nodownload \
58 -Ddefault_library=shared \
59 -Dsystem-lua=true -Dsystem-lua-version=auto \
60 -Delogind=enabled -Dsystemd=disabled \
61 -Dsystemd-system-service=false -Dsystemd-user-service=false \
62 -Dintrospection=disabled -Ddoc=disabled \
63 -Dtests=false -Ddbus-tests=false \
64 "-Dc_args=-Wno-error=date-time -I$PWD/lib/wp"
65'''
66compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
67install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
68
69[deps]
70build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "lua", "pipewire",
71 "glib", "dbus-shared", "libelogind", "alsa-lib", "libsndfile", "pulseaudio",
72 "expat", "pcre2", "libffi", "libudev-zero", "zlib-shared"]