[packages/pipewire-wireplumber] up to 0.4.8

atler atler at pld-linux.org
Thu Feb 17 11:50:41 CET 2022


commit aa4be26c714ca243d59571fd37bdde283892e9ee
Author: Jan Palus <atler at pld-linux.org>
Date:   Thu Feb 17 11:49:27 2022 +0100

    up to 0.4.8
    
    - upstream patch for broken wireplumber on non-x86_64:
      https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/194

 pipewire-wireplumber.spec |  11 +--
 va_list.patch             | 212 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 218 insertions(+), 5 deletions(-)
---
diff --git a/pipewire-wireplumber.spec b/pipewire-wireplumber.spec
index 6bb1f74..157d640 100644
--- a/pipewire-wireplumber.spec
+++ b/pipewire-wireplumber.spec
@@ -4,12 +4,13 @@
 
 Summary:	Session / policy manager implementation for PipeWire
 Name:		pipewire-wireplumber
-Version:	0.4.7
+Version:	0.4.8
 Release:	1
 License:	MIT
 Group:		Libraries
 Source0:	https://gitlab.freedesktop.org/pipewire/wireplumber/-/archive/%{version}/wireplumber-%{version}.tar.bz2
-# Source0-md5:	2b623bd5187fb01f02a2007a51000776
+# Source0-md5:	a5a405f0f8e973df9d644a20a8c0620b
+Patch0:		va_list.patch
 URL:		https://pipewire.org/
 # required for both docs and introspection
 BuildRequires:	doxygen >= 1.8.0
@@ -20,7 +21,7 @@ BuildRequires:	gobject-introspection-devel
 BuildRequires:	lua-devel >= 5.3.0
 BuildRequires:	meson >= 0.56.0
 BuildRequires:	ninja
-BuildRequires:	pipewire-devel >= 0.3.43
+BuildRequires:	pipewire-devel >= 0.3.45
 BuildRequires:	pkgconfig
 BuildRequires:	python3
 BuildRequires:	python3-lxml
@@ -55,7 +56,7 @@ the actual management functionality.
 Summary:	WirePlumber shared library
 Group:		Libraries
 Requires:	glib2 >= 1:2.62
-Requires:	pipewire-libs >= 0.3.43
+Requires:	pipewire-libs >= 0.3.45
 
 %description libs
 WirePlumber shared library.
@@ -86,6 +87,7 @@ API documentation for PipeWire WirePlumber.
 
 %prep
 %setup -q -n wireplumber-%{version}
+%patch0 -p1
 
 %build
 %meson build \
@@ -132,7 +134,6 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-mixer-api.so
 %attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-portal-permissionstore.so
 %attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-reserve-device.so
-%attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-route-settings-api.so
 %attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-si-audio-adapter.so
 %attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-si-audio-endpoint.so
 %attr(755,root,root) %{_libdir}/wireplumber-0.4/libwireplumber-module-si-node.so
