From 5d3dc58653f27420fc71f2ef2781f5271436c11b Mon Sep 17 00:00:00 2001 From: kth5 Date: Wed, 8 Jan 2025 15:44:12 +0100 Subject: [PATCH] * update pulseaudio to 17.0+r43+g3e2bb8a1e-1 --- pulseaudio/.SRCINFO | 76 ++++++++++++--- pulseaudio/.nvchecker.toml | 4 + ...fault-from-recursion-due-to-too-many.patch | 63 +++++++++++++ pulseaudio/PKGBUILD | 94 ++++++++++++++----- 4 files changed, 199 insertions(+), 38 deletions(-) create mode 100644 pulseaudio/.nvchecker.toml create mode 100644 pulseaudio/0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch diff --git a/pulseaudio/.SRCINFO b/pulseaudio/.SRCINFO index d937dbf938..1049741756 100644 --- a/pulseaudio/.SRCINFO +++ b/pulseaudio/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = pulseaudio pkgdesc = A featureful, general-purpose sound server - pkgver = 17.0 - pkgrel = 3.1 + pkgver = 17.0+r43+g3e2bb8a1e + pkgrel = 1 url = https://www.freedesktop.org/wiki/Software/PulseAudio/ arch = x86_64 arch = powerpc64le @@ -12,50 +12,78 @@ pkgbase = pulseaudio makedepends = alsa-lib makedepends = attr makedepends = avahi + makedepends = bash makedepends = bluez makedepends = bluez-libs makedepends = check makedepends = dbus makedepends = doxygen makedepends = fftw + makedepends = gcc-libs makedepends = git + makedepends = glib2 + makedepends = glibc + makedepends = gst-plugins-base makedepends = gst-plugins-base-libs + makedepends = gst-plugins-good + makedepends = gstreamer makedepends = gtk3 makedepends = jack2 makedepends = libasyncns makedepends = libcap + makedepends = libice + makedepends = libltdl makedepends = libsm makedepends = libsndfile makedepends = libsoxr + makedepends = libx11 + makedepends = libxcb makedepends = libxtst makedepends = lirc makedepends = meson makedepends = openssl makedepends = orc + makedepends = python + makedepends = python-dbus + makedepends = python-pyqt5 makedepends = rtkit makedepends = sbc makedepends = speexdsp makedepends = systemd + makedepends = systemd-libs makedepends = tdb makedepends = valgrind makedepends = webrtc-audio-processing-1 makedepends = xmltoman - source = git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=1f020889c9aa44ea0f63d7222e8c2b62c3f45f68 - b2sums = SKIP + source = git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=3e2bb8a1ece02ae4e2c217273c9c0929cb9f5cae + source = 0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch + b2sums = 1eea3f798a56ea7d51ebc49de20160b8ef2eeae00e4a139786dab02b7a2f0fb459a744a8960d1a6573d7f5591f54a391d943096260edc6dfc5b0f04773b9b311 + b2sums = 73f93801069b2c5b09646870269c0f42cefc2183a73b47c78fd160c978a841c11c5146b98351a11be24d4785181f361a455534e6f6ca2d977cf585044836f8ed pkgname = pulseaudio install = pulseaudio.install + depends = libpulse=17.0+r43+g3e2bb8a1e-1 depends = alsa-lib + depends = bash + depends = dbus depends = fftw + depends = gcc-libs + depends = glib2 + depends = glibc depends = libcap + depends = libice depends = libltdl - depends = libpulse=17.0-3.1 depends = libsm + depends = libsndfile depends = libsoxr + depends = libx11 + depends = libxcb depends = libxtst depends = orc depends = rtkit depends = speexdsp + depends = systemd + depends = systemd-libs depends = tdb depends = webrtc-audio-processing-1 optdepends = pulseaudio-alsa: ALSA configuration (recommended) @@ -75,13 +103,14 @@ pkgname = pulseaudio pkgname = libpulse pkgdesc = A featureful, general-purpose sound server (client library) - license = LGPL + depends = bash depends = dbus + depends = glib2 + depends = glibc depends = libasyncns depends = libsndfile depends = libxcb - depends = systemd - optdepends = glib2: mainloop integration + depends = systemd-libs optdepends = pulse-native-provider: PulseAudio backend provides = libpulse-mainloop-glib.so provides = libpulse-simple.so @@ -90,38 +119,57 @@ pkgname = libpulse pkgname = pulseaudio-zeroconf pkgdesc = Zeroconf support for PulseAudio + depends = libpulse=17.0+r43+g3e2bb8a1e-1 + depends = pulseaudio=17.0+r43+g3e2bb8a1e-1 depends = avahi - depends = pulseaudio=17.0-3.1 + depends = dbus + depends = glibc pkgname = pulseaudio-lirc pkgdesc = IR (lirc) support for PulseAudio + depends = pulseaudio=17.0+r43+g3e2bb8a1e-1 + depends = glibc depends = lirc - depends = pulseaudio=17.0-3.1 pkgname = pulseaudio-jack pkgdesc = Jack support for PulseAudio + depends = pulseaudio=17.0+r43+g3e2bb8a1e-1 + depends = dbus + depends = glibc depends = jack - depends = pulseaudio=17.0-3.1 pkgname = pulseaudio-bluetooth pkgdesc = Bluetooth support for PulseAudio + depends = libpulse=17.0+r43+g3e2bb8a1e-1 + depends = pulseaudio=17.0+r43+g3e2bb8a1e-1 depends = bluez depends = bluez-libs + depends = dbus + depends = glib2 + depends = glibc depends = gst-plugins-base-libs - depends = pulseaudio=17.0-3.1 + depends = gstreamer depends = sbc optdepends = gst-plugins-bad: AptX and LDAC support pkgname = pulseaudio-equalizer pkgdesc = Graphical equalizer for PulseAudio - depends = pulseaudio=17.0-3.1 + depends = pulseaudio=17.0+r43+g3e2bb8a1e-1 + depends = dbus + depends = fftw + depends = glibc + depends = python depends = python-dbus depends = python-pyqt5 pkgname = pulseaudio-rtp pkgdesc = RTP and RAOP support for PulseAudio + depends = libpulse=17.0+r43+g3e2bb8a1e-1 + depends = pulseaudio=17.0+r43+g3e2bb8a1e-1 + depends = glib2 + depends = glibc depends = gst-plugins-base depends = gst-plugins-base-libs depends = gst-plugins-good + depends = gstreamer depends = openssl - depends = pulseaudio=17.0-3.1 diff --git a/pulseaudio/.nvchecker.toml b/pulseaudio/.nvchecker.toml new file mode 100644 index 0000000000..a00f27b46b --- /dev/null +++ b/pulseaudio/.nvchecker.toml @@ -0,0 +1,4 @@ +[pulseaudio] +source = "git" +git = "https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git" +prefix = "v" diff --git a/pulseaudio/0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch b/pulseaudio/0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch new file mode 100644 index 0000000000..ad7a38aced --- /dev/null +++ b/pulseaudio/0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch @@ -0,0 +1,63 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alper Nebi Yasak +Date: Wed, 4 Dec 2024 17:34:45 +0300 +Subject: [PATCH] alsa-ucm: Fix segfault from recursion due to too many devices + +While trying to figure out device subsets that have aren't internally +contain conflicting devices, we walk through all possible subsets and +check each set if it satisfies ConflictingDevices/SupportedDevices +listed in UCM configuration. For a better user experience, we want to +skip subsets that are fully included in another valid subset we will +also generate. + +The iterate_device_subsets() function that achieves the former is +intentionally in iterative form to avoid a stack overflow, since it will +walk through 2^n sets. However, the iterate_maximal_device_subsets() +function that skips incomplete sets is in recursive form, as I had +assumed tail-call optimization would take care of the potential problem. + +Convert iterate_maximal_device_subsets() to an iterative form, because +the recursion seems to trigger a segfault with more than 16 devices. + +Signed-off-by: Alper Nebi Yasak +--- + src/modules/alsa/alsa-ucm.c | 22 ++++++++++------------ + 1 file changed, 10 insertions(+), 12 deletions(-) + +diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c +index 018c01739ba0..34a9d30ade48 100644 +--- a/src/modules/alsa/alsa-ucm.c ++++ b/src/modules/alsa/alsa-ucm.c +@@ -1404,22 +1404,20 @@ static pa_idxset *iterate_device_subsets(pa_idxset *devices, void **state) { + static pa_idxset *iterate_maximal_device_subsets(pa_idxset *devices, void **state) { + uint32_t idx; + pa_alsa_ucm_device *dev; +- pa_idxset *subset; ++ pa_idxset *subset = NULL; + + pa_assert(devices); + pa_assert(state); + +- subset = iterate_device_subsets(devices, state); +- if (!subset) +- return subset; +- +- /* Skip this group if it's incomplete, by checking if we can add any +- * other device. If we can, this iteration is a subset of another +- * group that we already returned or eventually return. */ +- PA_IDXSET_FOREACH(dev, devices, idx) { +- if (!pa_idxset_contains(subset, dev) && devset_supports_device(subset, dev)) { +- pa_idxset_free(subset, NULL); +- return iterate_maximal_device_subsets(devices, state); ++ while (subset == NULL && (subset = iterate_device_subsets(devices, state))) { ++ /* Skip this group if it's incomplete, by checking if we can add any ++ * other device. If we can, this iteration is a subset of another ++ * group that we already returned or eventually return. */ ++ PA_IDXSET_FOREACH(dev, devices, idx) { ++ if (subset && !pa_idxset_contains(subset, dev) && devset_supports_device(subset, dev)) { ++ pa_idxset_free(subset, NULL); ++ subset = NULL; ++ } + } + } + diff --git a/pulseaudio/PKGBUILD b/pulseaudio/PKGBUILD index 813f78b1a2..4d1e0f19b0 100644 --- a/pulseaudio/PKGBUILD +++ b/pulseaudio/PKGBUILD @@ -12,8 +12,8 @@ pkgname=( pulseaudio-equalizer pulseaudio-rtp ) -pkgver=17.0 -pkgrel=3.1 +pkgver=17.0+r43+g3e2bb8a1e +pkgrel=1 pkgdesc="A featureful, general-purpose sound server" url="https://www.freedesktop.org/wiki/Software/PulseAudio/" arch=(x86_64 powerpc64le powerpc64 powerpc riscv64) @@ -22,38 +22,57 @@ makedepends=( alsa-lib attr avahi + bash bluez bluez-libs check dbus doxygen fftw + gcc-libs git + glib2 + glibc + gst-plugins-base gst-plugins-base-libs + gst-plugins-good + gstreamer gtk3 jack2 libasyncns libcap + libice + libltdl libsm libsndfile libsoxr + libx11 + libxcb libxtst lirc meson openssl orc + python + python-dbus + python-pyqt5 rtkit sbc speexdsp systemd + systemd-libs tdb valgrind webrtc-audio-processing-1 xmltoman ) -_commit=1f020889c9aa44ea0f63d7222e8c2b62c3f45f68 # tags/v17.0^0 -source=("git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=$_commit") -b2sums=('SKIP') +_commit=3e2bb8a1ece02ae4e2c217273c9c0929cb9f5cae # master +source=( + "git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=$_commit" + 0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch +) +b2sums=('1eea3f798a56ea7d51ebc49de20160b8ef2eeae00e4a139786dab02b7a2f0fb459a744a8960d1a6573d7f5591f54a391d943096260edc6dfc5b0f04773b9b311' + '73f93801069b2c5b09646870269c0f42cefc2183a73b47c78fd160c978a841c11c5146b98351a11be24d4785181f361a455534e6f6ca2d977cf585044836f8ed') pkgver() { cd pulseaudio @@ -66,10 +85,8 @@ prepare() { # Freeze version before patching ./git-version-gen doesnt-exist >.tarball-version - # Fix crashes with some UCM devices - # https://gitlab.archlinux.org/archlinux/packaging/packages/pulseaudio/-/issues/4 - git cherry-pick -n f5cacd94abcc47003bd88ad7ca1450de649ffb15 - git cherry-pick -n ed3d4f0837f670e5e5afb1afa5bcfc8ff05d3407 + # https://gitlab.archlinux.org/archlinux/packaging/packages/pulseaudio/-/issues/7 + git apply -3 ../0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch } build() { @@ -103,17 +120,28 @@ _pick() { package_pulseaudio() { depends=( - alsa-lib - fftw - libcap - libltdl "libpulse=$pkgver-$pkgrel" + alsa-lib + bash + dbus + fftw + gcc-libs + glib2 + glibc + libcap + libice + libltdl libsm + libsndfile libsoxr + libx11 + libxcb libxtst orc rtkit speexdsp + systemd + systemd-libs tdb webrtc-audio-processing-1 ) @@ -200,22 +228,21 @@ package_pulseaudio() { package_libpulse() { pkgdesc="$pkgdesc (client library)" depends=( + bash dbus + glib2 + glibc libasyncns libsndfile libxcb - systemd - ) - optdepends=( - 'glib2: mainloop integration' - 'pulse-native-provider: PulseAudio backend' + systemd-libs ) + optdepends=('pulse-native-provider: PulseAudio backend') provides=( libpulse-mainloop-glib.so libpulse-simple.so libpulse.so ) - license=(LGPL) backup=(etc/pulse/client.conf) mv libpulse/* "$pkgdir" @@ -224,8 +251,11 @@ package_libpulse() { package_pulseaudio-zeroconf() { pkgdesc="Zeroconf support for PulseAudio" depends=( - avahi + "libpulse=$pkgver-$pkgrel" "pulseaudio=$pkgver-$pkgrel" + avahi + dbus + glibc ) mv zeroconf/* "$pkgdir" @@ -234,8 +264,9 @@ package_pulseaudio-zeroconf() { package_pulseaudio-lirc() { pkgdesc="IR (lirc) support for PulseAudio" depends=( - lirc "pulseaudio=$pkgver-$pkgrel" + glibc + lirc ) mv lirc/* "$pkgdir" @@ -244,8 +275,10 @@ package_pulseaudio-lirc() { package_pulseaudio-jack() { pkgdesc="Jack support for PulseAudio" depends=( - jack "pulseaudio=$pkgver-$pkgrel" + dbus + glibc + jack ) mv jack/* "$pkgdir" @@ -254,10 +287,15 @@ package_pulseaudio-jack() { package_pulseaudio-bluetooth() { pkgdesc="Bluetooth support for PulseAudio" depends=( + "libpulse=$pkgver-$pkgrel" + "pulseaudio=$pkgver-$pkgrel" bluez bluez-libs + dbus + glib2 + glibc gst-plugins-base-libs - "pulseaudio=$pkgver-$pkgrel" + gstreamer sbc ) optdepends=('gst-plugins-bad: AptX and LDAC support') @@ -269,6 +307,10 @@ package_pulseaudio-equalizer() { pkgdesc="Graphical equalizer for PulseAudio" depends=( "pulseaudio=$pkgver-$pkgrel" + dbus + fftw + glibc + python python-dbus python-pyqt5 ) @@ -279,11 +321,15 @@ package_pulseaudio-equalizer() { package_pulseaudio-rtp() { pkgdesc="RTP and RAOP support for PulseAudio" depends=( + "libpulse=$pkgver-$pkgrel" + "pulseaudio=$pkgver-$pkgrel" + glib2 + glibc gst-plugins-base gst-plugins-base-libs gst-plugins-good + gstreamer openssl - "pulseaudio=$pkgver-$pkgrel" ) mv rtp/* "$pkgdir"