public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: media-video/wireplumber/files/, media-video/wireplumber/
Date: Sat, 15 Mar 2025 19:01:37 +0000 (UTC)	[thread overview]
Message-ID: <1742065271.1b7d1b1ecbe76a30c9487c77f7ecad0084e7d832.sam@gentoo> (raw)

commit:     1b7d1b1ecbe76a30c9487c77f7ecad0084e7d832
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 15 19:01:00 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Mar 15 19:01:11 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1b7d1b1e

media-video/wireplumber: backport crash fixes

Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/wireplumber-0.5.8-custom-lua-crash.patch |  72 +++++++++++
 .../files/wireplumber-0.5.8-mem-leak.patch         |  28 +++++
 .../files/wireplumber-0.5.8-vaargs.patch           |  50 ++++++++
 .../wireplumber/wireplumber-0.5.8-r2.ebuild        | 137 +++++++++++++++++++++
 4 files changed, 287 insertions(+)

diff --git a/media-video/wireplumber/files/wireplumber-0.5.8-custom-lua-crash.patch b/media-video/wireplumber/files/wireplumber-0.5.8-custom-lua-crash.patch
new file mode 100644
index 000000000000..92358ded7b0f
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.5.8-custom-lua-crash.patch
@@ -0,0 +1,72 @@
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/32d2abdf34c987df24ba3b073159ea4eee2edf73
+
+From 32d2abdf34c987df24ba3b073159ea4eee2edf73 Mon Sep 17 00:00:00 2001
+From: George Kiagiadakis <george.kiagiadakis@collabora.com>
+Date: Thu, 13 Feb 2025 16:06:29 +0200
+Subject: [PATCH] internal-comp-loader: generate a "provides" for components
+ that don't have one
+
+It is valid for components not to have a "provides" field, but it
+prevents them from being able to have "before" and "after" dependencies.
+With this patch, we generate a hidden "provides" field so that the
+dependencies sorting algorithm can work without issues.
+
+Fixes: #771
+---
+ lib/wp/private/internal-comp-loader.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/lib/wp/private/internal-comp-loader.c b/lib/wp/private/internal-comp-loader.c
+index 45877eb7..842c6934 100644
+--- a/lib/wp/private/internal-comp-loader.c
++++ b/lib/wp/private/internal-comp-loader.c
+@@ -28,7 +28,7 @@ struct _ComponentData
+   grefcount ref;
+   /* an identifier for this component that is understandable by the end user */
+   gchar *printable_id;
+-  /* the provided feature name or NULL */
++  /* the provided feature name */
+   gchar *provides;
+   /* the original state of the feature (required / optional / disabled) */
+   FeatureState state;
+@@ -205,7 +205,7 @@ component_data_new_from_json (WpSpaJson * json, WpProperties * features,
+       comp->printable_id = g_strdup_printf ("%s [%s]", comp->provides, comp->type);
+     }
+   } else {
+-    comp->provides = NULL;
++    comp->provides = g_strdup_printf ("__anonymous_%p", comp);
+     comp->state = FEATURE_STATE_REQUIRED;
+     comp->printable_id = g_strdup_printf ("[%s: %s]", comp->type, comp->name);
+   }
+@@ -328,7 +328,7 @@ wp_component_array_load_task_get_next_step (WpTransition * transition, guint ste
+ static gboolean
+ component_equals (const ComponentData * comp, const gchar * provides)
+ {
+-  return (comp->provides && g_str_equal (provides, comp->provides));
++  return g_str_equal (provides, comp->provides);
+ }
+ 
+ static inline gboolean
+@@ -358,7 +358,7 @@ sort_components_before_after (WpComponentArrayLoadTask * self, GError ** error)
+       gchar *target_provides = g_ptr_array_index (comp->before, j);
+       for (guint k = 0; k < self->components->len; k++) {
+         ComponentData *target = g_ptr_array_index (self->components, k);
+-        if (target->provides && g_str_equal (target_provides, target->provides)) {
++        if (g_str_equal (target_provides, target->provides)) {
+           g_ptr_array_insert (target->after, -1, g_strdup (comp->provides));
+         }
+       }
+@@ -531,9 +531,8 @@ parse_components (WpComponentArrayLoadTask * self, GError ** error)
+     if (comp->state == FEATURE_STATE_REQUIRED)
+       g_ptr_array_add (required_components, component_data_ref (comp));
+ 
+-    if (comp->provides)
+-      g_hash_table_insert (self->feat_components, comp->provides,
+-          component_data_ref (comp));
++    g_hash_table_insert (self->feat_components, comp->provides,
++        component_data_ref (comp));
+   }
+ 
+   /* topological sorting based on depth-first search */
+-- 
+GitLab

diff --git a/media-video/wireplumber/files/wireplumber-0.5.8-mem-leak.patch b/media-video/wireplumber/files/wireplumber-0.5.8-mem-leak.patch
new file mode 100644
index 000000000000..24d6c4c426d0
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.5.8-mem-leak.patch
@@ -0,0 +1,28 @@
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/f3bc7168edeac015154feda01698a9c10f68e1b1
+
+From f3bc7168edeac015154feda01698a9c10f68e1b1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= <pobrn@protonmail.com>
+Date: Wed, 19 Feb 2025 18:34:58 +0100
+Subject: [PATCH] wpctl: fix default device name leak
+
+The `get-default-configured-node-name` handler returns a copy
+of the name of the node, hence it must be freed.
+---
+ src/tools/wpctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tools/wpctl.c b/src/tools/wpctl.c
+index 9f507eca..38d730c8 100644
+--- a/src/tools/wpctl.c
++++ b/src/tools/wpctl.c
+@@ -529,7 +529,7 @@ status_run (WpCtl * self)
+   printf (TREE_INDENT_END "Default Configured Devices:\n");
+   if (def_nodes_api) {
+     for (guint i = 0; i < G_N_ELEMENTS (DEFAULT_NODE_MEDIA_CLASSES); i++) {
+-      const gchar *name = NULL;
++      g_autofree gchar *name = NULL;
+       g_signal_emit_by_name (def_nodes_api, "get-default-configured-node-name",
+           DEFAULT_NODE_MEDIA_CLASSES[i], &name);
+       if (name)
+-- 
+GitLab

diff --git a/media-video/wireplumber/files/wireplumber-0.5.8-vaargs.patch b/media-video/wireplumber/files/wireplumber-0.5.8-vaargs.patch
new file mode 100644
index 000000000000..c047ecf7c026
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.5.8-vaargs.patch
@@ -0,0 +1,50 @@
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/5846d12ea156c961772a44163a42987ef35c1ab6
+
+From 5846d12ea156c961772a44163a42987ef35c1ab6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= <pobrn@protonmail.com>
+Date: Tue, 18 Feb 2025 19:57:22 +0100
+Subject: [PATCH] wpctl: fix types in variadic arguments
+
+`wp_object_manager_add_interest()` passes the format string
+and the arguments after that to `g_variant_new()`, which
+requires a 32-bit integer for "u". Passing a 64-bit integer
+will cause problems on certain ABIs.
+
+Furthermore, remove the metadata related interest declaration
+from `set_default_prepare()` since the "set-default" command
+does not access metadata directly, it uses the "default-nodes-api"
+plugin.
+
+Fixes: 7784cfad92cfa4 ("wpctl: support @DEFAULT_{AUDIO,VIDEO}_{SINK,SOURCE}@ as ID ")
+Fixes #773
+---
+ src/tools/wpctl.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/tools/wpctl.c b/src/tools/wpctl.c
+index 38d730c8..0e671109 100644
+--- a/src/tools/wpctl.c
++++ b/src/tools/wpctl.c
+@@ -753,7 +753,7 @@ inspect_print_object (WpCtl * self, WpProxy * proxy, guint nest_level)
+     if (cmdline.inspect.show_referenced && nest_level == 0 &&
+         key_is_object_reference (prop_item->key))
+     {
+-      guint id = (guint) strtol (prop_item->value, NULL, 10);
++      guint32 id = (guint32) strtol (prop_item->value, NULL, 10);
+       g_autoptr (WpProxy) refer_proxy =
+           wp_object_manager_lookup (self->om, WP_TYPE_GLOBAL_PROXY,
+               WP_CONSTRAINT_TYPE_G_PROPERTY, "bound-id", "=u", id, NULL);
+@@ -833,10 +833,8 @@ set_default_prepare (WpCtl * self, GError ** error)
+ {
+   wp_object_manager_add_interest (self->om, WP_TYPE_NODE,
+       WP_CONSTRAINT_TYPE_PW_GLOBAL_PROPERTY,
+-      "object.id", "=u", cmdline.set_default.id,
++      "object.id", "=u", (guint32) cmdline.set_default.id,
+       NULL);
+-  wp_object_manager_request_object_features (self->om, WP_TYPE_METADATA,
+-      WP_OBJECT_FEATURES_ALL);
+   wp_object_manager_request_object_features (self->om, WP_TYPE_NODE,
+       WP_PIPEWIRE_OBJECT_FEATURES_MINIMAL);
+   return TRUE;
+-- 
+GitLab

diff --git a/media-video/wireplumber/wireplumber-0.5.8-r2.ebuild b/media-video/wireplumber/wireplumber-0.5.8-r2.ebuild
new file mode 100644
index 000000000000..6647fd71c2e6
--- /dev/null
+++ b/media-video/wireplumber/wireplumber-0.5.8-r2.ebuild
@@ -0,0 +1,137 @@
+# 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/wireplumber/tree/rawhide
+#
+# 2. 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.
+
+LUA_COMPAT=( lua5-{3,4} )
+
+inherit lua-single meson systemd
+
+DESCRIPTION="Replacement for pipewire-media-session"
+HOMEPAGE="https://gitlab.freedesktop.org/pipewire/wireplumber"
+
+if [[ ${PV} == 9999 ]]; then
+	EGIT_REPO_URI="https://gitlab.freedesktop.org/pipewire/${PN}.git"
+	EGIT_BRANCH="master"
+	inherit git-r3
+else
+	SRC_URI="https://gitlab.freedesktop.org/pipewire/${PN}/-/archive/${PV}/${P}.tar.bz2"
+	KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+LICENSE="MIT"
+SLOT="0/0.5"
+IUSE="elogind system-service systemd test"
+
+REQUIRED_USE="
+	${LUA_REQUIRED_USE}
+	?? ( elogind systemd )
+	system-service? ( systemd )
+"
+
+RESTRICT="!test? ( test )"
+
+# introspection? ( dev-libs/gobject-introspection ) is valid but likely only used for doc building
+BDEPEND="
+	dev-libs/glib
+	dev-util/gdbus-codegen
+	dev-util/glib-utils
+	sys-devel/gettext
+	test? ( sys-apps/dbus )
+"
+DEPEND="
+	${LUA_DEPS}
+	>=dev-libs/glib-2.68
+	>=media-video/pipewire-1.0.5-r1:=
+	virtual/libintl
+	elogind? ( sys-auth/elogind )
+	systemd? ( sys-apps/systemd )
+"
+RDEPEND="
+	${DEPEND}
+	system-service? (
+		acct-user/pipewire
+		acct-group/pipewire
+	)
+"
+
+DOCS=( {NEWS,README}.rst )
+
+PATCHES=(
+	# Defer enabling sound server parts to media-video/pipewire
+	# TODO: Soon, we should be able to migrate to just a dropin at
+	# /usr/share. See https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/652#note_2399735.
+	"${FILESDIR}"/${PN}-0.5.6-config-disable-sound-server-parts.patch
+	# Backports
+	"${FILESDIR}"/${P}-custom-lua-crash.patch
+	"${FILESDIR}"/${P}-mem-leak.patch
+	"${FILESDIR}"/${P}-vaargs.patch
+)
+
+src_configure() {
+	local emesonargs=(
+		-Ddaemon=true
+		-Dtools=true
+		-Dmodules=true
+		# Ebuild not wired up yet (Sphinx, Doxygen?)
+		-Ddoc=disabled
+		# Only used for Sphinx doc generation
+		-Dintrospection=disabled
+		-Dsystem-lua=true
+		-Dsystem-lua-version=$(ver_cut 1-2 $(lua_get_version))
+		$(meson_feature elogind)
+		$(meson_feature systemd)
+		$(meson_use system-service systemd-system-service)
+		$(meson_use systemd systemd-user-service)
+		-Dsystemd-system-unit-dir=$(systemd_get_systemunitdir)
+		-Dsystemd-user-unit-dir=$(systemd_get_userunitdir)
+		$(meson_use test tests)
+		$(meson_use test dbus-tests)
+	)
+
+	meson_src_configure
+}
+
+src_install() {
+	meson_src_install
+
+	exeinto /etc/user/init.d
+	newexe "${FILESDIR}"/wireplumber.initd wireplumber
+
+	mv "${ED}"/usr/share/doc/wireplumber/* "${ED}"/usr/share/doc/${PF} || die
+	rmdir "${ED}"/usr/share/doc/wireplumber || die
+}
+
+pkg_postinst() {
+	if systemd_is_booted ; then
+		ewarn "pipewire-media-session.service is no longer installed. You must switch"
+		ewarn "to wireplumber.service user unit before your next logout/reboot:"
+		ewarn "systemctl --user disable pipewire-media-session.service"
+		ewarn "systemctl --user --force enable wireplumber.service"
+	else
+		ewarn "Switch to WirePlumber will happen the next time gentoo-pipewire-launcher"
+		ewarn "is started (a replacement for directly calling pipewire binary)."
+		ewarn
+		ewarn "Please ensure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist"
+		ewarn "or, if it does exist, that any reference to"
+		ewarn "${EROOT}/usr/bin/pipewire-media-session is commented out (begins with a #)."
+	fi
+
+	if use system-service; then
+		ewarn
+		ewarn "WARNING: you have enabled the system-service USE flag, which installs"
+		ewarn "the system-wide systemd units that enable WirePlumber 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"
+		ewarn "box, and you are on your own with configuration."
+		ewarn
+	fi
+}


             reply	other threads:[~2025-03-15 19:01 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-15 19:01 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-09-16  4:42 [gentoo-commits] repo/gentoo:master commit in: media-video/wireplumber/files/, media-video/wireplumber/ Sam James
2024-09-13  2:10 Sam James
2024-03-19  5:48 Sam James
2022-12-10  4:36 Sam James
2022-08-26 10:51 Sam James
2022-07-19 21:22 Sam James
2022-05-30  4:46 Sam James
2022-05-13  0:41 Sam James
2022-04-21 21:57 Sam James
2022-04-21 21:57 Sam James
2022-02-14 20:08 Sam James
2022-02-12  5:17 Sam James
2022-01-09  7:56 Sam James
2022-01-06 20:53 Sam James
2021-12-01 19:49 Sam James
2021-09-15 17:06 Sam James

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1742065271.1b7d1b1ecbe76a30c9487c77f7ecad0084e7d832.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox