kde/Plasma: plasma-pa SELLA — el APPLET DE VOLUMEN, frente de AUDIO cerrado
plasma-pa 6.7.2 (51d7a25b): applet QML org.kde.plasma.volume + kcm_pulseaudio + audioshortcutsservice.
Cierra el frente de audio: hasta ahora el lab sólo tenía libcanberra con backend NULL (sin reproducción).
Cadena completa nueva:
alsa-lib/speexdsp/libsndfile → pulseaudio (cliente) → pulseaudio-qt → plasma-pa
pulseaudio 17.0 (108cac6e) → libpulse.so.0 + libpulse-mainloop-glib.so.0 + libpulse-simple.so.0 (+ .pc).
- **-Ddaemon=false -Dclient=true**: se construye SÓLO la biblioteca cliente. Es lo correcto acá — el
servidor de audio previsto es PipeWire (habla el protocolo PulseAudio) pero los clientes igual
linkean el libpulse de PulseAudio. Evita todo el árbol de módulos del daemon (alsa/bluez/jack/
avahi/orc/fftw/webrtc-aec).
- -Dglib=enabled es OBLIGATORIO (sin él no hay libpulse-mainloop-glib, que plasma-pa exige);
lo habilita glib-shared.
- **GOTCHA lld durable**: PulseAudio comparte UN map-file (version script) entre libpulse,
libpulse-simple y libpulse-mainloop-glib ⇒ al enlazar cada una, el script asigna PULSE_0 a símbolos
que viven en las OTRAS: 'version script assignment of PULSE_0 to symbol pa_glib_mainloop_new failed:
symbol not defined'. GNU ld sólo avisa; ld.lld (el de zig) lo trata como ERROR desde lld 17. Fix:
-Dc_link_args=-Wl,--undefined-version.
pulseaudio-qt 1.8.1 (c6849b9e) → libKF6PulseAudioQt.so.5, selló a la primera. OJO: NO está en el path de
plasma/ sino en download.kde.org/stable/pulseaudio-qt/, y la versión viva es 1.8.x (1.6.0 del
find_package es sólo el mínimo).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Semantic delta
No definition changed: this change is text, documentation or data.
3 files · +156 −0
diff --git a/recipes/incoming-kde/plasma-pa.toml b/recipes/incoming-kde/plasma-pa.toml
new file mode 100644
index 00000000..00a639f3
--- /dev/null
+++ b/recipes/incoming-kde/plasma-pa.toml
@@ -0,0 +1,61 @@
+# plasma-pa 6.7.2 — el APPLET DE VOLUMEN de Plasma (org.kde.plasma.volume + kcm_pulseaudio).
+# Campaña KDE (ADR 0011). Cierra el frente de AUDIO, que el lab no tenía (libcanberra estaba sellado con
+# backend NULL, sin reproducción). Cadena nueva completa:
+# alsa-lib/speexdsp/libsndfile → pulseaudio (cliente) → pulseaudio-qt → plasma-pa
+#
+# Canberra REQUIRED (libcanberra ya sellado). CanberraPulse/SoundThemeFreedesktop son opcionales.
+# Kirigami/KirigamiAddons son RUNTIME. gio-2.0 REQUIRED → glib-shared.
+name = "plasma-pa"
+version = "6.7.2"
+
+[source]
+tarball = "https://download.kde.org/stable/plasma/6.7.2/plasma-pa-6.7.2.tar.xz"
+sha256 = "e58d83ed8f14919ac782336c335704e244f2128c63fd7508401e2cb99c8d6b43"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+flags = []
+
+[build.phases]
+configure = '''
+rm -rf po doc
+sed -i '/add_subdirectory(doc)/d' CMakeLists.txt
+sed -i '/kdoctools_install/d' CMakeLists.txt
+# DocTools marcado TYPE REQUIRED en set_package_properties → feature_summary aborta. A OPTIONAL.
+sed -i '/set_package_properties(KF6DocTools/,/)/ s/TYPE REQUIRED/TYPE OPTIONAL/' CMakeLists.txt
+ZW="$PWD/.zwrap"; mkdir -p "$ZW"
+cat > "$ZW/cc" <<'W'
+#!/bin/sh
+a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done
+exec /opt/zig/zig cc -mcpu=baseline $a
+W
+cat > "$ZW/cxx" <<'W'
+#!/bin/sh
+a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done
+exec /opt/zig/zig c++ -mcpu=baseline $a
+W
+chmod +x "$ZW/cc" "$ZW/cxx"
+cmake -B build -G Ninja -Wno-dev \
+ -DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" -DCMAKE_ASM_COMPILER="$ZW/cc" \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \
+ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF -DBUILD_TESTING=OFF
+'''
+compile = "cmake --build build"
+install = "DESTDIR=/out cmake --install build"
+
+[deps]
+build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "qtsvg", "dbus", "extra-cmake-modules",
+ "qttools", "gettext-tiny", "mesa", "libdrm", "libxkbcommon", "wayland", "qtdeclarative",
+ "pulseaudio", "pulseaudio-qt", "libcanberra", "libtool", "libogg", "libvorbis", "libsndfile",
+ "glib-shared", "pcre2-shared", "libffi",
+ "libplasma", "ksvg", "kcmutils", "kdeclarative", "kirigami", "kirigami-addons", "kpackage",
+ "plasma-activities", "kstatusnotifieritem",
+ "kconfig", "kcoreaddons", "kglobalaccel", "ki18n", "kdbusaddons",
+ "kcolorscheme", "kcompletion", "kjobwidgets", "kservice", "kconfigwidgets", "kguiaddons",
+ "kitemviews", "kcodecs", "kcrash", "karchive", "kbookmarks", "sonnet", "attica", "kauth",
+ "icu4c", "kiconthemes", "kio", "kwindowsystem", "solid", "kwidgetsaddons", "kxmlgui",
+ "zlib-shared", "libX11", "xorgproto", "libXau", "libXdmcp", "libXext", "libXrender", "libXfixes",
+ "libXi", "libxcb", "xcb-util", "xcb-util-keysyms", "xcb-util-wm", "xcb-util-image",
+ "xcb-util-renderutil"]
diff --git a/recipes/incoming-kde/pulseaudio-qt.toml b/recipes/incoming-kde/pulseaudio-qt.toml
new file mode 100644
index 00000000..28a248ff
--- /dev/null
+++ b/recipes/incoming-kde/pulseaudio-qt.toml
@@ -0,0 +1,45 @@
+# pulseaudio-qt 1.8.1 — bindings Qt6 de PulseAudio (libKF6PulseAudioQt.so). Campaña KDE (ADR 0011):
+# plasma-pa lo exige (find_package(KF6PulseAudioQt 1.6.0 REQUIRED)).
+#
+# pkg_check_modules(LIBPULSE libpulse REQUIRED) + libpulse-mainloop-glib ⇒ deps: pulseaudio (cliente) +
+# glib-shared. Qt6 REQUIRED: Core Gui DBus; Qml/Quick opcionales (los damos: qtdeclarative).
+name = "pulseaudio-qt"
+version = "1.8.1"
+
+[source]
+tarball = "https://download.kde.org/stable/pulseaudio-qt/pulseaudio-qt-1.8.1.tar.xz"
+sha256 = "79619c55b94808aa7d307fb234ad39a1096d088f21f806be0e788be79a76b3c9"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+flags = []
+
+[build.phases]
+configure = '''
+rm -rf po
+ZW="$PWD/.zwrap"; mkdir -p "$ZW"
+cat > "$ZW/cc" <<'W'
+#!/bin/sh
+a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done
+exec /opt/zig/zig cc -mcpu=baseline $a
+W
+cat > "$ZW/cxx" <<'W'
+#!/bin/sh
+a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done
+exec /opt/zig/zig c++ -mcpu=baseline $a
+W
+chmod +x "$ZW/cc" "$ZW/cxx"
+cmake -B build -G Ninja -Wno-dev \
+ -DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" -DCMAKE_ASM_COMPILER="$ZW/cc" \
+ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \
+ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF -DBUILD_TESTING=OFF
+'''
+compile = "cmake --build build"
+install = "DESTDIR=/out cmake --install build"
+
+[deps]
+build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "extra-cmake-modules", "qttools",
+ "gettext-tiny", "mesa", "libdrm", "libxkbcommon", "wayland", "qtdeclarative",
+ "pulseaudio", "glib-shared", "pcre2-shared", "libffi", "libsndfile", "zlib-shared"]
diff --git a/recipes/incoming-kde/pulseaudio.toml b/recipes/incoming-kde/pulseaudio.toml
new file mode 100644
index 00000000..dbd93797
--- /dev/null
+++ b/recipes/incoming-kde/pulseaudio.toml
@@ -0,0 +1,50 @@
+# pulseaudio 17.0 — CLIENTE de audio (libpulse.so + libpulse-mainloop-glib.so + libpulse-simple.so).
+# Campaña KDE (ADR 0011): pulseaudio-qt → plasma-pa (el applet de volumen) exige
+# `pkg_check_modules(LIBPULSE libpulse REQUIRED)` + `libpulse-mainloop-glib`.
+#
+# **-Ddaemon=false -Dclient=true**: se construye SÓLO la biblioteca cliente, no el servidor. Es lo correcto
+# para este escritorio: el servidor de audio previsto es PipeWire (que habla el protocolo PulseAudio); los
+# clientes igual linkean el libpulse de PulseAudio. Además evita todo el árbol de módulos del daemon
+# (alsa/bluez/jack/avahi/orc/fftw/webrtc-aec...).
+#
+# glib=enabled es OBLIGATORIO: sin él no hay libpulse-mainloop-glib, que plasma-pa exige. Lo habilita la
+# variante glib-shared (deuda Capa 0 saldada). dbus=enabled para el protocolo.
+name = "pulseaudio"
+version = "17.0"
+
+[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"
+flags = []
+
+[build.phases]
+configure = '''
+# -Wl,--undefined-version: PulseAudio comparte UN map-file (version script) entre libpulse,
+# libpulse-simple y libpulse-mainloop-glib, así que al enlazar cada una el script asigna la versión
+# PULSE_0 a símbolos que viven en las OTRAS ("version script assignment of 'PULSE_0' to symbol
+# 'pa_glib_mainloop_new' failed: symbol not defined"). GNU ld sólo avisa; ld.lld (el de zig) lo trata como
+# ERROR desde lld 17. El flag restaura el comportamiento permisivo.
+PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release \
+ -Dc_link_args=-Wl,--undefined-version \
+ -Ddefault_library=shared \
+ -Ddaemon=false -Dclient=true \
+ -Dglib=enabled -Ddbus=enabled \
+ -Dtests=false -Ddoxygen=false -Dman=false -Dgcov=false \
+ -Dx11=disabled -Dalsa=disabled -Davahi=disabled -Dbluez5=disabled -Djack=disabled \
+ -Dlirc=disabled -Dorc=disabled -Dsoxr=disabled -Dsamplerate=disabled -Dspeex=disabled \
+ -Dgstreamer=disabled -Dgtk=disabled -Dgsettings=disabled -Dsystemd=disabled -Delogind=disabled \
+ -Dconsolekit=disabled -Dudev=disabled -Dopenssl=disabled -Dfftw=disabled -Dvalgrind=disabled \
+ -Doss-output=disabled -Dtcpwrap=disabled -Dwebrtc-aec=disabled -Dasyncns=disabled -Dhal-compat=false \
+ -Ddatabase=simple
+'''
+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", "glib-shared", "pcre2-shared", "libffi",
+ "dbus", "expat", "zlib-shared", "gettext-tiny", "libsndfile", "libtool", "util-linux"]