From 2a7616729318f88506fb512e134f7621f6c3bac8 Mon Sep 17 00:00:00 2001 From: Gerben Jan Dijkman Date: Thu, 4 Jul 2024 17:15:21 +0200 Subject: [PATCH] Version bump --- media-video/pipewire/Manifest | 4 + .../pipewire-1.0.7-automagic-gsettings.patch | 80 ++++++++++++++++ ....7-automagic-webrtc-audio-processing.patch | 95 +++++++++++++++++++ .../pipewire-1.2.0-automagic-gsettings.patch | 79 +++++++++++++++ ...0.7-r1.ebuild => pipewire-1.2.0-r1.ebuild} | 21 +++- 5 files changed, 276 insertions(+), 3 deletions(-) create mode 100644 media-video/pipewire/files/pipewire-1.0.7-automagic-gsettings.patch create mode 100644 media-video/pipewire/files/pipewire-1.0.7-automagic-webrtc-audio-processing.patch create mode 100644 media-video/pipewire/files/pipewire-1.2.0-automagic-gsettings.patch rename media-video/pipewire/{pipewire-1.0.7-r1.ebuild => pipewire-1.2.0-r1.ebuild} (97%) diff --git a/media-video/pipewire/Manifest b/media-video/pipewire/Manifest index a312c5d..accc314 100644 --- a/media-video/pipewire/Manifest +++ b/media-video/pipewire/Manifest @@ -1,2 +1,6 @@ DIST pipewire-1.0.0-docs.tar.xz 33632 BLAKE2B be06aa7242f7d2f8627b3bf2a2ae491dbda456a24811a767218eb89b1fd5961a461697e5d8ae2782323fdb927985fa4fd5dd40c21268b1c7939f4cd3c9e1a9ab SHA512 14f794c4152d7d9a4a7d9d4d5c2ff381c2a8262deaff034f993c4d28629fca8cc3d71d3a7c02982703e449fae5f58257fea0c20db02bf95b5aed88a4d99d2c58 +DIST pipewire-1.0.5.tar.bz2 1698291 BLAKE2B 0f919a01b5f84060fb2ce560a7790a0d59374671f52a941492930fe21ac39178688f27f00cad649d239901f88b392e16895648efae2ec2785c394c1f6d186ddf SHA512 18fbbe36c8752eb0f1df5ee3f3fffee279addcec9825281bd165ad8316f17af7e91bb5759f63c16139c074b03e5a77ef9d596a87f584d1580bbb754101b70a0f +DIST pipewire-1.0.6.tar.bz2 1698889 BLAKE2B f782efa2aa8fa0976fd3025f58041f450505c63acd9028c3d79368d0c41465a51b4472059a1c13092aa72dc6110fc12589b03de653d7eac3c93bc5498cc17154 SHA512 09e5c951c835dcc2654ec284aaaad6be4254744e943f95556c494cd22a4fc67bdc481982856f2aa439e33ec84e7fbdb6df45a1d4b9ced261b01cd91b0ee4d2ed DIST pipewire-1.0.7.tar.bz2 1698775 BLAKE2B be075eb82fe516116de0a6a4d390dd99d7ea3b41e53c9079219978649845df4e9c16cb8e2dcfe594c2ace65fe63976ec432e9ce97eb048df5103d17f3e8ff353 SHA512 3fb46376cdf061b3ea7be55249399d0036c2728bb4deeb6f5c6d708141234e75f563e6a3dc749fbd40dadba72ad2db5fda358b368a480479157731cc67f3303d +DIST pipewire-1.2.0-docs.tar.xz 58528 BLAKE2B b7abdfecd46239050ab80695c8f3d1a4e6a2aded3f9d64c435c64c7dc54a4e6ae32c3526da0fb4f6e2a22a6dbc8c768450ac2c0824b685022284eb1e1990c038 SHA512 25792090f258acc6cd52231be3918f0edaefeeb6c757acc748710a2e6f40ff7861a44e376dc9651742173c40153d3f848c9532257036ab874940270559d9c7f3 +DIST pipewire-1.2.0.tar.bz2 1810104 BLAKE2B a20caae515d800f80f607aeba585609ce9f47d0a38c48cc2eb3534f64049f774c119e36d27a585b5f7537e4eef6b2a56881e7db1e2ca2eedd52248ee9f331209 SHA512 3b9ceb02d3ea9fcadd2e009750d0c5b2435c8648c79f2fa9dc8dc83c772759985b140a02381a6c7be819b23d2a5a7671e456e81cf9b5be3437e994ef610bda59 diff --git a/media-video/pipewire/files/pipewire-1.0.7-automagic-gsettings.patch b/media-video/pipewire/files/pipewire-1.0.7-automagic-gsettings.patch new file mode 100644 index 0000000..bde229b --- /dev/null +++ b/media-video/pipewire/files/pipewire-1.0.7-automagic-gsettings.patch @@ -0,0 +1,80 @@ +From acc75b21f653873ec1da68bfa08f2945a8dd09d2 Mon Sep 17 00:00:00 2001 +From: Eli Schwartz +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 +--- + 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 + diff --git a/media-video/pipewire/files/pipewire-1.0.7-automagic-webrtc-audio-processing.patch b/media-video/pipewire/files/pipewire-1.0.7-automagic-webrtc-audio-processing.patch new file mode 100644 index 0000000..ac245dd --- /dev/null +++ b/media-video/pipewire/files/pipewire-1.0.7-automagic-webrtc-audio-processing.patch @@ -0,0 +1,95 @@ +From acd5bf60b9d4a35d00c90bfdca7f89e4ff4a4ff7 Mon Sep 17 00:00:00 2001 +From: Eli Schwartz +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 + diff --git a/media-video/pipewire/files/pipewire-1.2.0-automagic-gsettings.patch b/media-video/pipewire/files/pipewire-1.2.0-automagic-gsettings.patch new file mode 100644 index 0000000..ab102a6 --- /dev/null +++ b/media-video/pipewire/files/pipewire-1.2.0-automagic-gsettings.patch @@ -0,0 +1,79 @@ +From b5f031bc15524bbfde577290ad9bbadeab77ae8b Mon Sep 17 00:00:00 2001 +From: Eli Schwartz +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 + diff --git a/media-video/pipewire/pipewire-1.0.7-r1.ebuild b/media-video/pipewire/pipewire-1.2.0-r1.ebuild similarity index 97% rename from media-video/pipewire/pipewire-1.0.7-r1.ebuild rename to media-video/pipewire/pipewire-1.2.0-r1.ebuild index 9222464..dc5549d 100644 --- a/media-video/pipewire/pipewire-1.0.7-r1.ebuild +++ b/media-video/pipewire/pipewire-1.2.0-r1.ebuild @@ -23,7 +23,7 @@ EAPI=8 : ${PIPEWIRE_DOCS_PREBUILT:=1} PIPEWIRE_DOCS_PREBUILT_DEV=sam -PIPEWIRE_DOCS_VERSION=$(ver_cut 1-2).0 +PIPEWIRE_DOCS_VERSION="${PV}" # Default to generating docs (inc. man pages) if no prebuilt; overridden later PIPEWIRE_DOCS_USEFLAG="+man" PYTHON_COMPAT=( python3_{10..12} ) @@ -98,7 +98,7 @@ BDEPEND=" ) " # * While udev could technically be optional, it's needed for a number of options, -# and not really worth it, bug #877769. +# and not really worth it, bug #877769.libcamera # # * Supports both legacy webrtc-audio-processing:0 and new webrtc-audio-processing:1. # We depend on :1 as it prefers that, it's not legacy, and to avoid automagic. @@ -124,7 +124,7 @@ RDEPEND=" virtual/libusb:1 ) dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] ) - echo-cancel? ( media-libs/webrtc-audio-processing:1 ) + 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 ) @@ -176,6 +176,8 @@ PDEPEND=">=media-video/wireplumber-0.5.2" PATCHES=( "${FILESDIR}"/${PN}-0.3.25-enable-failed-mlock-warning.patch + # https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/2061 + "${FILESDIR}"/${P}-automagic-gsettings.patch "${FILESDIR}"/0001-Use-libcamera-by-default-if-it-s-found-and-supported.patch ) @@ -276,8 +278,21 @@ multilib_src_configure() { $(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 }