Cierra la decisión que quedó abierta anoche en `docs/plan-apps-usuario-final.md`: el corpus no tenía ningún cliente de audio salvo ALSA, y eso bloqueaba a toda app multimedia. GANA LA VARIANTE DE COSMIC y la promoción es GRATIS: era la única cuyo cierre ya resolvía entero contra el catálogo padre, así que `recipes/pipewire.toml` sella b3:e240653a — el mismo hash que tenía en la cola. Con ella suben `libsndfile` (las tres copias sellaban idéntico) y `dbus-shared` (gnome y cosmic, idénticas). Se jubilan 9 copias de cola. POR QUÉ ESTO NO REPITE EL EPISODIO DE LAS DOS GLIB — leído de los artefactos sellados, no razonado: **ningún pipewire de los tres enlaza glib.** Los NEEDED de las tres variantes son exactamente `libdbus-1.so.3`, `libpulse.so.0` y `libsndfile.so.1`; glib entraba sólo como Requires transitivo de pkg-config, en tiempo de build. ⇒ `libpipewire-0.3.so` es glib-free y se comparte entre las cuatro imágenes sin riesgo. ⚠ Y POR ESO `pulseaudio` NO SE PROMUEVE, aunque sea la dep de al lado. Ahí la objeción SÍ aplica y el número lo dice solo: `libpulse-mainloop-glib.so.0.0.6` mide **45.712 bytes** en la variante de GNOME (NEEDED `libglib-2.0.so.0`) y **2.455.600** en la del corpus, que se traga la glib ESTÁTICA del catálogo. Meter ésa en el proceso de gnome-shell —que ya carga la glib sombra dinámica— es literalmente el cuadro de colord. `incoming-kde/pulseaudio` e `incoming-gnome/pulseaudio` se quedan donde están: son variantes deliberadas, no duplicados. La copia del corpus existe sólo para que pipewire tenga contra qué enlazar `libpulse.so.0`, y ese enlace es por SONAME — en runtime lo sirve la libpulse de cada imagen, ABI-compatible (misma 0.24.3). Enlazar contra una variante y correr contra otra es legítimo cuando lo que cruza es un SONAME; lo que NO se puede es hidratar dos artefactos distintos en la misma ruta. Esa distinción es la que decide qué se promueve y qué no. mpv (b3:392e9690) pasa a `-Dpipewire=enabled`, con ALSA encendida detrás: prueba pipewire primero y cae a alsa si no hay demonio —KDE todavía no lista PipeWire entre sus raíces—. Evidencia: NEEDED … libasound.so.2 **libpipewire-0.3.so.0** libEGL.so.1 libc.so --ao=help → pipewire (PipeWire audio output), alsa, null Impacto medido antes de tocar, hasheando las 336 recetas de cola y comparando: 9 retiradas, **5 rebuilds** (wireplumber, xdg-desktop-portal ×2, kpipewire, spectacle) — los 5 sellados. Sin la salvedad de pulseaudio habrían sido 8, incluido gnome-shell. Perfiles: KDE 188/188, GNOME 132/132, sway 145/145. ⚠ COSMIC 105/106: `xdg-desktop-portal-cosmic` murió por OOM por TERCERA vez (7 G de RAM sin cgroups, con otro agente compilando Rust). Sigue siendo la máquina, no la receta.
69 lines
5.0 KiB
TOML
69 lines
5.0 KiB
TOML
# ══ AL CORPUS 2026-09-03 COMO DEP DE `pipewire`, y con una ADVERTENCIA ═════════════════════════
|
|
# Ésta es la variante de COSMIC, que resuelve `glib` al catálogo padre — donde la glib es ESTÁTICA.
|
|
# Consecuencia medida: su `libpulse-mainloop-glib.so.0.0.6` pesa 2.455.600 bytes y no declara
|
|
# `libglib-2.0.so.0` en NEEDED, porque se tragó la glib entera. La variante de GNOME pesa 45.712 y
|
|
# enlaza la glib compartida.
|
|
#
|
|
# ⚠ NO ES UN REEMPLAZO DE `incoming-kde/pulseaudio` NI DE `incoming-gnome/pulseaudio`, y esas dos NO
|
|
# se jubilan. Hidratar ésta en el rootfs de GNOME pondría una glib estática DENTRO de una `.so` que
|
|
# gnome-shell carga en el mismo proceso que la glib sombra dinámica: dos registros de GType, que es
|
|
# el episodio de colord. Las tres son variantes deliberadas; sólo comparten nombre.
|
|
#
|
|
# Existe acá para que `recipes/pipewire.toml` tenga contra qué enlazar `libpulse.so.0`. Ese enlace
|
|
# es por SONAME y en runtime lo sirve la libpulse de cada imagen (misma 0.24.3, ABI compatible).
|
|
# pulseaudio 17.0 — pero SÓLO las librerías cliente (libpulse, libpulse-simple,
|
|
# libpulse-mainloop-glib). No el demonio de sonido.
|
|
#
|
|
# POR QUÉ ENTRA: gnome-shell incluye el subproyecto `gvc` (el control de volumen del panel) de forma
|
|
# INCONDICIONAL — meson.build:256 lo llama sin `if`, y no hay opción para apagarlo — y gvc pide
|
|
# `libpulse` y `libpulse-mainloop-glib` duros (subprojects/gvc/meson.build:58). Es la última
|
|
# frontera de la cima y llega por el camino más indirecto de toda la campaña:
|
|
# gnome-shell → gvc → libpulse → libsndfile.
|
|
#
|
|
# ── SÓLO CLIENTE, Y POR QUÉ ESO ES LA DECISIÓN CORRECTA ─────────────────────────────────────────
|
|
# -Ddaemon=false -Dclient=true. Lo que gvc necesita es hablar el protocolo de PulseAudio, no
|
|
# IMPLEMENTARLO: el demonio de sonido de esta distro es una decisión aparte y todavía abierta
|
|
# (PulseAudio vs PipeWire), y construir el demonio acá la cerraría de prestado — además de arrastrar
|
|
# alsa-lib, orc, speex, soxr y webrtc-audio-processing. Con sólo el cliente, el shell muestra y
|
|
# mueve el volumen contra CUALQUIER servidor que hable el protocolo, incluido pipewire-pulse.
|
|
#
|
|
# -Dglib=enabled NO es opcional: `libpulse-mainloop-glib` es justamente la integración con el bucle
|
|
# de eventos de GLib, y es la segunda de las dos .pc que pide gvc.
|
|
#
|
|
# sndfile sigue haciendo falta pese a -Ddaemon=false: `dependency('sndfile')` está en el top-level
|
|
# del meson.build (:615) sin `required:` que la ablande. De ahí la receta libsndfile de esta cola,
|
|
# que con --disable-external-libs queda autocontenida (una receta, no cinco).
|
|
#
|
|
# -Ddatabase=simple: el default es 'tdb' y arrastraría tdb entero. 'simple' es el backend interno.
|
|
# Ni siquiera lo usa el cliente, pero el meson lo evalúa igual.
|
|
#
|
|
# --undefined-version: PulseAudio usa UN SOLO version-script (map-file) con la etiqueta PULSE_0 para
|
|
# las tres librerías cliente, así que al enlazar libpulse.so el script nombra símbolos que viven en
|
|
# libpulse-simple (pa_simple_new…) y en libpulse-mainloop-glib (pa_glib_mainloop_new…). GNU ld lo
|
|
# tolera con un warning; lld lo trata como ERROR. Mismo flag y mismo motivo que en libtiff-shared.
|
|
#
|
|
# El resto de los `disabled` son backends del demonio y su ecosistema (alsa, bluez5, jack, avahi,
|
|
# lirc, x11, orc, soxr, speex, fftw, openssl, systemd, udev, gtk, gsettings, webrtc-aec, tcpwrap,
|
|
# asyncns) — cada uno una receta que no hay que autorar. -Delogind=disabled sigue la misma línea que
|
|
# el resto de la onda: la C-ABI de logind se esquiva salvo en mutter.
|
|
name = "pulseaudio"
|
|
version = "17.0"
|
|
license = "LGPL-2.1-or-later"
|
|
|
|
[source]
|
|
tarball = "https://freedesktop.org/software/pulseaudio/releases/pulseaudio-17.0.tar.xz"
|
|
sha256 = "053794d6671a3e397d849e478a80b82a63cb9d8ca296bd35b73317bb5ceb87b5"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[build.phases]
|
|
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared -Ddaemon=false -Dclient=true -Dglib=enabled -Ddatabase=simple -Ddoxygen=false -Dman=false -Dtests=false -Dgcov=false -Dalsa=disabled -Dasyncns=disabled -Davahi=disabled -Dbluez5=disabled -Ddbus=disabled -Delogind=disabled -Dfftw=disabled -Dgsettings=disabled -Dgtk=disabled -Djack=disabled -Dlirc=disabled -Dopenssl=disabled -Dorc=disabled -Dsamplerate=disabled -Dsoxr=disabled -Dspeex=disabled -Dsystemd=disabled -Dtcpwrap=disabled -Dudev=disabled -Dwebrtc-aec=disabled -Dx11=disabled -Dc_args=-Wno-error=date-time -Dc_link_args=-Wl,--undefined-version"
|
|
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"
|
|
|
|
[deps]
|
|
build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "libsndfile", "libffi", "pcre2", "zlib-shared"]
|