From 3e0194609a7509cfe48e3a250668b63f32133e8a Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 14 Jul 2026 12:12:01 -0400 Subject: [PATCH] =?UTF-8?q?kde/Plasma:=20plasma-pa=20SELLA=20=E2=80=94=20e?= =?UTF-8?q?l=20APPLET=20DE=20VOLUMEN,=20frente=20de=20AUDIO=20cerrado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- recipes/incoming-kde/plasma-pa.toml | 61 +++++++++++++++++++++++++ recipes/incoming-kde/pulseaudio-qt.toml | 45 ++++++++++++++++++ recipes/incoming-kde/pulseaudio.toml | 50 ++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 recipes/incoming-kde/plasma-pa.toml create mode 100644 recipes/incoming-kde/pulseaudio-qt.toml create mode 100644 recipes/incoming-kde/pulseaudio.toml 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"]