+# TODO: evl support (BR: libevl-devel, https://evlproject.org/)
+# - libcamera integration (no releases yet; ARM specific?)
#
# Conditional build:
%bcond_without apidocs # Doxygen based API documentation
+%bcond_without ffmpeg # ffmpeg spa plugin integration
%bcond_without gstreamer # GStreamer module
+%bcond_without jack # pipewire-jack and jack spa plugin integration
#
Summary: PipeWire - server and user space API to deal with multimedia pipelines
Summary(pl.UTF-8): PipeWire - serwer i API przestrzeni użytkownika do obsługi potoków multimedialnych
Name: pipewire
-Version: 0.2.7
+Version: 0.3.24
Release: 1
License: LGPL v2+
Group: Libraries
#Source0Download: https://github.com/PipeWire/pipewire/releases
Source0: https://github.com/PipeWire/pipewire/archive/%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 026fe15fc65e4a63bd8e5e63c0e054c6
-#Patch0: %{name}-what.patch
+# Source0-md5: 887be3193a91f18c7ea63e3f5c61976b
+Patch0: %{name}-gcc.patch
URL: https://pipewire.org/
-# for tests only
-#BuildRequires: SDL2-devel >= 2
-BuildRequires: alsa-lib-devel
+%if %{with jack}
+BuildRequires: SDL2-devel >= 2
+%endif
+BuildRequires: Vulkan-Loader-devel >= 1.1.69
+BuildRequires: alsa-lib-devel >= 1.1.7
+BuildRequires: bluez-libs-devel >= 4.101
BuildRequires: dbus-devel
%{?with_apidocs:BuildRequires: doxygen}
+BuildRequires: fdk-aac-devel
# libavcodec libavformat libavfilter
-BuildRequires: ffmpeg-devel
+%{?with_ffmpeg:BuildRequires: ffmpeg-devel}
BuildRequires: gcc >= 5:3.2
-%{?with_gstreamer:BuildRequires: glib2-devel >= 1:2.32.0}
+%if %{with gstreamer}
+BuildRequires: glib2-devel >= 1:2.32.0
+%endif
%{?with_apidocs:BuildRequires: graphviz}
%if %{with gstreamer}
-BuildRequires: gstreamer-devel >= 1.0
-BuildRequires: gstreamer-plugins-base-devel >= 1.0
+BuildRequires: gstreamer-devel >= 1.10
+BuildRequires: gstreamer-plugins-base-devel >= 1.10
%endif
-BuildRequires: meson >= 0.47.0
+%{?with_jack:BuildRequires: jack-audio-connection-kit-devel >= 1.9.10}
+BuildRequires: ldacBT-devel
+%ifarch i386 i486
+# possibly more 32-bit archs (where 8-byte __atomic_store_n require libatomic)
+BuildRequires: libatomic-devel
+%endif
+BuildRequires: libopenaptx-devel
+BuildRequires: libsndfile-devel >= 1.0.20
+BuildRequires: meson >= 0.50.0
+BuildRequires: ncurses-devel
BuildRequires: ninja >= 1.5
BuildRequires: pkgconfig
-BuildRequires: rpmbuild(macros) >= 1.736
+BuildRequires: rpmbuild(macros) >= 1.752
BuildRequires: sbc-devel
BuildRequires: systemd-devel
BuildRequires: udev-devel
BuildRequires: xmltoman
Requires: %{name}-libs = %{version}-%{release}
+Requires: libsndfile >= 1.0.20
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%description
Summary: API documentation for PipeWire library
Summary(pl.UTF-8): Dokumentacja API biblioteki PipeWire
Group: Documentation
-%if "%{_rpmversion}" >= "5"
BuildArch: noarch
-%endif
%description apidocs
API documentation for PipeWire library.
Summary(pl.UTF-8): Wtyczka PipeWire SPA do odtwarzania i nagrywania dźwięku przy użyciu API ALSA
Group: Libraries
Requires: %{name}-libs = %{version}-%{release}
+Requires: alsa-lib >= 1.1.7
%description spa-module-alsa
PipeWire SPA plugin to play and record audio with ALSA API.
Summary(pl.UTF-8): Wtyczka PipeWire SPA do odtwarzania dźwięku przez Bluetooth A2DP
Group: Libraries
Requires: %{name}-libs = %{version}-%{release}
+Requires: bluez-libs >= 4.101
%description spa-module-bluez
PipeWire SPA plugin to play audio with Bluetooth A2DP.
Wtyczka PipeWire SPA do kodowania/dekodowania przy użyciu biblioteki
FFmpeg.
+%package spa-module-jack
+Summary: PipeWire SPA plugin to play and record audio with JACK API
+Summary(pl.UTF-8): Wtyczka PipeWire SPA do odtwarzania i nagrywania dźwięku przy użyciu API JACK
+Group: Libraries
+Requires: %{name}-libs = %{version}-%{release}
+Requires: jack-audio-connection-kit >= 1.9.10
+
+%description spa-module-jack
+PipeWire SPA plugin to play and record audio with JACK API.
+
+%description spa-module-jack -l pl.UTF-8
+Wtyczka PipeWire SPA do odtwarzania i nagrywania dźwięku przy użyciu
+API JACK.
+
+%package spa-module-vulkan
+Summary: PipeWire SPA plugin to generate video frames using Vulkan
+Summary(pl.UTF-8): Wtyczka PipeWire SPA do generowania ramek obrazu przy użyciu Vulkana
+Group: Libraries
+Requires: %{name}-libs = %{version}-%{release}
+Requires: Vulkan-Loader >= 1.1.69
+
+%description spa-module-vulkan
+PipeWire SPA plugin to generate video frames using Vulkan.
+
+%description spa-module-vulkan -l pl.UTF-8
+Wtyczka PipeWire SPA do generowania ramek obrazu przy użyciu Vulkana.
+
+%package jack
+Summary: PipeWire JACK sound system integration
+Summary(pl.UTF-8): Integracja PipeWire z systemem dźwięku JACK
+Group: Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: jack-audio-connection-kit >= 1.9.10
+
+%description jack
+PipeWire JACK sound system integration.
+
+%description jack -l pl.UTF-8
+Integracja PipeWire z systemem dźwięku JACK.
+
+%package pulseaudio
+Summary: PipeWire PulseAudio sound system integration
+Summary(pl.UTF-8): Integracja PipeWire z systemem dźwięku PulseAudio
+Group: Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description pulseaudio
+PipeWire PulseAudio sound system integration.
+
+%description pulseaudio -l pl.UTF-8
+Integracja PipeWire z systemem dźwięku PulseAudio.
+
+%package -n alsa-plugin-pipewire
+Summary: PipeWire integration plugin for ALSA sound system
+Summary(pl.UTF-8): Wtyczka systemu dźwięku ALSA integrująca z PipeWire
+Group: Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: alsa-lib >= 1.1.7
+
+%description -n alsa-plugin-pipewire
+PipeWire integration plugin for ALSA sound system.
+
+%description -n alsa-plugin-pipewire -l pl.UTF-8
+Wtyczka systemu dźwięku ALSA integrująca z PipeWire.
+
%package -n gstreamer-pipewire
Summary: PipeWire video sink and source plugin for GStreamer
Summary(pl.UTF-8): Wtyczka udostępniająca źródło i cel obrazu PipeWire dla GStreamera
Group: Libraries
Requires: %{name} = %{version}-%{release}
-Requires: gstreamer >= 1.0
-Requires: gstreamer-plugins-base >= 1.0
+Requires: glib2 >= 1:2.32.0
+Requires: gstreamer >= 1.10
+Requires: gstreamer-plugins-base >= 1.10
%description -n gstreamer-pipewire
PipeWire video sink and source plugin for GStreamer.
%prep
%setup -q
+%patch0 -p1
%build
%meson build \
- %{?with_apidocs:-Ddocs=true} \
- %{!?with_gstreamer:-Dgstreamer=false} \
- -Dman=true
+ -Daudiotestsrc=enabled \
+ -Dbluez5-backend-hsphfpd=enabled \
+ %{?with_apidocs:-Ddocs=enabled} \
+ %{?with_ffmpeg:-Dffmpeg=enabled} \
+ %{!?with_gstreamer:-Dgstreamer=disabled} \
+ %{!?with_jack:-Djack=disabled} \
+ -Dman=enabled \
+ %{!?with_jack:-Dpipewire-jack=disabled} \
+ -Dvideotestsrc=enabled \
+ -Dvolume=enabled
+# TODO: -Devl=enabled
%ninja_build -C build
%ninja_install -C build
+install -d $RPM_BUILD_ROOT%{_datadir}/alsa/alsa.conf.d
+cp -p pipewire-alsa/conf/*.conf $RPM_BUILD_ROOT%{_datadir}/alsa/alsa.conf.d
+
# packaged as %doc in -apidocs
%{__rm} -r $RPM_BUILD_ROOT%{_docdir}/pipewire/html
+%find_lang %{name}
+
%clean
rm -rf $RPM_BUILD_ROOT
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
-%files
+%files -f %{name}.lang
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/pipewire
-%attr(755,root,root) %{_bindir}/pipewire-cli
-%attr(755,root,root) %{_bindir}/pipewire-monitor
+%attr(755,root,root) %{_bindir}/pipewire-media-session
+%attr(755,root,root) %{_bindir}/pw-cat
+%attr(755,root,root) %{_bindir}/pw-cli
+%attr(755,root,root) %{_bindir}/pw-dot
+%attr(755,root,root) %{_bindir}/pw-dump
+%attr(755,root,root) %{_bindir}/pw-metadata
+%attr(755,root,root) %{_bindir}/pw-mididump
+%attr(755,root,root) %{_bindir}/pw-midiplay
+%attr(755,root,root) %{_bindir}/pw-midirecord
+%attr(755,root,root) %{_bindir}/pw-mon
+%attr(755,root,root) %{_bindir}/pw-play
+%attr(755,root,root) %{_bindir}/pw-profiler
+%attr(755,root,root) %{_bindir}/pw-record
+%attr(755,root,root) %{_bindir}/pw-reserve
+%attr(755,root,root) %{_bindir}/pw-top
%attr(755,root,root) %{_bindir}/spa-inspect
+%attr(755,root,root) %{_bindir}/spa-json-dump
%attr(755,root,root) %{_bindir}/spa-monitor
+# R: libsndfile
+%attr(755,root,root) %{_bindir}/spa-resample
%dir %{_sysconfdir}/pipewire
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/client.conf
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/client-rt.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/pipewire.conf
+%dir %{_sysconfdir}/pipewire/media-session.d
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/media-session.d/media-session.conf
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/media-session.d/v4l2-monitor.conf
%{systemduserunitdir}/pipewire.service
%{systemduserunitdir}/pipewire.socket
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-audio-dsp.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-autolink.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-client-node.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-link-factory.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-mixer.so
-# R: dbus-libs
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-portal.so
+%{systemduserunitdir}/pipewire-media-session.service
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-access.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-adapter.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-client-device.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-client-node.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-link-factory.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-metadata.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-portal.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-profiler.so
# R: systemd-libs
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-protocol-native.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-protocol-native.so
+# R: dbus-libs systemd-libs
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-protocol-pulse.so
# R: dbus-libs
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-rtkit.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-spa-monitor.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-spa-node.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-spa-node-factory.so
-%attr(755,root,root) %{_libdir}/pipewire-0.2/libpipewire-module-suspend-on-idle.so
-%dir %{_libdir}/spa/audiomixer
-%attr(755,root,root) %{_libdir}/spa/audiomixer/libspa-audiomixer.so
-%dir %{_libdir}/spa/audiotestsrc
-%attr(755,root,root) %{_libdir}/spa/audiotestsrc/libspa-audiotestsrc.so
-%dir %{_libdir}/spa/support
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-rtkit.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-session-manager.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-spa-device.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-spa-device-factory.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-spa-node.so
+%attr(755,root,root) %{_libdir}/pipewire-0.3/libpipewire-module-spa-node-factory.so
+%dir %{_libdir}/spa-0.2/audioconvert
+%attr(755,root,root) %{_libdir}/spa-0.2/audioconvert/libspa-audioconvert.so
+%dir %{_libdir}/spa-0.2/audiomixer
+%attr(755,root,root) %{_libdir}/spa-0.2/audiomixer/libspa-audiomixer.so
+%dir %{_libdir}/spa-0.2/audiotestsrc
+%attr(755,root,root) %{_libdir}/spa-0.2/audiotestsrc/libspa-audiotestsrc.so
+%dir %{_libdir}/spa-0.2/control
+%attr(755,root,root) %{_libdir}/spa-0.2/control/libspa-control.so
+%dir %{_libdir}/spa-0.2/support
# R: dbus-libs
-%attr(755,root,root) %{_libdir}/spa/support/libspa-dbus.so
-%attr(755,root,root) %{_libdir}/spa/support/libspa-support.so
-%dir %{_libdir}/spa/test
-%attr(755,root,root) %{_libdir}/spa/test/libspa-test.so
-%dir %{_libdir}/spa/v4l2
+%attr(755,root,root) %{_libdir}/spa-0.2/support/libspa-dbus.so
+# R: systemd-libs
+%attr(755,root,root) %{_libdir}/spa-0.2/support/libspa-journal.so
+%attr(755,root,root) %{_libdir}/spa-0.2/support/libspa-support.so
+%dir %{_libdir}/spa-0.2/v4l2
# R: udev-libs
-%attr(755,root,root) %{_libdir}/spa/v4l2/libspa-v4l2.so
-%dir %{_libdir}/spa/videotestsrc
-%attr(755,root,root) %{_libdir}/spa/videotestsrc/libspa-videotestsrc.so
-%dir %{_libdir}/spa/volume
-%attr(755,root,root) %{_libdir}/spa/volume/libspa-volume.so
+%attr(755,root,root) %{_libdir}/spa-0.2/v4l2/libspa-v4l2.so
+%dir %{_libdir}/spa-0.2/videoconvert
+%attr(755,root,root) %{_libdir}/spa-0.2/videoconvert/libspa-videoconvert.so
+%dir %{_libdir}/spa-0.2/videotestsrc
+%attr(755,root,root) %{_libdir}/spa-0.2/videotestsrc/libspa-videotestsrc.so
+%dir %{_libdir}/spa-0.2/volume
+%attr(755,root,root) %{_libdir}/spa-0.2/volume/libspa-volume.so
%{_mandir}/man1/pipewire.1*
-%{_mandir}/man1/pipewire-cli.1*
-%{_mandir}/man1/pipewire-monitor.1*
+%{_mandir}/man1/pw-cat.1*
+%{_mandir}/man1/pw-cli.1*
+%{_mandir}/man1/pw-dot.1*
+%{_mandir}/man1/pw-metadata.1*
+%{_mandir}/man1/pw-mididump.1*
+%{_mandir}/man1/pw-mon.1*
+%{_mandir}/man1/pw-profiler.1*
%{_mandir}/man5/pipewire.conf.5*
%files libs
%defattr(644,root,root,755)
-%doc LICENSE NEWS README
-%attr(755,root,root) %{_libdir}/libpipewire-0.2.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libpipewire-0.2.so.1
-%dir %{_libdir}/pipewire-0.2
-%dir %{_libdir}/spa
+%doc COPYING LICENSE NEWS README.md
+%attr(755,root,root) %{_libdir}/libpipewire-0.3.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libpipewire-0.3.so.0
+%dir %{_libdir}/pipewire-0.3
+%dir %{_libdir}/spa-0.2
%files devel
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libpipewire-0.2.so
-%{_includedir}/pipewire
-%{_includedir}/spa
-%{_pkgconfigdir}/libpipewire-0.2.pc
-%{_pkgconfigdir}/libspa-0.1.pc
+%attr(755,root,root) %{_libdir}/libpipewire-0.3.so
+%{_includedir}/pipewire-0.3
+%{_includedir}/spa-0.2
+%{_pkgconfigdir}/libpipewire-0.3.pc
+%{_pkgconfigdir}/libspa-0.2.pc
%if %{with apidocs}
%files apidocs
%files spa-module-alsa
%defattr(644,root,root,755)
-%dir %{_libdir}/spa/alsa
+%attr(755,root,root) %{_bindir}/spa-acp-tool
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/media-session.d/alsa-monitor.conf
+%dir %{_libdir}/spa-0.2/alsa
# R: alsa-lib udev-libs
-%attr(755,root,root) %{_libdir}/spa/alsa/libspa-alsa.so
+%attr(755,root,root) %{_libdir}/spa-0.2/alsa/libspa-alsa.so
+%{_datadir}/alsa-card-profile
%files spa-module-bluez
%defattr(644,root,root,755)
-%dir %{_libdir}/spa/bluez5
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/media-session.d/bluez-monitor.conf
+%dir %{_libdir}/spa-0.2/bluez5
# R: dbus-libs sbc
-%attr(755,root,root) %{_libdir}/spa/bluez5/libspa-bluez5.so
+%attr(755,root,root) %{_libdir}/spa-0.2/bluez5/libspa-bluez5.so
%files spa-module-ffmpeg
%defattr(644,root,root,755)
-%dir %{_libdir}/spa/ffmpeg
+%dir %{_libdir}/spa-0.2/ffmpeg
# R: ffmpeg-libs
-%attr(755,root,root) %{_libdir}/spa/ffmpeg/libspa-ffmpeg.so
+%attr(755,root,root) %{_libdir}/spa-0.2/ffmpeg/libspa-ffmpeg.so
+
+%if %{with jack}
+%files spa-module-jack
+%defattr(644,root,root,755)
+%dir %{_libdir}/spa-0.2/jack
+# R: jack-audio-connection-kit-libs
+%attr(755,root,root) %{_libdir}/spa-0.2/jack/libspa-jack.so
+%endif
+
+%files spa-module-vulkan
+%defattr(644,root,root,755)
+%dir %{_libdir}/spa-0.2/vulkan
+# R: Vulkan-Loader
+%attr(755,root,root) %{_libdir}/spa-0.2/vulkan/libspa-vulkan.so
+
+%if %{with jack}
+%files jack
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/pw-jack
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/jack.conf
+%{_sysconfdir}/pipewire/media-session.d/with-jack
+%dir %attr(755,root,root) %{_libdir}/pipewire-0.3/jack
+%attr(755,root,root) %{_libdir}/pipewire-0.3/jack/libjack.so*
+%attr(755,root,root) %{_libdir}/pipewire-0.3/jack/libjacknet.so*
+%attr(755,root,root) %{_libdir}/pipewire-0.3/jack/libjackserver.so*
+%endif
+
+%files pulseaudio
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/pipewire-pulse
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/pipewire/pipewire-pulse.conf
+%{_sysconfdir}/pipewire/media-session.d/with-pulseaudio
+%{systemduserunitdir}/pipewire-pulse.service
+%{systemduserunitdir}/pipewire-pulse.socket
+
+%files -n alsa-plugin-pipewire
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/alsa-lib/libasound_module_ctl_pipewire.so
+%attr(755,root,root) %{_libdir}/alsa-lib/libasound_module_pcm_pipewire.so
+%{_datadir}/alsa/alsa.conf.d/50-pipewire.conf
+%{_datadir}/alsa/alsa.conf.d/99-pipewire-default.conf
+/lib/udev/rules.d/90-pipewire-alsa.rules
%if %{with gstreamer}
%files -n gstreamer-pipewire