diff --git a/recipes/desktop/pipewire/libudev-zero-enumerate.patch b/recipes/desktop/pipewire/libudev-zero-enumerate.patch new file mode 100644 index 00000000..c8c93561 --- /dev/null +++ b/recipes/desktop/pipewire/libudev-zero-enumerate.patch @@ -0,0 +1,28 @@ +--- a/spa/plugins/alsa/alsa-udev.c ++++ b/spa/plugins/alsa/alsa-udev.c +@@ -165,9 +165,6 @@ + if ((str = udev_device_get_property_value(udev_device, "SOUND_CLASS")) && spa_streq(str, "modem")) + return SPA_ID_INVALID; + +- if (udev_device_get_property_value(udev_device, "SOUND_INITIALIZED") == NULL) +- return SPA_ID_INVALID; +- + if ((str = udev_device_get_property_value(udev_device, "DEVPATH")) == NULL) + return SPA_ID_INVALID; + +@@ -984,6 +981,15 @@ + + process_udev_device(this, ACTION_CHANGE, udev_device); + ++ /* libudev-zero only enumerates devices with char dev nodes ++ * (controlC0, pcmC0D0p, etc.) but not the parent card device. ++ * Process the parent so get_card_nr() sees a DEVPATH ending ++ * in /card. See: github.com/illiliti/libudev-zero/issues/26 */ ++ { ++ struct udev_device *pdev = udev_device_get_parent(udev_device); ++ if (pdev) ++ process_udev_device(this, ACTION_CHANGE, pdev); ++ } + udev_device_unref(udev_device); + } + udev_enumerate_unref(enumerate); diff --git a/recipes/desktop/pipewire/recipe.kdl b/recipes/desktop/pipewire/recipe.kdl new file mode 100644 index 00000000..4213eb91 --- /dev/null +++ b/recipes/desktop/pipewire/recipe.kdl @@ -0,0 +1,94 @@ +recipe { + name "pipewire" + version "1.6.5" + release 7 + description "Multimedia processing graphs" + url "https://pipewire.org" + archs "aarch64" "x86_64" + licenses "MIT" + depends "alsa-lib" \ + "alsa-lib-dev" \ + "flac-dev" \ + "glib-dev" \ + "libdbus-dev" \ + "libncurses" \ + "libncurses-dev" \ + "libogg-dev" \ + "libopus-dev" \ + "libsndfile-dev" \ + "libudev-zero-dev" \ + "libvorbis-dev" \ + "linux-headers" \ + "llvm" \ + "meson" \ + "mimalloc-dev" \ + "musl-dev" \ + "ninja" \ + "patch" \ + "pcre2" \ + "pcre2-dev" \ + "pkgconf" \ + "readline" \ + "readline-dev" +} + +source "https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/${recipe.version}/pipewire-${recipe.version}.tar.gz" { + blake3 "42affc6fc101274ec734c15271b0105d598262b863dc3d8ce968b7dc4d4c0826" +} + +source "libudev-zero-enumerate.patch" { + blake3 "ae3ecbad6d20a522839d7afb6b70883b720ec266c439cecc06ff38bcbcbcd180" +} + +prepare { + script r#" + patch -p1 < "${MERE_SOURCES_DIR}/libudev-zero-enumerate.patch" + "# +} + +build { + script r#" + export LDFLAGS="$LDFLAGS -lncursesw" + meson setup build/ \ + -Dprefix=/usr \ + -Dbuildtype=release \ + -Ddefault_library=both \ + -Dpipewire-alsa=enabled \ + -Dpipewire-jack=disabled \ + -Dpipewire-v4l2=enabled \ + -Dlibpulse=disabled \ + -Dgstreamer=disabled \ + -Dlogind=disabled \ + -Dselinux=disabled \ + -Dtests=disabled \ + -Dexamples=disabled \ + -Ddocs=disabled \ + -Dman=disabled \ + -Dsession-managers=[] + ninja -C build/ + "# +} + +install { + script r#" + ninja -C build/ install + "# +} + +package "pipewire" { + files "etc/security/" \ + "usr/bin/" \ + "usr/lib/lib*.so*" \ + "usr/lib/alsa-lib/" \ + "usr/lib/pipewire-0.3/" \ + "usr/lib/spa-0.2/" \ + "usr/lib/udev/" \ + "usr/share/alsa/" \ + "usr/share/alsa-card-profile/" \ + "usr/share/pipewire/" +} + +package "pipewire-dev" { + files "usr/include/" \ + "usr/lib/pkgconfig/" +}