commit:     b08c84f511f0c75e07bba317ca281a5d9d63ab12
Author:     Niklāvs Koļesņikovs <80783143+pinkflames <AT> users <DOT> noreply 
<DOT> github <DOT> com>
AuthorDate: Tue Mar 16 22:01:02 2021 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Mon Apr 12 21:55:34 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b08c84f5

media-video/pipewire: Bump to 0.3.25 & ebuild overhaul

This overhaul improves the instructions shown after merging and now
provides a sys-auth/realtime-base inspired limits.d file for
better user experience.
The user ID (UID) range used was chosen to match what SDDM accepts
as a valid non-system UID range. This has known shortcomings with
very large values in enterprise deployments but this was deemed
the least bad of all the imperfect options.

Updates SRC_URI to use the official repository hosted by The
freedesktop project instead of the GitHub mirror.
Patches Meson files to correctly handle docdir per FHS/Gentoo policy.

Replaces the old jack IUSE with jack-client for allowing PW to act
as a JACK 2 client, while the emulation code is now always enabled,
since it has no dependencies nor adverse effects on anything.

When systemd USE flag is not set, now automatically enables starting
of pipewire-pulse and pipewire-media-session binaries, since most
people installing PipeWire will want to do that anyway.
Adds instructions to inform users of the change and directs them to
Gentoo Wiki with details specific to their setups.

Always disables FFmpeg and Vulkan, and removes the respective IUSE,
and comments out their *DEPEND, because Vulkan feature is only
useful to developers, and FFmpeg code has had no major developments
since May 2020 - upstream disables both by default.

Removes dead code that no longer was doing anything and correctly
adds RDEPEND on supported Bluetooth audio codecs with the associated
IUSE flags. As well as adds RDEPEND on sys-libs/ncurses[unicode] that
was previously missing and ensures that disabled libsndfile IUSE does
not silently disable building of the pw-cat tool, leading to surprising
mismatch between upstream documentation and actually installed binaries.

Also turns the warning about failed mlock(), that upstream now disables,
back on - to known for sure that 256k is really enough for everyone.

Closes: https://bugs.gentoo.org/777288
Closes: https://bugs.gentoo.org/777837
Closes: https://bugs.gentoo.org/779058
Signed-off-by: Niklāvs Koļesņikovs <89q1r14hd <AT> relay.firefox.com>
Closes: https://github.com/gentoo/gentoo/pull/19965
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 media-video/pipewire/Manifest                      |   1 +
 ...pewire-0.3.25-enable-failed-mlock-warning.patch |  12 ++
 .../files/pipewire-0.3.25-fix-docdir-path.patch    |  32 +++
 .../pipewire-0.3.25-non-systemd-integration.patch  |  18 ++
 media-video/pipewire/metadata.xml                  |  13 +-
 media-video/pipewire/pipewire-0.3.25.ebuild        | 236 +++++++++++++++++++++
 6 files changed, 310 insertions(+), 2 deletions(-)

diff --git a/media-video/pipewire/Manifest b/media-video/pipewire/Manifest
index 5a7bf23034c..ea27a64762d 100644
--- a/media-video/pipewire/Manifest
+++ b/media-video/pipewire/Manifest
@@ -1,3 +1,4 @@
 DIST pipewire-0.3.18.tar.gz 1277055 BLAKE2B 
4a18bd668afaf144d6e83590293a744b6d2c2a7d8e9fc6ab581f22d294fac5a4841098875f8569f36b794c083e4ec9f0b7d4e29a10dc79286a4843996f7fb64e
 SHA512 
933b15908e30c389555dd9f82f87c2e571b4cb078bfbe5ed1858440166093cdee2b1c15da50bc5ab36087b62e216786b95c2aad9403e5047ae33e4fe8a6f4cc5
 DIST pipewire-0.3.22.tar.gz 1263844 BLAKE2B 
