* update pulseaudio to 17.0+r43+g3e2bb8a1e-1

This commit is contained in:
Alexander Baldeck 2025-01-08 15:44:12 +01:00
parent c867e764aa
commit 5d3dc58653
4 changed files with 199 additions and 38 deletions

View File

@ -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

View File

@ -0,0 +1,4 @@
[pulseaudio]
source = "git"
git = "https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git"
prefix = "v"

View File

@ -0,0 +1,63 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
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 <alpernebiyasak@gmail.com>
---
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;
+ }
}
}

View File

@ -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"