diff --git a/va_list.patch b/va_list.patch
new file mode 100644
index 0000000..27b6f03
--- /dev/null
+++ b/va_list.patch
@@ -0,0 +1,212 @@
+From e429db7e8c266045aee25e153fb2308bd61fe233 Mon Sep 17 00:00:00 2001
+From: Julian Bouzas <julian.bouzas at collabora.com>
+Date: Wed, 9 Feb 2022 07:59:59 -0500
+Subject: [PATCH] spa-json: fix va_list APIs for different architectures
+
+The va_list type might not always be a pointer in some architectures, so we
+cannot guarantee it will be modified after using it for a second time in another
+function. This fixes the issue by using macros so args does not get copied, and
+always gets modified when using it more than once.
+---
+ lib/wp/spa-json.c | 156 ++++++++++++++++++++++++----------------------
+ 1 file changed, 80 insertions(+), 76 deletions(-)
+
+diff --git a/lib/wp/spa-json.c b/lib/wp/spa-json.c
+index f14f395d..c5e59a3e 100644
+--- a/lib/wp/spa-json.c
++++ b/lib/wp/spa-json.c
+@@ -363,33 +363,33 @@ wp_spa_json_new_string (const gchar *value)
+       wp_spa_json_builder_new_formatted ("\"%s\"", value));
+ }
+ 
+-static void
+-wp_spa_json_builder_add_value (WpSpaJsonBuilder *self, const gchar *fmt,
+-    va_list args)
+-{
+-  switch (*fmt) {
+-    case 'n':
+-      wp_spa_json_builder_add_null (self);
+-      break;
+-    case 'b':
+-      wp_spa_json_builder_add_boolean (self, va_arg(args, gboolean));
+-      break;
+-    case 'i':
+-      wp_spa_json_builder_add_int (self, va_arg(args, gint));
+-      break;
+-    case 'f':
+-      wp_spa_json_builder_add_float (self, (float)va_arg(args, double));
+-      break;
+-    case 's':
+-      wp_spa_json_builder_add_string (self, va_arg(args, const gchar *));
+-      break;
+-    case 'J':
+-      wp_spa_json_builder_add_json (self, va_arg(args, WpSpaJson *));
+-      break;
+-    default:
+-      return;
+-  }
+-}
++/* Args is not a pointer in some architectures, so this needs to be a macro to
++ * avoid args being copied */
++#define wp_spa_json_builder_add_value(self,fmt,args)                           \
++do {                                                                           \
++  switch (*fmt) {                                                              \
++    case 'n':                                                                  \
++      wp_spa_json_builder_add_null (self);                                     \
++      break;                                                                   \
++    case 'b':                                                                  \
++      wp_spa_json_builder_add_boolean (self, va_arg(args, gboolean));          \
++      break;                                                                   \
++    case 'i':                                                                  \
++      wp_spa_json_builder_add_int (self, va_arg(args, gint));                  \
++      break;                                                                   \
++    case 'f':                                                                  \
++      wp_spa_json_builder_add_float (self, (float)va_arg(args, double));       \
++      break;                                                                   \
++    case 's':                                                                  \
++      wp_spa_json_builder_add_string (self, va_arg(args, const gchar *));      \
++      break;                                                                   \
++    case 'J':                                                                  \
++      wp_spa_json_builder_add_json (self, va_arg(args, WpSpaJson *));          \
++      break;                                                                   \
++    default:                                                                   \
++      break;                                                                   \
++  }								               \
++} while(false)
+ 
+ /*!
+  * \brief Creates a spa json of type array
+@@ -724,48 +724,46 @@ wp_spa_json_parse_object_valist (WpSpaJson *self, va_list args)
+   return res;
+ }
+ 
+-static gboolean
+-wp_spa_json_parse_value (const gchar *data, int len, const gchar *fmt,
+-    va_list args)
+-{
+-  switch (*fmt) {
+-    case 'n':
+-      if (!spa_json_is_null (data, len))
+-        return FALSE;
+-      break;
+-    case 'b':
+-      if (!wp_spa_json_parse_boolean_internal (data, len,
+-          va_arg(args, gboolean *)))
+-        return FALSE;
+-      break;
+-    case 'i':
+-      if (spa_json_parse_int (data, len, va_arg(args, gint *)) < 0)
+-        return FALSE;
+-      break;
+-    case 'f':
+-      if (spa_json_parse_float (data, len,
+-          (float *)va_arg(args, double *)) < 0)
+-        return FALSE;
+-      break;
+-    case 's': {
+-      gchar *str = wp_spa_json_parse_string_internal (data, len);
+-      if (!str)
+-        return FALSE;
+-      *va_arg(args, gchar **) = str;
+-      break;
+-    }
+-    case 'J': {
+-      WpSpaJson *j = wp_spa_json_new (data, len);
+-      if (!j)
+-        return FALSE;
+-      *va_arg(args, WpSpaJson **) = j;
+-      break;
+-    }
+-    default:
+-      return FALSE;
+-  }
+-  return TRUE;
+-}
++/* Args is not a pointer in some architectures, so this needs to be a macro to
++ * avoid args being copied */
++#define wp_spa_json_parse_value(data,len,fmt,args)                             \
++do {                                                                           \
++  switch (*fmt) {                                                              \
++    case 'n':                                                                  \
++      if (!spa_json_is_null (data, len))                                       \
++        return FALSE;                                                          \
++      break;                                                                   \
++    case 'b':                                                                  \
++      if (!wp_spa_json_parse_boolean_internal (data, len,                      \
++          va_arg(args, gboolean *)))                                           \
++        return FALSE;                                                          \
++      break;                                                                   \
++    case 'i':                                                                  \
++      if (spa_json_parse_int (data, len, va_arg(args, gint *)) < 0)            \
++        return FALSE;                                                          \
++      break;                                                                   \
++    case 'f':                                                                  \
++      if (spa_json_parse_float (data, len, va_arg(args, float *)) < 0)         \
++        return FALSE;                                                          \
++      break;                                                                   \
++    case 's': {                                                                \
++      gchar *str = wp_spa_json_parse_string_internal (data, len);              \
++      if (!str)                                                                \
++        return FALSE;                                                          \
++      *va_arg(args, gchar **) = str;                                           \
++      break;                                                                   \
++    }                                                                          \
++    case 'J': {                                                                \
++      WpSpaJson *j = wp_spa_json_new (data, len);                              \
++      if (!j)                                                                  \
++        return FALSE;                                                          \
++      *va_arg(args, WpSpaJson **) = j;                                         \
++      break;                                                                   \
++    }                                                                          \
++    default:                                                                   \
++      return FALSE;                                                            \
++  }                                                                            \
++} while(false)
+ 
+ /*!
+  * \brief Parses the object property values of a spa json object
+@@ -827,8 +825,7 @@ wp_spa_json_object_get_valist (WpSpaJson *self, va_list args)
+     value = g_value_get_boxed (&item);
+ 
+     if (g_strcmp0 (key_str, lookup_key) == 0) {
+-      if (!wp_spa_json_parse_value (value->data, value->size, lookup_fmt, args))
+-        return FALSE;
++      wp_spa_json_parse_value (value->data, value->size, lookup_fmt, args);
+       lookup_key = va_arg(args, const gchar *);
+       if (!lookup_key)
+         return TRUE;
+@@ -1366,9 +1363,12 @@ gboolean
+ wp_spa_json_parser_get_value (WpSpaJsonParser *self, const gchar *fmt,
+     va_list args)
+ {
+-  return wp_spa_json_parser_advance (self) &&
+-      wp_spa_json_parse_value (self->curr.cur,
+-          self->curr.end - self->curr.cur, fmt, args);
++  if (wp_spa_json_parser_advance (self)) {
++    wp_spa_json_parse_value (self->curr.cur, self->curr.end - self->curr.cur,
++        fmt, args);
++    return TRUE;
++  }
++  return FALSE;
+ }
+ 
+ /*!
+@@ -1419,9 +1419,13 @@ wp_spa_json_parser_get_valist (WpSpaJsonParser *self, va_list args)
+     if (!format)
+       return TRUE;
+ 
+-    /* parse value */
+-    if (!wp_spa_json_parser_get_value (self, format, args))
++    /* advance */
++    if (!wp_spa_json_parser_advance (self))
+       return FALSE;
++
++    /* parse value */
++    wp_spa_json_parse_value (self->curr.cur, self->curr.end - self->curr.cur,
++        format, args);
+   } while (TRUE);
+ 
+   return FALSE;
+-- 
+GitLab
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/pipewire-wireplumber.git/commitdiff/aa4be26c714ca243d59571fd37bdde283892e9ee



More information about the pld-cvs-commit mailing list