3fb90c0b1c17ed108e8c390873f5c4527e1ff9241d1c5964ad5b7c01fbfefda901ef1228f178cf3c9899e6e8e75969a470f8fba63473ff203cba612c6c0553ca
 SHA512 
a6587e0afd5c90be1733ecf62c6fc68e735ab3b84f2cbbf844bbe1be93e7a23dee07b041ed6b273cab6ab207d2388ae6f2027d0380928555a0155a7cc9ca4a7e
 DIST pipewire-0.3.24.tar.gz 1333048 BLAKE2B 
3146084e3028ed7bf27d483666e07d76c45988a911bba70bd31656ed75847fceb5c306a95bc3515cae9208f9b3cd9e9aaab56ee1de154a7520f669887e77fc6b
 SHA512 
be1fd3b15aae4fc276dd7e4be385cd58e6e9626d6e0a42b7bc3eb46ba324759c05320547aa857510ecf24b1628b76555222d342350d6406ad4d7b536cb3db497
+DIST pipewire-0.3.25.tar.gz 1351257 BLAKE2B 
3c4d6d98e3255df8baf50eb548bcf77b5c027a50f6acedd83cd63481ed5b642c174589f34314f150b07116cea8a3458c3f8b770df4081585d7f75cc8dde4decd
 SHA512 
0f84be21bfcd70f25900c53a8ce399c29ce2d4d10f8b56e5103603cf0c80673aab0b16492e55b42985283adf46343cdca01626225db85a2263f06c309f68f2d7

diff --git 
a/media-video/pipewire/files/pipewire-0.3.25-enable-failed-mlock-warning.patch 
b/media-video/pipewire/files/pipewire-0.3.25-enable-failed-mlock-warning.patch
new file mode 100644
index 00000000000..bdb43fe551d
--- /dev/null
+++ 
b/media-video/pipewire/files/pipewire-0.3.25-enable-failed-mlock-warning.patch
@@ -0,0 +1,12 @@
+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

