* 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 pkgbase = pulseaudio
pkgdesc = A featureful, general-purpose sound server pkgdesc = A featureful, general-purpose sound server
pkgver = 17.0 pkgver = 17.0+r43+g3e2bb8a1e
pkgrel = 3.1 pkgrel = 1
url = https://www.freedesktop.org/wiki/Software/PulseAudio/ url = https://www.freedesktop.org/wiki/Software/PulseAudio/
arch = x86_64 arch = x86_64
arch = powerpc64le arch = powerpc64le
@ -12,50 +12,78 @@ pkgbase = pulseaudio
makedepends = alsa-lib makedepends = alsa-lib
makedepends = attr makedepends = attr
makedepends = avahi makedepends = avahi
makedepends = bash
makedepends = bluez makedepends = bluez
makedepends = bluez-libs makedepends = bluez-libs
makedepends = check makedepends = check
makedepends = dbus makedepends = dbus
makedepends = doxygen makedepends = doxygen
makedepends = fftw makedepends = fftw
makedepends = gcc-libs
makedepends = git makedepends = git
makedepends = glib2
makedepends = glibc
makedepends = gst-plugins-base
makedepends = gst-plugins-base-libs makedepends = gst-plugins-base-libs
makedepends = gst-plugins-good
makedepends = gstreamer
makedepends = gtk3 makedepends = gtk3
makedepends = jack2 makedepends = jack2
makedepends = libasyncns makedepends = libasyncns
makedepends = libcap makedepends = libcap
makedepends = libice
makedepends = libltdl
makedepends = libsm makedepends = libsm
makedepends = libsndfile makedepends = libsndfile
makedepends = libsoxr makedepends = libsoxr
makedepends = libx11
makedepends = libxcb
makedepends = libxtst makedepends = libxtst
makedepends = lirc makedepends = lirc
makedepends = meson makedepends = meson
makedepends = openssl makedepends = openssl
makedepends = orc makedepends = orc
makedepends = python
makedepends = python-dbus
makedepends = python-pyqt5
makedepends = rtkit makedepends = rtkit
makedepends = sbc makedepends = sbc
makedepends = speexdsp makedepends = speexdsp
makedepends = systemd makedepends = systemd
makedepends = systemd-libs
makedepends = tdb makedepends = tdb
makedepends = valgrind makedepends = valgrind
makedepends = webrtc-audio-processing-1 makedepends = webrtc-audio-processing-1
makedepends = xmltoman makedepends = xmltoman
source = git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=1f020889c9aa44ea0f63d7222e8c2b62c3f45f68 source = git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=3e2bb8a1ece02ae4e2c217273c9c0929cb9f5cae
b2sums = SKIP source = 0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch
b2sums = 1eea3f798a56ea7d51ebc49de20160b8ef2eeae00e4a139786dab02b7a2f0fb459a744a8960d1a6573d7f5591f54a391d943096260edc6dfc5b0f04773b9b311
b2sums = 73f93801069b2c5b09646870269c0f42cefc2183a73b47c78fd160c978a841c11c5146b98351a11be24d4785181f361a455534e6f6ca2d977cf585044836f8ed
pkgname = pulseaudio pkgname = pulseaudio
install = pulseaudio.install install = pulseaudio.install
depends = libpulse=17.0+r43+g3e2bb8a1e-1
depends = alsa-lib depends = alsa-lib
depends = bash
depends = dbus
depends = fftw depends = fftw
depends = gcc-libs
depends = glib2
depends = glibc
depends = libcap depends = libcap
depends = libice
depends = libltdl depends = libltdl
depends = libpulse=17.0-3.1
depends = libsm depends = libsm
depends = libsndfile
depends = libsoxr depends = libsoxr
depends = libx11
depends = libxcb
depends = libxtst depends = libxtst
depends = orc depends = orc
depends = rtkit depends = rtkit
depends = speexdsp depends = speexdsp
depends = systemd
depends = systemd-libs
depends = tdb depends = tdb
depends = webrtc-audio-processing-1 depends = webrtc-audio-processing-1
optdepends = pulseaudio-alsa: ALSA configuration (recommended) optdepends = pulseaudio-alsa: ALSA configuration (recommended)
@ -75,13 +103,14 @@ pkgname = pulseaudio
pkgname = libpulse pkgname = libpulse
pkgdesc = A featureful, general-purpose sound server (client library) pkgdesc = A featureful, general-purpose sound server (client library)
license = LGPL depends = bash
depends = dbus depends = dbus
depends = glib2
depends = glibc
depends = libasyncns depends = libasyncns
depends = libsndfile depends = libsndfile
depends = libxcb depends = libxcb
depends = systemd depends = systemd-libs
optdepends = glib2: mainloop integration
optdepends = pulse-native-provider: PulseAudio backend optdepends = pulse-native-provider: PulseAudio backend
provides = libpulse-mainloop-glib.so provides = libpulse-mainloop-glib.so
provides = libpulse-simple.so provides = libpulse-simple.so
@ -90,38 +119,57 @@ pkgname = libpulse
pkgname = pulseaudio-zeroconf pkgname = pulseaudio-zeroconf
pkgdesc = Zeroconf support for PulseAudio pkgdesc = Zeroconf support for PulseAudio
depends = libpulse=17.0+r43+g3e2bb8a1e-1
depends = pulseaudio=17.0+r43+g3e2bb8a1e-1
depends = avahi depends = avahi
depends = pulseaudio=17.0-3.1 depends = dbus
depends = glibc
pkgname = pulseaudio-lirc pkgname = pulseaudio-lirc
pkgdesc = IR (lirc) support for PulseAudio pkgdesc = IR (lirc) support for PulseAudio
depends = pulseaudio=17.0+r43+g3e2bb8a1e-1
depends = glibc
depends = lirc depends = lirc
depends = pulseaudio=17.0-3.1
pkgname = pulseaudio-jack pkgname = pulseaudio-jack
pkgdesc = Jack support for PulseAudio pkgdesc = Jack support for PulseAudio
depends = pulseaudio=17.0+r43+g3e2bb8a1e-1
depends = dbus
depends = glibc
depends = jack depends = jack
depends = pulseaudio=17.0-3.1
pkgname = pulseaudio-bluetooth pkgname = pulseaudio-bluetooth
pkgdesc = Bluetooth support for PulseAudio pkgdesc = Bluetooth support for PulseAudio
depends = libpulse=17.0+r43+g3e2bb8a1e-1
depends = pulseaudio=17.0+r43+g3e2bb8a1e-1
depends = bluez depends = bluez
depends = bluez-libs depends = bluez-libs
depends = dbus
depends = glib2
depends = glibc
depends = gst-plugins-base-libs depends = gst-plugins-base-libs
depends = pulseaudio=17.0-3.1 depends = gstreamer
depends = sbc depends = sbc
optdepends = gst-plugins-bad: AptX and LDAC support optdepends = gst-plugins-bad: AptX and LDAC support
pkgname = pulseaudio-equalizer pkgname = pulseaudio-equalizer
pkgdesc = Graphical equalizer for PulseAudio 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-dbus
depends = python-pyqt5 depends = python-pyqt5
pkgname = pulseaudio-rtp pkgname = pulseaudio-rtp
pkgdesc = RTP and RAOP support for PulseAudio 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
depends = gst-plugins-base-libs depends = gst-plugins-base-libs
depends = gst-plugins-good depends = gst-plugins-good
depends = gstreamer
depends = openssl 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-equalizer
pulseaudio-rtp pulseaudio-rtp
) )
pkgver=17.0 pkgver=17.0+r43+g3e2bb8a1e
pkgrel=3.1 pkgrel=1
pkgdesc="A featureful, general-purpose sound server" pkgdesc="A featureful, general-purpose sound server"
url="https://www.freedesktop.org/wiki/Software/PulseAudio/" url="https://www.freedesktop.org/wiki/Software/PulseAudio/"
arch=(x86_64 powerpc64le powerpc64 powerpc riscv64) arch=(x86_64 powerpc64le powerpc64 powerpc riscv64)
@ -22,38 +22,57 @@ makedepends=(
alsa-lib alsa-lib
attr attr
avahi avahi
bash
bluez bluez
bluez-libs bluez-libs
check check
dbus dbus
doxygen doxygen
fftw fftw
gcc-libs
git git
glib2
glibc
gst-plugins-base
gst-plugins-base-libs gst-plugins-base-libs
gst-plugins-good
gstreamer
gtk3 gtk3
jack2 jack2
libasyncns libasyncns
libcap libcap
libice
libltdl
libsm libsm
libsndfile libsndfile
libsoxr libsoxr
libx11
libxcb
libxtst libxtst
lirc lirc
meson meson
openssl openssl
orc orc
python
python-dbus
python-pyqt5
rtkit rtkit
sbc sbc
speexdsp speexdsp
systemd systemd
systemd-libs
tdb tdb
valgrind valgrind
webrtc-audio-processing-1 webrtc-audio-processing-1
xmltoman xmltoman
) )
_commit=1f020889c9aa44ea0f63d7222e8c2b62c3f45f68 # tags/v17.0^0 _commit=3e2bb8a1ece02ae4e2c217273c9c0929cb9f5cae # master
source=("git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=$_commit") source=(
b2sums=('SKIP') "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() { pkgver() {
cd pulseaudio cd pulseaudio
@ -66,10 +85,8 @@ prepare() {
# Freeze version before patching # Freeze version before patching
./git-version-gen doesnt-exist >.tarball-version ./git-version-gen doesnt-exist >.tarball-version
# Fix crashes with some UCM devices # https://gitlab.archlinux.org/archlinux/packaging/packages/pulseaudio/-/issues/7
# https://gitlab.archlinux.org/archlinux/packaging/packages/pulseaudio/-/issues/4 git apply -3 ../0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch
git cherry-pick -n f5cacd94abcc47003bd88ad7ca1450de649ffb15
git cherry-pick -n ed3d4f0837f670e5e5afb1afa5bcfc8ff05d3407
} }
build() { build() {
@ -103,17 +120,28 @@ _pick() {
package_pulseaudio() { package_pulseaudio() {
depends=( depends=(
alsa-lib
fftw
libcap
libltdl
"libpulse=$pkgver-$pkgrel" "libpulse=$pkgver-$pkgrel"
alsa-lib
bash
dbus
fftw
gcc-libs
glib2
glibc
libcap
libice
libltdl
libsm libsm
libsndfile
libsoxr libsoxr
libx11
libxcb
libxtst libxtst
orc orc
rtkit rtkit
speexdsp speexdsp
systemd
systemd-libs
tdb tdb
webrtc-audio-processing-1 webrtc-audio-processing-1
) )
@ -200,22 +228,21 @@ package_pulseaudio() {
package_libpulse() { package_libpulse() {
pkgdesc="$pkgdesc (client library)" pkgdesc="$pkgdesc (client library)"
depends=( depends=(
bash
dbus dbus
glib2
glibc
libasyncns libasyncns
libsndfile libsndfile
libxcb libxcb
systemd systemd-libs
)
optdepends=(
'glib2: mainloop integration'
'pulse-native-provider: PulseAudio backend'
) )
optdepends=('pulse-native-provider: PulseAudio backend')
provides=( provides=(
libpulse-mainloop-glib.so libpulse-mainloop-glib.so
libpulse-simple.so libpulse-simple.so
libpulse.so libpulse.so
) )
license=(LGPL)
backup=(etc/pulse/client.conf) backup=(etc/pulse/client.conf)
mv libpulse/* "$pkgdir" mv libpulse/* "$pkgdir"
@ -224,8 +251,11 @@ package_libpulse() {
package_pulseaudio-zeroconf() { package_pulseaudio-zeroconf() {
pkgdesc="Zeroconf support for PulseAudio" pkgdesc="Zeroconf support for PulseAudio"
depends=( depends=(
avahi "libpulse=$pkgver-$pkgrel"
"pulseaudio=$pkgver-$pkgrel" "pulseaudio=$pkgver-$pkgrel"
avahi
dbus
glibc
) )
mv zeroconf/* "$pkgdir" mv zeroconf/* "$pkgdir"
@ -234,8 +264,9 @@ package_pulseaudio-zeroconf() {
package_pulseaudio-lirc() { package_pulseaudio-lirc() {
pkgdesc="IR (lirc) support for PulseAudio" pkgdesc="IR (lirc) support for PulseAudio"
depends=( depends=(
lirc
"pulseaudio=$pkgver-$pkgrel" "pulseaudio=$pkgver-$pkgrel"
glibc
lirc
) )
mv lirc/* "$pkgdir" mv lirc/* "$pkgdir"
@ -244,8 +275,10 @@ package_pulseaudio-lirc() {
package_pulseaudio-jack() { package_pulseaudio-jack() {
pkgdesc="Jack support for PulseAudio" pkgdesc="Jack support for PulseAudio"
depends=( depends=(
jack
"pulseaudio=$pkgver-$pkgrel" "pulseaudio=$pkgver-$pkgrel"
dbus
glibc
jack
) )
mv jack/* "$pkgdir" mv jack/* "$pkgdir"
@ -254,10 +287,15 @@ package_pulseaudio-jack() {
package_pulseaudio-bluetooth() { package_pulseaudio-bluetooth() {
pkgdesc="Bluetooth support for PulseAudio" pkgdesc="Bluetooth support for PulseAudio"
depends=( depends=(
"libpulse=$pkgver-$pkgrel"
"pulseaudio=$pkgver-$pkgrel"
bluez bluez
bluez-libs bluez-libs
dbus
glib2
glibc
gst-plugins-base-libs gst-plugins-base-libs
"pulseaudio=$pkgver-$pkgrel" gstreamer
sbc sbc
) )
optdepends=('gst-plugins-bad: AptX and LDAC support') optdepends=('gst-plugins-bad: AptX and LDAC support')
@ -269,6 +307,10 @@ package_pulseaudio-equalizer() {
pkgdesc="Graphical equalizer for PulseAudio" pkgdesc="Graphical equalizer for PulseAudio"
depends=( depends=(
"pulseaudio=$pkgver-$pkgrel" "pulseaudio=$pkgver-$pkgrel"
dbus
fftw
glibc
python
python-dbus python-dbus
python-pyqt5 python-pyqt5
) )
@ -279,11 +321,15 @@ package_pulseaudio-equalizer() {
package_pulseaudio-rtp() { package_pulseaudio-rtp() {
pkgdesc="RTP and RAOP support for PulseAudio" pkgdesc="RTP and RAOP support for PulseAudio"
depends=( depends=(
"libpulse=$pkgver-$pkgrel"
"pulseaudio=$pkgver-$pkgrel"
glib2
glibc
gst-plugins-base gst-plugins-base
gst-plugins-base-libs gst-plugins-base-libs
gst-plugins-good gst-plugins-good
gstreamer
openssl openssl
"pulseaudio=$pkgver-$pkgrel"
) )
mv rtp/* "$pkgdir" mv rtp/* "$pkgdir"