diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch b/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch
new file mode 100644
index 000000000..ad6448a10
--- /dev/null
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch
@@ -0,0 +1,47 @@
+From d3ea3142e1a4de206e616bc18f63a529e6b4986a Mon Sep 17 00:00:00 2001
+From: psykose <alice@ayaya.dev>
+Date: Wed, 13 Apr 2022 21:57:49 +0000
+Subject: [PATCH 001/154] spa: fix c90 header include
+
+placing declarations after code is invalid under ISO c90
+
+Fixes !1211
+
+Patch-Status: Backport
+---
+ spa/include/spa/utils/string.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/spa/include/spa/utils/string.h b/spa/include/spa/utils/string.h
+index e80434537..43d19616c 100644
+--- a/spa/include/spa/utils/string.h
++++ b/spa/include/spa/utils/string.h
+@@ -276,10 +276,11 @@ static inline int spa_scnprintf(char *buffer, size_t size, const char *format, .
+ static inline float spa_strtof(const char *str, char **endptr)
+ {
+ 	static locale_t locale = NULL;
++	locale_t prev;
+ 	float v;
+ 	if (SPA_UNLIKELY(locale == NULL))
+ 		locale = newlocale(LC_ALL_MASK, "C", NULL);
+-	locale_t prev = uselocale(locale);
++	prev = uselocale(locale);
+ 	v = strtof(str, endptr);
+ 	uselocale(prev);
+ 	return v;
+@@ -319,10 +320,11 @@ static inline bool spa_atof(const char *str, float *val)
+ static inline double spa_strtod(const char *str, char **endptr)
+ {
+ 	static locale_t locale = NULL;
++	locale_t prev;
+ 	double v;
+ 	if (SPA_UNLIKELY(locale == NULL))
+ 		locale = newlocale(LC_ALL_MASK, "C", NULL);
+-	locale_t prev = uselocale(locale);
++	prev = uselocale(locale);
+ 	v = strtod(str, endptr);
+ 	uselocale(prev);
+ 	return v;
+-- 
+2.25.1
+
diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb b/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb
index 0d725b9ee..850c5a7c8 100644
--- a/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb
@@ -14,7 +14,10 @@ LIC_FILES_CHKSUM = " \
 DEPENDS = "dbus ncurses"
 
 SRCREV = "64cf5e80e6240284e6b757907b900507fe56f1b5"
-SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https"
+SRC_URI = " \
+	git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https \
+	file://0001-spa-fix-c90-header-include.patch \
+"
 
 S = "${WORKDIR}/git"
 
@@ -76,13 +79,14 @@ PACKAGECONFIG ??= "\
     ${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)} \
     gstreamer jack libusb pw-cat raop sndfile v4l2 \
 "
+UDEV_PROVIDER = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', 'eudev', d)}"
 
 # "jack" and "pipewire-jack" packageconfigs cannot be both enabled,
 # since "jack" imports libjack, and "pipewire-jack" generates
 # libjack.so* files, thus colliding with the libpack package. This
 # is why these two are marked in their respective packageconfigs
 # as being in conflict.
-PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev"
+PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib ${UDEV_PROVIDER}"
 PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi"
 PACKAGECONFIG[bluez] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc"
 PACKAGECONFIG[bluez-aac] = "-Dbluez5-codec-aac=enabled,-Dbluez5-codec-aac=disabled,fdk-aac"
@@ -100,13 +104,13 @@ PACKAGECONFIG[raop] = "-Draop=enabled,-Draop=disabled,openssl"
 PACKAGECONFIG[sdl2] = "-Dsdl2=enabled,-Dsdl2=disabled,virtual/libsdl2"
 PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1"
 PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
-PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=enabled,-Dsystemd-system-service=disabled,systemd"
+PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=enabled,-Dsystemd-system-service=disabled"
 # "systemd-user-service" packageconfig will only install service
 # files to rootfs but not enable them as systemd.bbclass
 # currently lacks the feature of enabling user services.
-PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=enabled,-Dsystemd-user-service=disabled,systemd"
+PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=enabled,-Dsystemd-user-service=disabled"
 # pw-cat needs sndfile packageconfig to be enabled
-PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev"
+PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,${UDEV_PROVIDER}"
 PACKAGECONFIG[webrtc-echo-cancelling] = "-Decho-cancel-webrtc=enabled,-Decho-cancel-webrtc=disabled,webrtc-audio-processing"
 
 PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
@@ -335,3 +339,5 @@ FILES:${PN}-v4l2 += " \
 FILES:gstreamer1.0-pipewire = " \
     ${libdir}/gstreamer-1.0/* \
 "
+
+BBCLASSEXTEND = "native nativesdk"