diff --git a/media-video/pipewire/files/pipewire-0.3.25-fix-docdir-path.patch 
b/media-video/pipewire/files/pipewire-0.3.25-fix-docdir-path.patch
new file mode 100644
index 00000000000..9c7a55c95e2
--- /dev/null
+++ b/media-video/pipewire/files/pipewire-0.3.25-fix-docdir-path.patch
@@ -0,0 +1,32 @@
+diff --git a/doc/meson.build b/doc/meson.build
+index 05c7ed35..ce9b52ea 100644
+--- a/doc/meson.build
++++ b/doc/meson.build
+@@ -24,11 +24,14 @@ doxyfile = configure_file(input: 'Doxyfile.in',
+                           output: 'Doxyfile',
+                           configuration: doxyfile_conf)
+ 
+-docdir = join_paths(pipewire_datadir, 'doc')
++docdir = get_option('docdir')
++if docdir == ''
++  docdir = join_paths(pipewire_datadir, 'doc', meson.project_name())
++endif
+ 
+ html_target = custom_target('pipewire-docs',
+                             input: [ doxyfile ],
+                             output: [ 'html' ],
+                             command: [ doxygen, doxyfile ],
+                             install: true,
+-                            install_dir: join_paths(docdir, 'pipewire'))
++                            install_dir: docdir)
+diff --git a/meson_options.txt b/meson_options.txt
+index 858283f2..d51e693f 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,3 +1,6 @@
++option('docdir',
++      type : 'string',
++      description : 'Directory for installing documentation to (defaults to 
pipewire_datadir/doc/meson.project_name() )')
+ option('docs',
+        description: 'Build documentation',
+        type: 'feature',

diff --git 
a/media-video/pipewire/files/pipewire-0.3.25-non-systemd-integration.patch 
b/media-video/pipewire/files/pipewire-0.3.25-non-systemd-integration.patch
new file mode 100644
index 00000000000..51455a3b84b
--- /dev/null
+++ b/media-video/pipewire/files/pipewire-0.3.25-non-systemd-integration.patch
@@ -0,0 +1,18 @@
+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
+@@ -204,12 +204,12 @@ context.exec = [
+     # but it is better to start it as a systemd service.
+     # Run the session manager with -h for options.
+     #
+-    @comment@{ path = "@media_session_path@"  args = "" }
++    { path = "@media_session_path@"  args = "" }
+     #
+     # You can optionally start the pulseaudio-server here as well
+     # but it is better to start it as a systemd service.
+     # It can be interesting to start another daemon here that listens
+     # on another address with the -a option (eg. -a tcp:4713).
+     #
+-    @comment@{ path = "@pipewire_path@" args = "-c pipewire-pulse.conf" }
++    { path = "@pipewire_path@" args = "-c pipewire-pulse.conf" }
+ ]

diff --git a/media-video/pipewire/metadata.xml 
b/media-video/pipewire/metadata.xml
index dc9635eee0f..bf701ae6531 100644
--- a/media-video/pipewire/metadata.xml
+++ b/media-video/pipewire/metadata.xml
@@ -10,11 +10,20 @@
                <name>Andreas Sturmlechner</name>
        </maintainer>
        <upstream>
-               <remote-id type="github">PipeWire/pipewire</remote-id>
+               
<bugs-to>https://gitlab.freedesktop.org/pipewire/pipewire/-/issues</bugs-to>
+               
<changelog>https://gitlab.freedesktop.org/pipewire/pipewire/-/releases</changelog>
+               
<doc>https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home</doc>
        </upstream>
        <use>
+               <flag name="aac">AAC over Bluetooth (iPhone compatible 
headphones)</flag>
+               <flag name="aptx">aptX (HD) over Bluetooth (many Android 
compatible headphones)</flag>
+               <flag name="extra">Build pw-cat/pw-play/pw-record</flag>
+               <flag name="ffmpeg">Builds an unsupported SPA (file a Gentoo 
bug if you need this)</flag>
                <flag name="jack">Enable SPA JACK plugin and emulation to be 
able to run JACK applications on top of PipeWire</flag>
+               <flag name="jack-client">Install a plugin for running PipeWire 
as a JACK client</flag>
+               <flag name="ldac">LDAC over Bluetooth (primarily Sony 
headphones)</flag>
+               <flag name="pipewire-alsa">Replace PulseAudio's ALSA plugin 
with PipeWire's plugin</flag>
                <flag name="pulseaudio">Enable emulation to be able to run 
PulseAudio applications on top of PipeWire</flag>
-               <flag name="vulkan">Enable vulkan spa plugin integration</flag>
+               <flag name="vulkan">Uses Vulkan compute shaders to provide a 
CGI video source</flag>
        </use>
 </pkgmetadata>

diff --git a/media-video/pipewire/pipewire-0.3.25.ebuild 
b/media-video/pipewire/pipewire-0.3.25.ebuild
new file mode 100644
index 00000000000..480acc4c292
--- /dev/null
+++ b/media-video/pipewire/pipewire-0.3.25.ebuild
@@ -0,0 +1,236 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit meson optfeature udev
+
+if [[ ${PV} == 9999 ]]; then
+       EGIT_REPO_URI="https://gitlab.freedesktop.org/${PN}/${PN}.git";
+#      EGIT_BRANCH="master"
+       inherit git-r3
+else
+       
SRC_URI="https://gitlab.freedesktop.org/${PN}/${PN}/-/archive/${PV}/${P}.tar.gz";
+       KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86"
+fi
+
+DESCRIPTION="Multimedia processing graphs"
+HOMEPAGE="https://pipewire.org/";
+
+LICENSE="LGPL-2.1+"
+SLOT="0/0.3"
+IUSE="aac aptx bluetooth doc extra gstreamer jack-client ldac pipewire-alsa 
systemd test v4l"
+
+# 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)!
+
+REQUIRED_USE="
+       aac? ( bluetooth )
+       aptx? ( bluetooth )
+       ldac? ( bluetooth )
+"
+
+BDEPEND="
+       app-doc/xmltoman
+       doc? (
+               app-doc/doxygen
+               media-gfx/graphviz
+       )
+"
+RDEPEND="
+       media-libs/alsa-lib
+       sys-apps/dbus
+       sys-libs/ncurses[unicode]
+       virtual/libudev
+       bluetooth? (
+               aac? ( media-libs/fdk-aac )
+               aptx? ( media-libs/libopenaptx )
+               ldac? ( media-libs/libldac )
+               media-libs/sbc
+               >=net-wireless/bluez-4.101:=
+       )
+       extra? (
+               >=media-libs/libsndfile-1.0.20
+       )
+       gstreamer? (
+               >=dev-libs/glib-2.32.0:2
+               >=media-libs/gstreamer-1.10.0:1.0
+               media-libs/gst-plugins-base:1.0
+       )
+       jack-client? ( >=media-sound/jack2-1.9.10:2[dbus] )
+       pipewire-alsa? (
+               >=media-libs/alsa-lib-1.1.7
+               || (
+                       media-plugins/alsa-plugins[-pulseaudio]
+                       !media-plugins/alsa-plugins
+               )
+       )
+       !pipewire-alsa? ( media-plugins/alsa-plugins[pulseaudio] )
+       systemd? ( sys-apps/systemd )
+       v4l? ( media-libs/libv4l )
+"
+
+DEPEND="${RDEPEND}"
+
+# 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-video/ffmpeg:=
+#      media-libs/libsdl2
+#      >=media-libs/vulkan-loader-1.1.69
+#
+# Ditto for DEPEND
+#      >=dev-util/vulkan-headers-1.1.69
+
+DOCS=( {README,INSTALL}.md NEWS )
+
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-0.3.25-fix-docdir-path.patch
+       "${FILESDIR}"/${PN}-0.3.25-enable-failed-mlock-warning.patch
+)
+
+# limitsdfile related code taken from =sys-auth/realtime-base-0.1
+# with changes as necessary.
+limitsdfile=40-${PN}.conf
+
+src_prepare() {
+       default
+
+       if ! use systemd; then
+               # This can be applied non-conditionally but would make for a
+               # significantly worse user experience on systemd then.
+               eapply "${FILESDIR}"/${PN}-0.3.25-non-systemd-integration.patch
+       fi
+}
+
+src_configure() {
+       local emesonargs=(
+               -Ddocdir="${EPREFIX}"/usr/share/doc/${PF}
+               $(meson_feature doc docs)
+               -Dexamples=enabled # Disabling this implicitly disables 
-Dmedia-session (not good)
+               -Dmedia-session=enabled
+               -Dman=enabled
+               $(meson_feature test tests)
+               -Dinstalled_tests=disabled # Matches upstream; Gentoo never 
installs tests
+               $(meson_feature gstreamer)
+               $(meson_feature gstreamer gstreamer-device-provider)
+               $(meson_feature systemd) # Also covers logind integration
+               -Dsystemd-system-service=disabled # Matches upstream
+               $(meson_feature systemd systemd-user-service)
+               $(meson_feature pipewire-alsa) # Allows integrating ALSA apps 
into PW graph
+               -Dpipewire-jack=enabled # Allows integrating JACK apps into PW 
graph
+               #-Dlibjack-path="" # Where to install libjack.so et al (if an 
absolute path is used, remember to prefix it with ${EROOT} or similar!); 
setting this will also break pw-jack's multilib support (but presumably that's 
okay as the intended use would be to replace system's libraries making the 
loader irrelevant)
+               -Dspa-plugins=enabled
+               -Dalsa=enabled # Allows using kernel ALSA for sound I/O 
(-Dmedia-session depends on this)
+               -Daudiomixer=enabled # Matches upstream
+               -Daudioconvert=enabled # Matches upstream
+               $(meson_feature bluetooth bluez5)
+               $(meson_feature bluetooth bluez5-backend-hsp-native)
+               $(meson_feature bluetooth bluez5-backend-hfp-native)
+               $(meson_feature bluetooth bluez5-backend-ofono)
+               $(meson_feature bluetooth bluez5-backend-hsphfpd)
+               $(meson_feature aac bluez5-codec-aac)
+               $(meson_feature aptx bluez5-codec-aptx)
+               $(meson_feature ldac bluez5-codec-ldac)
+               -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_feature jack-client jack) # Allows PW to act as a JACK 
client
+               -Dsupport=enabled # Miscellaneous/common plugins, such as null 
sink
+               -Devl=disabled # Matches upstream
+               -Dtest=disabled # fakesink and fakesource plugins
+               $(meson_feature v4l v4l2)
+               -Dlibcamera=disabled # libcamera is not in Portage tree
+               -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_feature extra pw-cat)
+               -Dudev=enabled
+               -Dudevrulesdir="$(get_udevdir)/rules.d"
+               -Dsdl2=disabled # Controls SDL2 dependent code (currently only 
examples when -Dinstalled_tests=enabled which we never install)
+               $(meson_feature extra sndfile) # Enables libsndfile dependent 
code (currently only pw-cat)
+       )
+       meson_src_configure
+}
+
+src_compile() {
+       meson_src_compile
+
+       einfo "Generating ${limitsdfile}"
+       cat > ${limitsdfile} <<- EOF || die
+               # Start of ${limitsdfile} from ${P}
+
+               1000:60000      -       memlock 256
+
+               # End of ${limitsdfile} from ${P}
+       EOF
+}
+
+src_install() {
+       meson_src_install
+
+       insinto /etc/security/limits.d
+       doins ${limitsdfile}
+
+       if use pipewire-alsa; then
+               dodir /etc/alsa/conf.d
+               # These will break if someone has /etc that is a symbol 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.conf 
/etc/alsa/conf.d/99-pipewire-default.conf
+       fi
+}
+
+pkg_postinst() {
+       if ! use pipewire-alsa; then
+               elog "Contrary to what some online resources may suggest, avoid 
setting"
+               elog "PULSE_LATENCY_MSEC environment variable since it may 
break ALSA clients."
+               elog
+       fi
+
+       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
+
+       if use systemd; then
+               elog "Per Gentoo policy installed systemd units must be 
manually enabled:"
+               elog "systemctl --user disable pulseaudio.service 
pulseaudio.socket"
+               elog "systemctl --user enable pipewire.socket 
pipewire-pulse.socket"
+               elog "Rebooting is strongly recommended to avoid surprises from"
+               elog "remnant PulseAudio daemon auto-spawning and surviving 
logouts."
+               elog
+               ewarn "Both new users and those upgrading need to enable 
pipewire-media-session:"
+               ewarn "systemctl --user enable pipewire-media-session.service"
+       else
+               elog "This ebuild auto-enables PulseAudio replacement. Because 
of that users"
+               elog "are recommended to edit: ${EROOT}/etc/pulse/client.conf 
and disable "
+               elog "autospawn'ing of the original daemon by setting:"
+               elog "autospawn = no"
+               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}/etc/pipewire/pipewire.conf"
+               elog "by commenting out the relevant command near the end of 
the file:"
+               elog "#\"/usr/bin/pipewire\" = { args = \"-c 
pipewire-pulse.conf\" }"
+               elog
+               elog "It is still necessary to manually enable PipeWire 
startup. Setup specific"
+               elog "instructions can be found at: 
https://wiki.gentoo.org/wiki/PipeWire";
+       fi
+
+       optfeature_header "The following can be installed for optional runtime 
features:"
+       optfeature "restricted realtime capabilities vai D-Bus" sys-auth/rtkit
+       # Once hsphfpd lands in tree, both it and ofono will need to be checked 
for presence here!
+       if use bluetooth; then
+               optfeature "better BT headset support (daemon startup 
required)" net-misc/ofono
+               #optfeature "an oFono alternative (not packaged)" 
foo-bar/hsphfpd
+       fi
+}

Reply via email to