Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pipewire for openSUSE:Factory checked in at 2026-03-04 21:02:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pipewire (Old) and /work/SRC/openSUSE:Factory/.pipewire.new.561 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pipewire" Wed Mar 4 21:02:59 2026 rev:149 rq:1336021 version:1.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/pipewire/pipewire.changes 2026-02-24 15:38:21.901832334 +0100 +++ /work/SRC/openSUSE:Factory/.pipewire.new.561/pipewire.changes 2026-03-04 21:03:40.852623151 +0100 @@ -1,0 +2,25 @@ +Tue Mar 3 10:33:43 UTC 2026 - Antonio Larrosa <[email protected]> + +- Remove dependency on update-alternatives which is not really + used. This fixes pipewire for immutable systems (jsc#PED-15662). + +------------------------------------------------------------------- +Tue Mar 3 09:35:48 UTC 2026 - Antonio Larrosa <[email protected]> + +- Disable the ROC module for now since there's no ROC in + Tumbleweed. + +------------------------------------------------------------------- +Mon Mar 2 15:06:45 UTC 2026 - Antonio Larrosa <[email protected]> + +- Add patches from upstream: + * 0001-pulse-server-add-client-props-to-sink_input_source_output.patch + * 0002-module-protocol-native-Fix-socket-activation.patch + * 0003-modules-improve-error-reporting.patch + +------------------------------------------------------------------- +Wed Feb 25 11:24:00 UTC 2026 - Mx <[email protected]> + +- Build ROC module and add a module-roc subpackage. + +------------------------------------------------------------------- New: ---- 0001-pulse-server-add-client-props-to-sink_input_source_output.patch 0002-module-protocol-native-Fix-socket-activation.patch 0003-modules-improve-error-reporting.patch ----------(New B)---------- New:- Add patches from upstream: * 0001-pulse-server-add-client-props-to-sink_input_source_output.patch * 0002-module-protocol-native-Fix-socket-activation.patch New: * 0001-pulse-server-add-client-props-to-sink_input_source_output.patch * 0002-module-protocol-native-Fix-socket-activation.patch * 0003-modules-improve-error-reporting.patch New: * 0002-module-protocol-native-Fix-socket-activation.patch * 0003-modules-improve-error-reporting.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pipewire.spec ++++++ --- /var/tmp/diff_new_pack.6SGENY/_old 2026-03-04 21:03:41.564652581 +0100 +++ /var/tmp/diff_new_pack.6SGENY/_new 2026-03-04 21:03:41.568652747 +0100 @@ -38,6 +38,8 @@ %define with_webrtc_audio_processing 0 %endif +%bcond_with roc + %if 0%{?suse_version} > 1500 %bcond_without libcamera %else @@ -79,6 +81,9 @@ Source99: baselibs.conf # PATCH-FIX-OPENSUSE reduce-meson-dependency.patch Patch0: reduce-meson-dependency.patch +Patch1: 0001-pulse-server-add-client-props-to-sink_input_source_output.patch +Patch2: 0002-module-protocol-native-Fix-socket-activation.patch +Patch3: 0003-modules-improve-error-reporting.patch BuildRequires: docutils %if 0%{suse_version} > 1500 @@ -206,8 +211,6 @@ %package libjack-%{apiver_str} Summary: PipeWire libjack replacement libraries Group: Development/Libraries/C and C++ -Requires(post): update-alternatives -Requires(postun): update-alternatives # Since the pipewire-libjack package is sometimes completely replacing the # original jack libraries for some users we better make sure either they # are also installed or we completely replace them with the pipewire @@ -310,6 +313,24 @@ This package contains X11 bell support for PipeWire. +%if %{with roc} +%package module-roc +Summary: PipeWire media server ROC module +License: CECILL-C AND LGPL-2.1-or-later AND MIT AND MPL-2.0 + +BuildRequires: pkgconfig(libunwind) +BuildRequires: pkgconfig(libuv) +BuildRequires: pkgconfig(roc) +BuildRequires: pkgconfig(sox) +BuildRequires: pkgconfig(speexdsp) + +Requires: %{libpipewire} >= %{version}-%{release} +Requires: %{name} >= %{version}-%{release} + +%description module-roc +This package contains the ROC module for PipeWire. +%endif + %package spa-plugins-%{spa_ver_str} Summary: Plugins For PipeWire SPA Group: Productivity/Multimedia/Other @@ -484,7 +505,11 @@ %endif -Dlibsystemd=enabled \ -Dsystemd-user-unit-dir=%{_userunitdir} \ +%if %{with roc} + -Droc=enabled \ +%else -Droc=disabled \ +%endif %if %{with_vulkan} -Dvulkan=enabled \ %else @@ -555,10 +580,6 @@ echo %{_libdir}/pipewire-%{apiver}/jack/ > %{buildroot}%{_sysconfdir}/ld.so.conf.d/pipewire-jack-%{_arch}.conf mkdir -p %{buildroot}%{_sysconfdir}/alternatives -for wrapper in pw-jack ; do - mv %{buildroot}%{_bindir}/$wrapper %{buildroot}%{_bindir}/$wrapper-%{apiver} - ln -s -f %{_sysconfdir}/alternatives/$wrapper %{buildroot}%{_bindir}/$wrapper -done # rates config mkdir -p %{buildroot}%{_datadir}/pipewire/pipewire.conf.d @@ -579,11 +600,6 @@ ln -s ../pipewire.conf.avail/50-raop.conf \ %{buildroot}%{_datadir}/pipewire/pipewire.conf.d/50-raop.conf -for manpage in pw-jack ; do - mv %{buildroot}%{_mandir}/man1/$manpage.1 %{buildroot}%{_mandir}/man1/$manpage-%{apiver}.1 - ln -s -f %{_sysconfdir}/alternatives/$manpage.1%{ext_man} %{buildroot}%{_mandir}/man1/$manpage.1%{ext_man} -done - %fdupes -s %{buildroot}/%{_datadir}/doc/pipewire/html %find_lang %{name} %{name}.lang @@ -674,14 +690,9 @@ %postun -n %{libpipewire} -p /sbin/ldconfig %post libjack-%{apiver_str} -%{_sbindir}/update-alternatives --install %{_bindir}/pw-jack pw-jack %{_bindir}/pw-jack-%{apiver} 20 \ - --slave %{_mandir}/man1/pw-jack.1%{ext_man} pw-jack.1%{ext_man} %{_mandir}/man1/pw-jack-%{apiver}.1%{ext_man} /sbin/ldconfig %postun libjack-%{apiver_str} -if [ ! -e %{_bindir}/pw-jack-%{apiver} ] ; then - %{_sbindir}/update-alternatives --remove pw-jack %{_bindir}/pw-jack-%{apiver} -fi /sbin/ldconfig %files @@ -743,6 +754,9 @@ %exclude %{_libdir}/pipewire-%{apiver}/libpipewire-module-jackdbus-detect.so %exclude %{_libdir}/pipewire-%{apiver}/libpipewire-module-x11-bell.so %exclude %{_libdir}/pipewire-%{apiver}/libpipewire-module-protocol-pulse.so +%if %{with roc} +%exclude %{_libdir}/pipewire-%{apiver}/libpipewire-module-roc-*.so +%endif %dir %{_libdir}/pipewire-%{apiver}/v4l2/ %{_libdir}/pipewire-%{apiver}/v4l2/libpw-v4l2.so %dir %{_datadir}/alsa-card-profile/ @@ -756,11 +770,21 @@ %{_mandir}/man7/libpipewire-modules.7%{?ext_man} %{_mandir}/man7/libpipewire-module-*.7%{?ext_man} %exclude %{_mandir}/man7/libpipewire-module-x11-bell.7%{?ext_man} +%if %{with roc} +%exclude %{_mandir}/man7/libpipewire-module-roc-*.7%{?ext_man} +%endif %files module-x11-%{apiver_str} %{_libdir}/pipewire-%{apiver}/libpipewire-module-x11-bell.so %{_mandir}/man7/libpipewire-module-x11-bell.7%{?ext_man} +%if %{with roc} +%files module-roc +%{_libdir}/pipewire-%{apiver}/libpipewire-module-roc-sink.so +%{_libdir}/pipewire-%{apiver}/libpipewire-module-roc-source.so +%{_mandir}/man7/libpipewire-module-roc-*.7%{?ext_man} +%endif + %files spa-plugins-%{spa_ver_str} %dir %{_libdir}/spa-%{spa_ver}/ %{_libdir}/spa-%{spa_ver}/aec/ @@ -806,11 +830,7 @@ %{_libdir}/pipewire-%{apiver}/jack/libjack.so.* %{_libdir}/pipewire-%{apiver}/jack/libjacknet.so.* %{_libdir}/pipewire-%{apiver}/jack/libjackserver.so.* -%ghost %{_sysconfdir}/alternatives/pw-jack -%ghost %{_sysconfdir}/alternatives/pw-jack.1%{ext_man} -%{_bindir}/pw-jack-%{apiver} %{_bindir}/pw-jack -%{_mandir}/man1/pw-jack-%{apiver}.1%{?ext_man} %{_mandir}/man1/pw-jack.1%{?ext_man} %{_datadir}/pipewire/jack.conf ++++++ 0001-pulse-server-add-client-props-to-sink_input_source_output.patch ++++++ >From 6eb44830697dc90dacfedc7b30ed026d2d600889 Mon Sep 17 00:00:00 2001 From: Wim Taymans <[email protected]> Date: Wed, 28 Jan 2026 13:20:38 +0100 Subject: [PATCH] pulse-server: add client props to sink_input/source_output Instead of adding the client props to the stream props when we create it, add them when we enumerate the streams. This makes it possible to also have the client props in the stream props for streams that are not created with the pulse API. Fixes #5090 --- .../module-protocol-pulse/pulse-server.c | 53 +++++++++++++++---- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 59610ef57..58dbb221a 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -1621,7 +1621,7 @@ static int do_create_playback_stream(struct client *client, uint32_t command, ui struct pw_manager_object *o; bool is_monitor; - props = pw_properties_copy(client->props); + props = pw_properties_new(NULL, NULL); if (props == NULL) goto error_errno; @@ -1907,7 +1907,7 @@ static int do_create_record_stream(struct client *client, uint32_t command, uint struct pw_manager_object *o; bool is_monitor = false; - props = pw_properties_copy(client->props); + props = pw_properties_new(NULL, NULL); if (props == NULL) goto error_errno; @@ -2298,7 +2298,7 @@ static int do_create_upload_stream(struct client *client, uint32_t command, uint struct message *reply; int res; - if ((props = pw_properties_copy(client->props)) == NULL) + if ((props = pw_properties_new(NULL, NULL)) == NULL) goto error_errno; if ((res = message_get(m, @@ -4068,6 +4068,25 @@ static const char *get_media_name(struct pw_node_info *info) return media_name; } +static int fill_node_info_proplist(struct message *m, const struct spa_dict *node_props, + const struct pw_manager_object *client) +{ + struct pw_client_info *client_info = client ? client->info : NULL; + spa_autoptr(pw_properties) props = NULL; + + if (client_info && client_info->props) { + props = pw_properties_new_dict(node_props); + if (props == NULL) + return -ENOMEM; + + pw_properties_add(props, client_info->props); + + node_props = &props->dict; + } + message_put(m, TAG_PROPLIST, node_props, TAG_INVALID); + return 0; +} + static int fill_sink_input_info(struct client *client, struct message *m, struct pw_manager_object *o) { @@ -4128,10 +4147,16 @@ static int fill_sink_input_info(struct client *client, struct message *m, message_put(m, TAG_BOOLEAN, dev_info.volume_info.mute, /* muted */ TAG_INVALID); - if (client->version >= 13) - message_put(m, - TAG_PROPLIST, info->props, - TAG_INVALID); + if (client->version >= 13) { + int res; + struct pw_manager_object *c = NULL; + if (client_id != SPA_ID_INVALID) { + struct selector sel = { .id = client_id, .type = pw_manager_object_is_client, }; + c = select_object(manager, &sel); + } + if ((res = fill_node_info_proplist(m, info->props, c)) < 0) + return res; + } if (client->version >= 19) message_put(m, TAG_BOOLEAN, corked, /* corked */ @@ -4207,10 +4232,16 @@ static int fill_source_output_info(struct client *client, struct message *m, TAG_STRING, "PipeWire", /* resample method */ TAG_STRING, "PipeWire", /* driver */ TAG_INVALID); - if (client->version >= 13) - message_put(m, - TAG_PROPLIST, info->props, - TAG_INVALID); + if (client->version >= 13) { + int res; + struct pw_manager_object *c = NULL; + if (client_id != SPA_ID_INVALID) { + struct selector sel = { .id = client_id, .type = pw_manager_object_is_client, }; + c = select_object(manager, &sel); + } + if ((res = fill_node_info_proplist(m, info->props, c)) < 0) + return res; + } if (client->version >= 19) message_put(m, TAG_BOOLEAN, corked, /* corked */ -- GitLab ++++++ 0002-module-protocol-native-Fix-socket-activation.patch ++++++ >From f4e174870eb8cbe60c922d3bf181f3eb2347523c Mon Sep 17 00:00:00 2001 From: Jonas Holmberg <[email protected]> Date: Mon, 2 Mar 2026 10:28:26 +0100 Subject: [PATCH] module-protocol-native: Fix socket activation Fix path comparison in is_socket_unix() and don't unset LISTEN_FDS since the function that uses it is called more than once and it was not unset when sd_listen_fds() was used. Fixes #5140 --- src/modules/module-protocol-native.c | 2 +- src/modules/module-protocol-pulse/server.c | 2 +- src/modules/network-utils.h | 14 +++++--------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c index 2be92a847..98a43829b 100644 --- a/src/modules/module-protocol-native.c +++ b/src/modules/module-protocol-native.c @@ -907,7 +907,7 @@ static int add_socket(struct pw_protocol *protocol, struct server *s, struct soc bool activated = false; { - int i, n = listen_fd(); + int i, n = listen_fds(); for (i = 0; i < n; ++i) { if (is_socket_unix(LISTEN_FDS_START + i, SOCK_STREAM, s->addr.sun_path) > 0) { diff --git a/src/modules/module-protocol-pulse/server.c b/src/modules/module-protocol-pulse/server.c index aeab710b0..637757dfd 100644 --- a/src/modules/module-protocol-pulse/server.c +++ b/src/modules/module-protocol-pulse/server.c @@ -576,7 +576,7 @@ static bool is_stale_socket(int fd, const struct sockaddr_un *addr_un) static int check_socket_activation(const char *path) { - const int n = listen_fd(); + const int n = listen_fds(); for (int i = 0; i < n; i++) { const int fd = LISTEN_FDS_START + i; diff --git a/src/modules/network-utils.h b/src/modules/network-utils.h index a89b7d3bd..6ff80dd7a 100644 --- a/src/modules/network-utils.h +++ b/src/modules/network-utils.h @@ -143,7 +143,7 @@ static inline bool pw_net_addr_is_any(struct sockaddr_storage *addr) /* Returns the number of file descriptors passed for socket activation. * Returns 0 if none, -1 on error. */ -static inline int listen_fd(void) +static inline int listen_fds(void) { uint32_t n; int i, flags; @@ -161,8 +161,6 @@ static inline int listen_fd(void) return -1; } - unsetenv("LISTEN_FDS"); - return (int)n; } @@ -192,12 +190,10 @@ static inline int is_socket_unix(int fd, int type, const char *path) if (addr.sun_family != AF_UNIX) return 0; size_t length = strlen(path); - if (length > 0) { - if (len < offsetof(struct sockaddr_un, sun_path) + length) - return 0; - if (memcmp(addr.sun_path, path, length) != 0) - return 0; - } + if (len < offsetof(struct sockaddr_un, sun_path) + length + 1) + return 0; + if (memcmp(addr.sun_path, path, length + 1) != 0) + return 0; } return 1; -- GitLab ++++++ 0003-modules-improve-error-reporting.patch ++++++ >From 6e2522b657aafe08b1ffe66531c49db07d793907 Mon Sep 17 00:00:00 2001 From: Wim Taymans <[email protected]> Date: Mon, 2 Mar 2026 12:13:22 +0100 Subject: [PATCH] modules: improve error reporting Instead of reporting -EPIPE, get the error from the socket and report that instead. --- src/modules/module-raop/rtsp-client.c | 7 ++++++- src/modules/module-sendspin/websocket.c | 7 ++++++- src/modules/module-snapcast-discover.c | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/modules/module-raop/rtsp-client.c b/src/modules/module-raop/rtsp-client.c index fae71977c..574f9f3e4 100644 --- a/src/modules/module-raop/rtsp-client.c +++ b/src/modules/module-raop/rtsp-client.c @@ -445,7 +445,12 @@ on_source_io(void *data, int fd, uint32_t mask) int res; if (mask & (SPA_IO_ERR | SPA_IO_HUP)) { - res = -EPIPE; + socklen_t len = sizeof(res); + if ((mask & SPA_IO_HUP) || + getsockopt(fd, SOL_SOCKET, SO_ERROR, &res, &len) < 0) + res = -EPIPE; + else + res = -res; goto error; } if (mask & SPA_IO_IN) { #diff --git a/src/modules/module-sendspin/websocket.c b/src/modules/module-sendspin/websocket.c #index b6ddf629f..e0d5a717d 100644 #--- a/src/modules/module-sendspin/websocket.c #+++ b/src/modules/module-sendspin/websocket.c #@@ -712,7 +712,12 @@ on_source_io(void *data, int fd, uint32_t mask) # conn->refcount++; # # if (mask & (SPA_IO_ERR | SPA_IO_HUP)) { #- res = -EPIPE; #+ socklen_t len = sizeof(res); #+ if ((mask & SPA_IO_HUP) || #+ getsockopt(fd, SOL_SOCKET, SO_ERROR, &res, &len) < 0) #+ res = -EPIPE; #+ else #+ res = -res; # goto error; # } # if (mask & SPA_IO_IN) { diff --git a/src/modules/module-snapcast-discover.c b/src/modules/module-snapcast-discover.c index 2561a7304..0e9fef1a1 100644 --- a/src/modules/module-snapcast-discover.c +++ b/src/modules/module-snapcast-discover.c @@ -381,7 +381,12 @@ on_source_io(void *data, int fd, uint32_t mask) int res; if (mask & (SPA_IO_ERR | SPA_IO_HUP)) { - res = -EPIPE; + socklen_t len = sizeof(res); + if ((mask & SPA_IO_HUP) || + getsockopt(fd, SOL_SOCKET, SO_ERROR, &res, &len) < 0) + res = -EPIPE; + else + res = -res; goto error; } if (mask & SPA_IO_IN) { -- GitLab
