This commit is contained in:
Gerben Jan Dijkman 2025-05-05 19:15:58 +02:00
parent c48bcf3b19
commit 192d241383
12 changed files with 0 additions and 1007 deletions

View File

@ -1,2 +0,0 @@
DIST pipewire-1.4.0-docs.tar.xz 67012 BLAKE2B 5d9f7432e33c86a5172ea310742a8e50312870eabab7f4357a1234580b8258c9bb83daa73fdcc1228c61629eb8555c00b961704671e55c6ed030f6c95b043397 SHA512 33791b64a577ead6975e0a615b1e4382ecafcc6f3dd6409ebd360c533312cab5f55f92a394bc42629ec4f53f17790ddedfb26a2b35cb4aa06ea07fd30bfce3d6
DIST pipewire-1.4.2.tar.bz2 1917345 BLAKE2B b88e34fe29268f72602410f0fd62f3c3decd2ccf363f7e4a0eac2e6770486775c6fc8317cda9a59f729023c25118e052bb8bab00457fa828ca7f4ceb02959ecd SHA512 3c4341560240fd4be957c5ad6ef87d46ffe74846ea1a9c75db4470dfc62a02ce8db26d71c63117e4b33ac074ea5165b3bdf29fc31028aee2317ef09b2eca4acc

View File

@ -1,33 +0,0 @@
From 04a2685a1d9aed399108b2dfdd20631bb6f3eb65 Mon Sep 17 00:00:00 2001
From: Dan Johansen <strit@manjaro.org>
Date: Wed, 16 Nov 2022 13:29:43 +0100
Subject: [PATCH] Use libcamera by default if it's found and supported
libcamera support was recently added, so this makes applications able to
use that support. This is for testing before the patch can be handed
over to upstream.
Signed-off-by: Dan Johansen <strit@manjaro.org>
---
.../main.lua.d/60-libcamera-nodes-by-default.lua | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 src/config/main.lua.d/60-libcamera-nodes-by-default.lua
diff --git a/src/config/main.lua.d/60-libcamera-nodes-by-default.lua b/src/config/main.lua.d/60-libcamera-nodes-by-default.lua
new file mode 100644
index 0000000..3d91be7
--- /dev/null
+++ b/src/config/main.lua.d/60-libcamera-nodes-by-default.lua
@@ -0,0 +1,10 @@
+ table.insert(libcamera_monitor.rules, {
+ matches = {
+ {
+ { "node.name", "matches", "libcamera_input.*" },
+ },
+ },
+ apply_properties = {
+ ["priority.session"] = 1000,
+ },
+})
--
2.38.1

View File

@ -1,17 +0,0 @@
# Load pipewire configuration at conf hook processing time. This allows to
# override pulseaudio defaults configuration which is also applied via hook.
#
# Note since hooks are run after @GENTOO_PORTAGE_EPREFIX@/etc/asound.conf and ~/.asoundrc are applied,
# we load these again here make sure that user configuration takes precedence.
@hooks [
{
func load
files [
"@GENTOO_PORTAGE_EPREFIX@/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf"
"@GENTOO_PORTAGE_EPREFIX@/etc/asound.conf"
"~/.asoundrc"
]
errors false
}
]

View File

@ -1,52 +0,0 @@
.TH "gentoo-pipewire-launcher" "1" "2023-06-15"
.SH "NAME"
gentoo\-pipewire\-launcher \- start instances of PipeWire, PipeWire-Pulse and WirePlumber
.SH "SYNOPSIS"
.BR gentoo\-pipewire\-launcher
[restart]
.SH "DESCRIPTION"
\fIgentoo\-pipewire\-launcher\fR starts instances of PipeWire and
WirePlumber.
Two instances of PipeWire are started: one as the core sound-server, and
one for PulseAudio emulation (cf.\&
.BR pipewire-pulse (1)\fR).
.PP
It must be run in an environment with an active D-Bus session bus,
i.e. one in which the
.B DBUS_SESSION_BUS_ADDRESS
environment variable is set appropriately.
.PP
\fIgentoo\-pipewire\-launcher\fR
tries to avoid restarting, in order to avoid audio dropouts.
However, a restart can be forced by calling
\fIgentoo\-pipewire\-launcher\fR
with an argument of \(oqrestart\(cq.
.PP
.B ${XDG_CONFIG_HOME}/gentoo\-pipewire\-launcher.conf
(or, if
.B ${XDG_CONFIG_HOME}
is not set,
.BR ${HOME}/.config/gentoo\-pipewire\-launcher.conf )
can be used to specify absolute paths of files to which log output
should be sent, by specifying values for one or more of the
.B GENTOO_PIPEWIRE_LOG\fR,
.B GENTOO_PIPEWIRE_PULSE_LOG\fR,
and
.B GENTOO_WIREPLUMBER_LOG
variables, one per line.
.SH "REPORTING BUGS"
Please report bugs via https://bugs.gentoo.org/
.SH "FILES"
.TP
.B ${XDG_CONFIG_HOME}/gentoo\-pipewire\-launcher.conf
configures locations of files for log output.
.TP
.B ${HOME}/.config/gentoo\-pipewire\-launcher.conf
configures locations of files for log output if
.B ${XDG_CONFIG_HOME}
is not set.
.SH "SEE ALSO"
.BR pipewire (1),
.BR pipewire-pulse (1),
.BR wireplumber (1),
.BR pipewire.conf (5)

View File

@ -1,84 +0,0 @@
#!/bin/sh
# PipeWire launcher script for XDG compliant desktops on OpenRC.
#
# systemd users are very _STRONGLY_ advised to use the much
# more reliable and predictable user units instead.
# WARNING: This script assumes being run inside XDG compliant session,
# which means D-Bus session instance is expected to be correctly set up
# prior to this script starting. If that is not true, things may break!
DATE_FORMAT='+%Y-%m-%dT%H:%M:%S%Z'
CONF="${XDG_CONFIG_HOME:-${HOME}/.config}/gentoo-pipewire-launcher.conf"
if [ -f "${CONF}" ]
then
. "${CONF}"
else
GENTOO_PIPEWIRE_LOG='/dev/null'
GENTOO_PIPEWIRE_PULSE_LOG='/dev/null'
GENTOO_WIREPLUMBER_LOG='/dev/null'
fi
for L in \
"${GENTOO_PIPEWIRE_LOG}" \
"${GENTOO_PIPEWIRE_PULSE_LOG}" \
"${GENTOO_WIREPLUMBER_LOG}"
do
if [ ! -e "${L}" ]
then
touch "${L}"
fi
done
restart () {
echo "Terminating PipeWire processes ..."
pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
# pidwait was renamed to pwait w/ procps-4 (bug #914030)
if command -v pidwait > /dev/null ; then
pidwait -u "${USER}" -x pipewire\|wireplumber
elif command -v pwait > /dev/null ; then
pwait -u "${USER}" -x pipewire\|wireplumber
fi
echo "PipeWire terminated."
}
if [ "${#}" -gt 0 ]
then
if [ "${1}" = 'restart' ]
then
restart
else
echo "Unrecognised argument." >&2
echo "Usage: gentoo-pipewire-launcher [restart]" >&2
exit 1
fi
fi
if pgrep -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
then
echo "PipeWire already running, exiting." >&2
echo "(Use 'gentoo-pipewire-launcher restart' to restart PipeWire and WirePlumber.)" >&2
exit 1
fi
# The core daemon which by itself does probably nothing.
echo "[$(@GENTOO_PORTAGE_EPREFIX@/bin/date ${DATE_FORMAT})] Starting PipeWire." 1>>"${GENTOO_PIPEWIRE_LOG}"
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire 1>>"${GENTOO_PIPEWIRE_LOG}" 2>&1 &
# The so called pipewire-pulse daemon used for PulseAudio compatibility.
# Commenting this out will stop the PA proxying daemon from starting,
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
# clients will still have access to audio and may end up clashing with
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
echo "[$(@GENTOO_PORTAGE_EPREFIX@/bin/date ${DATE_FORMAT})] Starting PipeWire-Pulse." 1>>"${GENTOO_PIPEWIRE_PULSE_LOG}"
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire -c pipewire-pulse.conf 1>>"${GENTOO_PIPEWIRE_PULSE_LOG}" 2>&1 &
# Hack for bug #822498
sleep 1
# Finally a session manager is required for PipeWire to do anything.
echo "[$(@GENTOO_PORTAGE_EPREFIX@/bin/date ${DATE_FORMAT})] Starting WirePlumber." 1>>"${GENTOO_WIREPLUMBER_LOG}"
exec @GENTOO_PORTAGE_EPREFIX@/usr/bin/wireplumber 1>>"${GENTOO_WIREPLUMBER_LOG}" 2>&1

View File

@ -1,6 +0,0 @@
wireplumber.profiles = {
main = {
hardware.audio = required
hardware.bluetooth = required
}
}

View File

@ -1,12 +0,0 @@
diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in
--- a/src/daemon/pipewire.conf.in
+++ b/src/daemon/pipewire.conf.in
@@ -6,7 +6,7 @@ context.properties = {
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
- #mem.warn-mlock = false
+ mem.warn-mlock = true # Gentoo should have good RLIMITs now
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true

View File

@ -1,80 +0,0 @@
From acc75b21f653873ec1da68bfa08f2945a8dd09d2 Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Sun, 30 Jun 2024 13:44:06 -0400
Subject: [PATCH] meson: fix conflicting use of feature-based dependency
lookups
When spa-plugins is enabled, the gio-2.0 global dependency is
overwritten.
When bluez support is enabled, OR when gsettings is enabled, the gio-2.0
dependency is then detected as found. This means that
pipewire-module-protocol-pulse can end up enabling gsettings support
even if it has been forcibly turned off.
Rename the meson variables to ensure they are looked up separately.
(cherry picked from commit b5f031bc15524bbfde577290ad9bbadeab77ae8b)
Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
---
meson.build | 4 ++--
spa/meson.build | 6 +++---
src/modules/meson.build | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 0ea256e9b..3353a2aec 100644
--- a/meson.build
+++ b/meson.build
@@ -343,8 +343,8 @@ summary({'GLib-2.0 (Flatpak support)': glib2_dep.found()}, bool_yn: true, sectio
flatpak_support = glib2_dep.found()
cdata.set('HAVE_GLIB2', flatpak_support)
-gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
-summary({'GIO (GSettings)': gio_dep.found()}, bool_yn: true, section: 'Misc dependencies')
+gsettings_gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
+summary({'GIO (GSettings)': gsettings_gio_dep.found()}, bool_yn: true, section: 'Misc dependencies')
gst_option = get_option('gstreamer')
gst_deps_def = {
diff --git a/spa/meson.build b/spa/meson.build
index db0a84425..e37744b08 100644
--- a/spa/meson.build
+++ b/spa/meson.build
@@ -43,12 +43,12 @@ if get_option('spa-plugins').allowed()
summary({'ALSA': alsa_dep.found()}, bool_yn: true, section: 'Backend')
bluez_dep = dependency('bluez', version : '>= 4.101', required: get_option('bluez5'))
- gio_dep = dependency('gio-2.0', required : get_option('bluez5'))
- gio_unix_dep = dependency('gio-unix-2.0', required : get_option('bluez5'))
+ bluez_gio_dep = dependency('gio-2.0', required : get_option('bluez5'))
+ bluez_gio_unix_dep = dependency('gio-unix-2.0', required : get_option('bluez5'))
bluez_glib2_dep = dependency('glib-2.0', required : get_option('bluez5'))
sbc_dep = dependency('sbc', required: get_option('bluez5'))
summary({'SBC': sbc_dep.found()}, bool_yn: true, section: 'Bluetooth audio codecs')
- bluez5_deps = [ mathlib, dbus_dep, sbc_dep, bluez_dep, bluez_glib2_dep, gio_dep, gio_unix_dep ]
+ bluez5_deps = [ mathlib, dbus_dep, sbc_dep, bluez_dep, bluez_glib2_dep, bluez_gio_dep, bluez_gio_unix_dep ]
bluez_deps_found = get_option('bluez5').allowed()
foreach dep: bluez5_deps
if get_option('bluez5').enabled() and not dep.found()
diff --git a/src/modules/meson.build b/src/modules/meson.build
index 1b434b7f6..52660253e 100644
--- a/src/modules/meson.build
+++ b/src/modules/meson.build
@@ -409,11 +409,11 @@ if avahi_dep.found()
cdata.set('HAVE_AVAHI', true)
endif
-if gio_dep.found()
+if gsettings_gio_dep.found()
pipewire_module_protocol_pulse_sources += [
'module-protocol-pulse/modules/module-gsettings.c',
]
- pipewire_module_protocol_pulse_deps += gio_dep
+ pipewire_module_protocol_pulse_deps += gsettings_gio_dep
cdata.set('HAVE_GIO', true)
endif
--
2.44.2

View File

@ -1,95 +0,0 @@
From acd5bf60b9d4a35d00c90bfdca7f89e4ff4a4ff7 Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Thu, 30 May 2024 19:44:38 -0400
Subject: [PATCH] meson: fix webrtc-audio-processing dependency ignoring
configure args
Most dependencies use meson "feature" options for optional
functionality. This allows people to disable them, if they don't want
them, through the power of tristate decision-making.
This particular dependency does something a bit more complicated than
can be described by simply passing feature options to the required
kwarg. It:
- tries to look for two different names of the dependency
- selects different version ranges, depending on the dependency name
- has a hole in the middle of the versions
Unfortunately, `required: false` for the first dependency isn't
equivalent to a tristate decision-making process. We have to manually
code the logic ourselves.
The problem is that when we look up the first name, we cannot pass the
feature option in because if the option is force enabled, then the
dependency lookup fails and configuration never tries to find the older
version instead.
But also, we can't just say it *isn't* required, because if the option
is force *disabled* but it is installed on the system, we still find it
and build against it.
One solution would be using meson 0.60's support for multiple dependency
names:
```
dependency('webrtc-audio-processing-1', 'webrtc-audio-processing',
version : ['>= 0.2'],
required: get_option('echo-cancel-webrtc'),
)
```
Unfortunately, this too doesn't work since we could end up detecting 1.1
(the hole in the middle) which is invalid.
Instead, we do a bit of checking for tristate values before deciding to
invoke `dependency()`. This lets us guarantee that disabled dependencies
are well and truly disabled.
Bug: https://bugs.gentoo.org/933218
Fixes: #3678
---
meson.build | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/meson.build b/meson.build
index cda60112f..72d275086 100644
--- a/meson.build
+++ b/meson.build
@@ -393,18 +393,23 @@ cdata.set('HAVE_GSTREAMER_DEVICE_PROVIDER', get_option('gstreamer-device-provide
summary({'gstreamer DMA_DRM support': gst_dma_drm_found}, bool_yn: true, section: 'Backend')
cdata.set('HAVE_GSTREAMER_DMA_DRM', gst_dma_drm_found)
-webrtc_dep = dependency('webrtc-audio-processing-1',
- version : ['>= 1.2' ],
- required : false)
-cdata.set('HAVE_WEBRTC1', webrtc_dep.found())
-if webrtc_dep.found()
+if get_option('echo-cancel-webrtc').disabled()
+ webrtc_dep = dependency('', required: false)
summary({'WebRTC Echo Canceling >= 1.2': webrtc_dep.found()}, bool_yn: true, section: 'Misc dependencies')
else
- webrtc_dep = dependency('webrtc-audio-processing',
- version : ['>= 0.2', '< 1.0'],
- required : get_option('echo-cancel-webrtc'))
- cdata.set('HAVE_WEBRTC', webrtc_dep.found())
- summary({'WebRTC Echo Canceling < 1.0': webrtc_dep.found()}, bool_yn: true, section: 'Misc dependencies')
+ webrtc_dep = dependency('webrtc-audio-processing-1',
+ version : ['>= 1.2' ],
+ required : false)
+ cdata.set('HAVE_WEBRTC1', webrtc_dep.found())
+ if webrtc_dep.found()
+ summary({'WebRTC Echo Canceling >= 1.2': webrtc_dep.found()}, bool_yn: true, section: 'Misc dependencies')
+ else
+ webrtc_dep = dependency('webrtc-audio-processing',
+ version : ['>= 0.2', '< 1.0'],
+ required : get_option('echo-cancel-webrtc'))
+ cdata.set('HAVE_WEBRTC', webrtc_dep.found())
+ summary({'WebRTC Echo Canceling < 1.0': webrtc_dep.found()}, bool_yn: true, section: 'Misc dependencies')
+ endif
endif
# On FreeBSD and MidnightBSD, epoll-shim library is required for eventfd() and timerfd()
--
GitLab

View File

@ -1,79 +0,0 @@
From b5f031bc15524bbfde577290ad9bbadeab77ae8b Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Sun, 30 Jun 2024 13:44:06 -0400
Subject: [PATCH] meson: fix conflicting use of feature-based dependency
lookups
When spa-plugins is enabled, the gio-2.0 global dependency is
overwritten.
When bluez support is enabled, OR when gsettings is enabled, the gio-2.0
dependency is then detected as found. This means that
pipewire-module-protocol-pulse can end up enabling gsettings support
even if it has been forcibly turned off.
Rename the meson variables to ensure they are looked up separately.
---
meson.build | 6 +++---
spa/meson.build | 6 +++---
src/modules/meson.build | 4 ++--
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/meson.build b/meson.build
index 2607c5c8f4..38b6b59d00 100644
--- a/meson.build
+++ b/meson.build
@@ -346,9 +346,9 @@ summary({'GLib-2.0 (Flatpak support)': glib2_dep.found()}, bool_yn: true, sectio
flatpak_support = glib2_dep.found()
cdata.set('HAVE_GLIB2', flatpak_support)
-gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
-summary({'GIO (GSettings)': gio_dep.found()}, bool_yn: true, section: 'Misc dependencies')
-if not gio_dep.found() and get_option('gsettings-pulse-schema').enabled()
+gsettings_gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : get_option('gsettings'))
+summary({'GIO (GSettings)': gsettings_gio_dep.found()}, bool_yn: true, section: 'Misc dependencies')
+if not gsettings_gio_dep.found() and get_option('gsettings-pulse-schema').enabled()
error('`gsettings-pulse-schema` is enabled but `gio` was not found.')
endif
diff --git a/spa/meson.build b/spa/meson.build
index 67e4b5c506..cf25609dab 100644
--- a/spa/meson.build
+++ b/spa/meson.build
@@ -47,12 +47,12 @@ if get_option('spa-plugins').allowed()
summary({'ALSA': alsa_dep.found()}, bool_yn: true, section: 'Backend')
bluez_dep = dependency('bluez', version : '>= 4.101', required: get_option('bluez5'))
- gio_dep = dependency('gio-2.0', required : get_option('bluez5'))
- gio_unix_dep = dependency('gio-unix-2.0', required : get_option('bluez5'))
+ bluez_gio_dep = dependency('gio-2.0', required : get_option('bluez5'))
+ bluez_gio_unix_dep = dependency('gio-unix-2.0', required : get_option('bluez5'))
bluez_glib2_dep = dependency('glib-2.0', required : get_option('bluez5'))
sbc_dep = dependency('sbc', required: get_option('bluez5'))
summary({'SBC': sbc_dep.found()}, bool_yn: true, section: 'Bluetooth audio codecs')
- bluez5_deps = [ mathlib, dbus_dep, sbc_dep, bluez_dep, bluez_glib2_dep, gio_dep, gio_unix_dep ]
+ bluez5_deps = [ mathlib, dbus_dep, sbc_dep, bluez_dep, bluez_glib2_dep, bluez_gio_dep, bluez_gio_unix_dep ]
bluez_deps_found = get_option('bluez5').allowed()
foreach dep: bluez5_deps
if get_option('bluez5').enabled() and not dep.found()
diff --git a/src/modules/meson.build b/src/modules/meson.build
index ceaa7013d9..3f400f0877 100644
--- a/src/modules/meson.build
+++ b/src/modules/meson.build
@@ -433,11 +433,11 @@ if avahi_dep.found()
cdata.set('HAVE_AVAHI', true)
endif
-if gio_dep.found()
+if gsettings_gio_dep.found()
pipewire_module_protocol_pulse_sources += [
'module-protocol-pulse/modules/module-gsettings.c',
]
- pipewire_module_protocol_pulse_deps += gio_dep
+ pipewire_module_protocol_pulse_deps += gsettings_gio_dep
cdata.set('HAVE_GIO', true)
if get_option('gsettings-pulse-schema').enabled()
install_data(['module-protocol-pulse/modules/org.freedesktop.pulseaudio.gschema.xml'],
--
GitLab

View File

@ -1,12 +0,0 @@
[Desktop Entry]
Version=1.0
Name[de]=PipeWire Mediensystem
Name=PipeWire Media System
Comment[de]=Das PipeWire Mediensystem starten
Comment=Start the PipeWire Media System
Exec=/usr/bin/gentoo-pipewire-launcher restart
Terminal=false
Type=Application
X-GNOME-HiddenUnderSystemd=true
X-KDE-HiddenUnderSystemd=true
X-systemd-skip=true

View File

@ -1,535 +0,0 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
# 1. Please regularly check (even at the point of bumping) Fedora's packaging
# for needed backports at https://src.fedoraproject.org/rpms/pipewire/tree/rawhide.
#
# 2. Upstream also sometimes amend release notes for the previous release to mention
# needed patches, e.g. https://gitlab.freedesktop.org/pipewire/pipewire/-/tags/0.3.55#distros
#
# 3. Keep an eye on git master (for both PipeWire and WirePlumber) as things
# continue to move quickly. It's not uncommon for fixes to be made shortly
# after releases.
# TODO: Maybe get upstream to produce `meson dist` tarballs:
# - https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3663
# - https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1788
#
# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-pipewire-docs
# Set to 1 if prebuilt, 0 if not
# (the construct below is to allow overriding from env for script)
: ${PIPEWIRE_DOCS_PREBUILT:=1}
PIPEWIRE_DOCS_PREBUILT_DEV=sam
PIPEWIRE_DOCS_VERSION="$(ver_cut 1-2).0"
# Default to generating docs (inc. man pages) if no prebuilt; overridden later
PIPEWIRE_DOCS_USEFLAG="+man"
PYTHON_COMPAT=( python3_{10..13} )
inherit meson-multilib optfeature prefix python-any-r1 systemd tmpfiles udev
if [[ ${PV} == 9999 ]]; then
PIPEWIRE_DOCS_PREBUILT=0
EGIT_REPO_URI="https://gitlab.freedesktop.org/${PN}/${PN}.git"
inherit git-r3
else
if [[ ${PV} == *_p* ]] ; then
MY_COMMIT=""
SRC_URI="https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/${MY_COMMIT}/pipewire-${MY_COMMIT}.tar.bz2 -> ${P}.tar.bz2"
S="${WORKDIR}"/${PN}-${MY_COMMIT}
else
SRC_URI="https://gitlab.freedesktop.org/${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2"
fi
if [[ ${PIPEWIRE_DOCS_PREBUILT} == 1 ]] ; then
SRC_URI+=" !man? ( https://dev.gentoo.org/~${PIPEWIRE_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${PIPEWIRE_DOCS_VERSION}-docs.tar.xz )"
PIPEWIRE_DOCS_USEFLAG="man"
fi
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
fi
DESCRIPTION="Multimedia processing graphs"
HOMEPAGE="https://pipewire.org/"
LICENSE="MIT LGPL-2.1+ GPL-2"
# ABI was broken in 0.3.42 for https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/49
SLOT="0/0.4"
IUSE="${PIPEWIRE_DOCS_USEFLAG} bluetooth elogind dbus doc echo-cancel extra ffmpeg flatpak gstreamer gsettings ieee1394 jack-client jack-sdk liblc3 loudness lv2"
IUSE+=" modemmanager pipewire-alsa readline roc selinux sound-server ssl system-service systemd test v4l X zeroconf +libcamera"
# Once replacing system JACK libraries is possible, it's likely that
# jack-client IUSE will need blocking to avoid users accidentally
# configuring their systems to send PW sink output to the emulated
# JACK's sink - doing so is likely to yield no audio, cause a CPU
# cycles consuming loop (and may even cause GUI crashes)!
# - TODO: There should be "sound-server? ( || ( alsa bluetooth ) )" here, but ALSA is always enabled
# - TODO: Pulseaudio alsa plugin performs runtime check that pulseaudio server connection will work
# which provides adequate guarantee that alsa-lib will be able to provide audio services.
# If that works, pulseaudio defaults are loaded into alsa-lib runtime replacing default PCM and CTL.
# When pipewire-alsa will be able to perform similar check, pipewire-alsa can be enabled unconditionally.
# - ffmpeg is only used for pw-cat. We don't build the spa plugin which receives barely any activity.
REQUIRED_USE="
ffmpeg? ( extra )
bluetooth? ( dbus )
jack-sdk? ( !jack-client )
modemmanager? ( bluetooth )
system-service? ( systemd )
!sound-server? ( !pipewire-alsa )
jack-client? ( dbus )
"
RESTRICT="!test? ( test )"
BDEPEND="
>=dev-build/meson-0.59
virtual/pkgconfig
dbus? ( dev-util/gdbus-codegen )
doc? (
${PYTHON_DEPS}
>=app-text/doxygen-1.9.8
media-gfx/graphviz
)
man? (
${PYTHON_DEPS}
>=app-text/doxygen-1.9.8
)
"
# * While udev could technically be optional, it's needed for a number of options,
# and not really worth it, bug #877769.
#
# * Supports both legacy webrtc-audio-processing:2 and new webrtc-audio-processing:1.
# Automagic but :2 isn't yet packaged.
#
# * Older Doxygen (<1.9.8) may work but inferior output is created:
# - https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1778
# - https://github.com/doxygen/doxygen/issues/9254
RDEPEND="
acct-group/audio
acct-group/pipewire
media-libs/alsa-lib[${MULTILIB_USEDEP}]
sys-libs/ncurses:=[unicode(+)]
virtual/libintl[${MULTILIB_USEDEP}]
virtual/libudev[${MULTILIB_USEDEP}]
bluetooth? (
dev-libs/glib
media-libs/fdk-aac
media-libs/libldac
media-libs/libfreeaptx
media-libs/opus
media-libs/sbc
>=net-wireless/bluez-4.101:=
virtual/libusb:1
)
elogind? ( sys-auth/elogind )
dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
echo-cancel? ( >=media-libs/webrtc-audio-processing-1.2:1 )
extra? ( >=media-libs/libsndfile-1.0.20 )
ffmpeg? ( media-video/ffmpeg:= )
flatpak? ( dev-libs/glib )
gstreamer? (
>=dev-libs/glib-2.32.0:2
>=media-libs/gstreamer-1.10.0:1.0
media-libs/gst-plugins-base:1.0
)
gsettings? ( >=dev-libs/glib-2.26.0:2 )
ieee1394? ( media-libs/libffado[${MULTILIB_USEDEP}] )
jack-client? ( >=media-sound/jack2-1.9.10:2[dbus] )
jack-sdk? (
!media-sound/jack-audio-connection-kit
!media-sound/jack2
)
liblc3? ( media-sound/liblc3 )
loudness? ( media-libs/libebur128:=[${MULTILIB_USEDEP}] )
lv2? ( media-libs/lilv )
modemmanager? ( >=net-misc/modemmanager-1.10.0 )
pipewire-alsa? ( >=media-libs/alsa-lib-1.2.10[${MULTILIB_USEDEP}] )
sound-server? ( !media-sound/pulseaudio-daemon )
roc? ( >=media-libs/roc-toolkit-0.4.0:= )
readline? ( sys-libs/readline:= )
selinux? ( sys-libs/libselinux )
ssl? ( dev-libs/openssl:= )
systemd? ( sys-apps/systemd )
system-service? ( acct-user/pipewire )
v4l? ( media-libs/libv4l )
X? (
media-libs/libcanberra
x11-libs/libX11
x11-libs/libXfixes
)
zeroconf? ( net-dns/avahi )
libcamera? ( media-libs/libcamera )
"
DEPEND="${RDEPEND}"
PDEPEND=">=media-video/wireplumber-0.5.2"
# Present RDEPEND that are currently always disabled due to the PW
# code using them being required to be disabled by Gentoo guidelines
# (i.e. developer binaries not meant for users) and unready code
# media-libs/libsdl2
# >=media-libs/vulkan-loader-1.1.69
#
# Ditto for DEPEND
# >=dev-util/vulkan-headers-1.1.69
PATCHES=(
"${FILESDIR}"/${PN}-0.3.25-enable-failed-mlock-warning.patch
)
pkg_setup() {
if use doc || use man ; then
python-any-r1_pkg_setup
fi
}
src_prepare() {
default
# Used for upstream backports
[[ -d "${FILESDIR}"/${PV} ]] && eapply "${FILESDIR}"/${PV}
}
multilib_src_configure() {
local logind=disabled
if multilib_is_native_abi ; then
if use systemd ; then
logind=enabled
elif use elogind ; then
logind=enabled
fi
fi
local emesonargs=(
-Ddocdir="${EPREFIX}"/usr/share/doc/${PF}
$(meson_feature dbus)
$(meson_native_use_feature zeroconf avahi)
$(meson_native_use_feature doc docs)
$(meson_native_use_feature man)
$(meson_native_enabled examples) # TODO: Figure out if this is still important now that media-session gone
$(meson_feature test tests)
-Dinstalled_tests=disabled # Matches upstream; Gentoo never installs tests
$(meson_feature ieee1394 libffado)
$(meson_native_use_feature gstreamer)
$(meson_native_use_feature gstreamer gstreamer-device-provider)
$(meson_native_use_feature gsettings)
$(meson_native_use_feature systemd)
-Dlogind=${logind}
-Dlogind-provider=$(usex systemd 'libsystemd' 'libelogind')
$(meson_native_use_feature system-service systemd-system-service)
-Dsystemd-system-unit-dir="$(systemd_get_systemunitdir)"
-Dsystemd-user-unit-dir="$(systemd_get_userunitdir)"
$(meson_native_use_feature systemd systemd-user-service)
$(meson_feature pipewire-alsa) # Allows integrating ALSA apps into PW graph
$(meson_feature selinux)
-Dspa-plugins=enabled
-Dalsa=enabled # Allows using kernel ALSA for sound I/O (NOTE: media-session is gone so IUSE=alsa/spa_alsa/alsa-backend might be possible)
-Dcompress-offload=disabled # TODO: tinycompress unpackaged
-Daudiomixer=enabled # Matches upstream
-Daudioconvert=enabled # Matches upstream
$(meson_native_use_feature bluetooth bluez5)
$(meson_native_use_feature bluetooth bluez5-backend-hsp-native)
$(meson_native_use_feature bluetooth bluez5-backend-hfp-native)
# https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1379
$(meson_native_use_feature modemmanager bluez5-backend-native-mm)
$(meson_native_use_feature bluetooth bluez5-backend-ofono)
$(meson_native_use_feature bluetooth bluez5-backend-hsphfpd)
$(meson_native_use_feature bluetooth bluez5-codec-aac)
$(meson_native_use_feature bluetooth bluez5-codec-aptx)
$(meson_native_use_feature bluetooth bluez5-codec-ldac)
$(meson_native_use_feature bluetooth bluez5-codec-g722)
$(meson_native_use_feature bluetooth opus)
$(meson_native_use_feature bluetooth bluez5-codec-opus)
$(meson_native_use_feature bluetooth libusb) # At least for now only used by bluez5 native (quirk detection of adapters)
$(meson_native_use_feature echo-cancel echo-cancel-webrtc) #807889
-Dcontrol=enabled # Matches upstream
-Daudiotestsrc=enabled # Matches upstream
-Dffmpeg=disabled # Disabled by upstream and no major developments to spa/plugins/ffmpeg/ since May 2020
$(meson_native_use_feature ffmpeg pw-cat-ffmpeg)
$(meson_native_use_feature flatpak)
-Dpipewire-jack=enabled # Allows integrating JACK apps into PW graph
$(meson_native_use_feature jack-client jack) # Allows PW to act as a JACK client
$(meson_use jack-sdk jack-devel)
$(usex jack-sdk "-Dlibjack-path=${EPREFIX}/usr/$(get_libdir)" '')
-Dsupport=enabled # Miscellaneous/common plugins, such as null sink
-Devl=disabled # Matches upstream
-Dtest=disabled # fakesink and fakesource plugins
-Dbluez5-codec-lc3plus=disabled # unpackaged
$(meson_native_use_feature liblc3 bluez5-codec-lc3)
$(meson_feature loudness ebur128)
$(meson_native_use_feature lv2)
$(meson_native_use_feature v4l v4l2)
-Dlibcamera=enabled # libcamera is not in Portage tree
$(meson_native_use_feature roc)
$(meson_native_use_feature readline)
$(meson_native_use_feature ssl raop)
-Dvideoconvert=enabled # Matches upstream
-Dvideotestsrc=enabled # Matches upstream
-Dvolume=enabled # Matches upstream
-Dvulkan=disabled # Uses pre-compiled Vulkan compute shader to provide a CGI video source (dev thing; disabled by upstream)
$(meson_native_use_feature extra pw-cat)
-Dudev=enabled
-Dudevrulesdir="${EPREFIX}$(get_udevdir)/rules.d"
-Dsdl2=disabled # Controls SDL2 dependent code (currently only examples when -Dinstalled_tests=enabled which we never install)
-Dlibmysofa=disabled # libmysofa is unpackaged
$(meson_native_use_feature extra sndfile) # Enables libsndfile dependent code (currently only pw-cat)
-Dsession-managers="[]" # All available session managers are now their own projects, so there's nothing to build
# We still have <5.16 kernels packaged in Gentoo and 6.1 (LTS) only
# just became stable, with 5.15 being the previous LTS. Many people
# are still on it.
-Dpam-defaults-install=true
# Just for bell sounds in X11 right now.
$(meson_native_use_feature X x11)
$(meson_native_use_feature X x11-xfixes)
$(meson_native_use_feature X libcanberra)
# TODO
-Dsnap=disabled
)
# This installs the schema file for pulseaudio-daemon, iff we are replacing
# the official sound-server
if use !sound-server; then
emesonargs+=( '-Dgsettings-pulse-schema=disabled' )
else
emesonargs+=(
$(meson_native_use_feature gsettings gsettings-pulse-schema)
)
fi
meson_src_configure
}
multilib_src_test() {
meson_src_test --timeout-multiplier 10
}
multilib_src_install() {
# Our custom DOCS do not exist in multilib source directory
DOCS= meson_src_install
}
multilib_src_install_all() {
einstalldocs
if ! use man && [[ ${PIPEWIRE_DOCS_PREBUILT} == 1 ]] ; then
doman "${WORKDIR}"/${PN}-${PIPEWIRE_DOCS_VERSION}-docs/man/*/*.[0-8]
fi
if use pipewire-alsa; then
dodir /etc/alsa/conf.d
# Install pipewire conf loader hook
insinto /usr/share/alsa/alsa.conf.d
doins "${FILESDIR}"/99-pipewire-default-hook.conf
eprefixify "${ED}"/usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf
# These will break if someone has /etc that is a symbolic link to a subfolder! See #724222
# And the current dosym8 -r implementation is likely affected by the same issue, too.
dosym ../../../usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d/50-pipewire.conf
dosym ../../../usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf /etc/alsa/conf.d/99-pipewire-default-hook.conf
fi
exeinto /etc/user/init.d
newexe "${FILESDIR}"/pipewire.initd pipewire
# Enable required wireplumber alsa and bluez monitors
if use sound-server; then
newexe "${FILESDIR}"/pipewire-pulse.initd pipewire-pulse
# Install sound-server enabler for wireplumber 0.5.0+ conf syntax
insinto /etc/wireplumber/wireplumber.conf.d
doins "${FILESDIR}"/gentoo-sound-server-enable-audio-bluetooth.conf
fi
if use system-service; then
newtmpfiles - pipewire.conf <<-EOF || die
d /run/pipewire 0755 pipewire pipewire - -
EOF
fi
if ! use systemd; then
insinto /etc/xdg/autostart
newins "${FILESDIR}"/pipewire.desktop-r2 pipewire.desktop
exeinto /usr/bin
newexe "${FILESDIR}"/gentoo-pipewire-launcher.in-r3 gentoo-pipewire-launcher
doman "${FILESDIR}"/gentoo-pipewire-launcher.1
# Disable pipewire-pulse if sound-server is disabled.
if ! use sound-server ; then
sed -i -s '/pipewire -c pipewire-pulse.conf/s/^/#/' "${ED}"/usr/bin/gentoo-pipewire-launcher || die
fi
eprefixify "${ED}"/usr/bin/gentoo-pipewire-launcher
fi
}
pkg_postrm() {
udev_reload
}
pkg_preinst() {
HAD_SOUND_SERVER=0
HAD_SYSTEM_SERVICE=0
if has_version "media-video/pipewire[sound-server(-)]" ; then
HAD_SOUND_SERVER=1
fi
if has_version "media-video/pipewire[system-service(-)]" ; then
HAD_SYSTEM_SERVICE=1
fi
}
pkg_postinst() {
udev_reload
use system-service && tmpfiles_process pipewire.conf
local ver
for ver in ${REPLACING_VERSIONS} ; do
if has_version kde-plasma/kwin[screencast] || has_version x11-wm/mutter[screencast] ; then
# https://bugs.gentoo.org/908490
# https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3243
ewarn "Please restart KWin/Mutter after upgrading PipeWire."
ewarn "Screencasting may not work until you do."
fi
if ver_test ${ver} -le 0.3.66-r1 ; then
elog ">=pipewire-0.3.66 uses the 'pipewire' group to manage permissions"
elog "and limits needed to function smoothly:"
elog
elog "1. Please make sure your user is in the 'pipewire' group for"
elog "the best experience with realtime scheduling (PAM limits behavior)!"
elog "You can add your account with:"
elog " usermod -aG pipewire <youruser>"
elog
elog "2. For the best experience with fast user switching, it is recommended"
elog "that you remove your user from the 'audio' group unless you rely on the"
elog "audio group for device access control or ACLs.:"
elog " usermod -rG audio <youruser>"
elog
if ! use jack-sdk ; then
elog
elog "JACK emulation is incomplete and not all programs will work. PipeWire's"
elog "alternative libraries have been installed to a non-default location."
elog "To use them, put pw-jack <application> before every JACK application."
elog "When using pw-jack, do not run jackd/jackdbus. However, a virtual/jack"
elog "provider is still needed to compile the JACK applications themselves."
elog
fi
if use systemd ; then
ewarn
ewarn "PipeWire daemon startup has been moved to a launcher script!"
ewarn "Make sure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist or no"
ewarn "longer is set to start a session manager or PulseAudio compatibility daemon (all"
ewarn "lines similar to '{ path = /usr/bin/pipewire*' should be commented out)"
ewarn
ewarn "Those manually starting /usr/bin/pipewire via .xinitrc or similar _must_ from"
ewarn "now on start ${EROOT}/usr/bin/gentoo-pipewire-launcher instead! It is highly"
ewarn "advised that a D-Bus user session is set up before starting the script."
ewarn
fi
if use sound-server && ( has_version 'media-sound/pulseaudio[daemon]' || has_version 'media-sound/pulseaudio-daemon' ) ; then
elog
elog "This ebuild auto-enables PulseAudio replacement. Because of that, users"
elog "are recommended to edit pulseaudio client configuration files:"
elog "${EROOT}/etc/pulse/client.conf and ${EROOT}/etc/pulse/client.conf.d/enable-autospawn.conf"
elog "if it exists, and disable autospawning of the original daemon by setting:"
elog
elog " autospawn = no"
elog
elog "Please note that the semicolon (;) must _NOT_ be at the beginning of the line!"
elog
elog "Alternatively, if replacing PulseAudio daemon is not desired, edit"
elog "${EROOT}/usr/bin/gentoo-pipewire-launcher by commenting out the relevant"
elog "command:"
elog
elog "#${EROOT}/usr/bin/pipewire -c pipewire-pulse.conf &"
elog
fi
if has_version 'net-misc/ofono' ; then
ewarn "Native backend has become default. Please disable oFono via:"
if systemd_is_booted ; then
ewarn "systemctl disable ofono"
else
ewarn "rc-update delete ofono"
fi
fi
fi
done
if [[ ${HAD_SOUND_SERVER} -eq 0 || -z ${REPLACING_VERSIONS} ]] ; then
# TODO: We could drop most of this if we set up systemd presets?
# They're worth looking into because right now, the out-of-the-box experience
# is automatic on OpenRC, while it needs manual intervention on systemd.
if use sound-server && use systemd ; then
elog
elog "When switching from PulseAudio, you may need to disable PulseAudio:"
elog
elog " systemctl --user disable pulseaudio.service pulseaudio.socket"
elog
elog "To use PipeWire, the user units must be manually enabled"
elog "by running this command as each user you use for desktop activities:"
elog
elog " systemctl --user enable pipewire.socket pipewire-pulse.socket"
elog
elog "A reboot is recommended to avoid interferences from still running"
elog "PulseAudio daemon."
elog
elog "Both new users and those upgrading need to enable WirePlumber"
elog "for relevant users:"
elog
elog " systemctl --user disable pipewire-media-session.service"
elog " systemctl --user --force enable wireplumber.service"
elog
elog "Root user may replace --user with --global to change system default"
elog "configuration for all of the above commands."
elog
fi
if ! use sound-server ; then
ewarn
ewarn "USE=sound-server is disabled! If you want PipeWire to provide"
ewarn "your sound, please enable it. See the wiki at"
ewarn "https://wiki.gentoo.org/wiki/PipeWire#Replacing_PulseAudio"
ewarn "for more details."
ewarn
fi
fi
if use system-service && [[ ${HAD_SYSTEM_SERVICE} -eq 0 || -z ${REPLACING_VERSIONS} ]] ; then
ewarn
ewarn "You have enabled the system-service USE flag, which installs"
ewarn "the system-wide systemd units that enable PipeWire to run as a system"
ewarn "service. This is more than likely NOT what you want. You are strongly"
ewarn "advised not to enable this mode and instead stick with systemd user"
ewarn "units. The default configuration files will likely not work out of the"
ewarn "box, and you are on your own with configuration."
ewarn
fi
elog "For latest tips and tricks, troubleshooting information, and documentation"
elog "in general, please refer to https://wiki.gentoo.org/wiki/PipeWire"
elog
optfeature_header "The following can be installed for optional runtime features:"
optfeature "restricted realtime capabilities via D-Bus" sys-auth/rtkit
if use sound-server && ! use pipewire-alsa; then
optfeature "ALSA plugin to use PulseAudio interface for output" "media-plugins/alsa-plugins[pulseaudio]"
fi
}