%global api 0.3 %global spa_api 0.2 %define major 0 %define libname %mklibname %{name} %{api} %{major} %define devname %mklibname %{name} -d #global snap 20141103 #global gitrel 327 #global gitcommit aec811798cd883a454b9b5cd82c77831906bbd2d #global shortcommit %(c=%{gitcommit}; echo ${c:0:5}) %global enable_alsa 1 %global enable_jack 1 %global enable_pulse 1 %global enable_vulkan 1 # libpulse and libjack subpackages shouldn't have library provides # as the files they ship are not in the linker path. We also have # to exclude requires or else the subpackages wind up requiring the # libs they're no longer providing # FIXME: the jack-audio-connection-kit and pulseaudio subpackages # should get the auto-generated Provides: instead, but they do not, # either with or without the lines below, not sure how to fix that %global __provides_exclude_from ^%{_libdir}/pipewire-%{api}/.*$ %global __requires_exclude_from ^%{_libdir}/pipewire-%{api}/.*$ Name: pipewire Summary: Media Sharing Server Version: 0.3.13 Release: 4%{?snap:.%{snap}git%{shortcommit}}%{?dist} Group: System/Servers License: MIT URL: https://pipewire.org/ %if 0%{?gitrel} # git clone git://anongit.freedesktop.org/gstreamer/pipewire # cd pipewire; git reset --hard %{gitcommit}; ./autogen.sh; make; make distcheck Source0: pipewire-%{version}-%{gitrel}-g%{shortcommit}.tar.gz %else Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{version}/pipewire-%{version}.tar.gz %endif Source1: %{name}.sysusers.conf ## upstream patches Patch1: 0001-pulse-limit-get_writable_size.patch Patch2: 0001-alsa-monitor-avoid-crash-in-release.patch Patch3: 0001-acp-pass-right-user_data-to-event.patch Patch4: 0001-media-session-make-sure-we-don-t-read-invalid-data.patch ## upstreamable patches ## fedora patches Patch0: 0001-conf-disable-bluez5.patch BuildRequires: meson >= 0.49.0 BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(glib-2.0) >= 2.32 BuildRequires: pkgconfig(gio-unix-2.0) >= 2.32 BuildRequires: pkgconfig(gstreamer-1.0) >= 1.10.0 BuildRequires: pkgconfig(gstreamer-base-1.0) >= 1.10.0 BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) >= 1.10.0 BuildRequires: pkgconfig(gstreamer-net-1.0) >= 1.10.0 BuildRequires: pkgconfig(gstreamer-allocators-1.0) >= 1.10.0 %if 0%{?enable_vulkan} BuildRequires: pkgconfig(vulkan) %endif BuildRequires: pkgconfig(bluez) BuildRequires: pkgconfig(systemd) >= 184 BuildRequires: pkgconfig(libv4l2) BuildRequires: doxygen BuildRequires: xmltoman BuildRequires: graphviz BuildRequires: pkgconfig(sbc) BuildRequires: pkgconfig(sdl2) Requires(post): /bin/systemd-sysusers Requires: %{libname} = %{EVRD} Requires: systemd >= 184 Requires: rtkit %description PipeWire is a multimedia server for Linux and other Unix like operating systems. %files %license LICENSE COPYING %doc README.md %{_userunitdir}/pipewire.* %{_bindir}/pipewire %{_bindir}/pipewire-media-session %{_mandir}/man1/pipewire.1* %dir %{_sysconfdir}/pipewire/ %config(noreplace) %{_sysconfdir}/pipewire/pipewire.conf %{_mandir}/man5/pipewire.conf.5* %{_sysusersdir}/%{name}.conf %post # create user and group %sysusers_create %{name}.conf %systemd_user_post pipewire.service %systemd_user_post pipewire.socket #------------------------------------------------------------------------- %package -n %{libname} Summary: Libraries for PipeWire clients Group: System/Libraries Recommends: %{name}%{?_isa} = %{EVRD} %description -n %{libname} This package contains the runtime libraries for any application that wishes to interface with a PipeWire media server. %files -n %{libname} %license LICENSE COPYING %doc README.md %{_libdir}/libpipewire-%{api}.so.%{major}* %{_libdir}/pipewire-%{api}/libpipewire-*.so %dir %{_datadir}/alsa-card-profile/ %dir %{_datadir}/alsa-card-profile/mixer/ %{_datadir}/alsa-card-profile/mixer/paths/ %{_datadir}/alsa-card-profile/mixer/profile-sets/ %{_prefix}/lib/udev/rules.d/90-pipewire-alsa.rules %dir %{_libdir}/spa-%{spa_api} %{_libdir}/spa-%{spa_api}/alsa/ %{_libdir}/spa-%{spa_api}/audioconvert/ %{_libdir}/spa-%{spa_api}/audiomixer/ %{_libdir}/spa-%{spa_api}/bluez5/ %{_libdir}/spa-%{spa_api}/control/ %{_libdir}/spa-%{spa_api}/support/ %{_libdir}/spa-%{spa_api}/v4l2/ %{_libdir}/spa-%{spa_api}/videoconvert/ %if 0%{?enable_vulkan} %{_libdir}/spa-%{spa_api}/vulkan/ %endif #------------------------------------------------------------------------- %package gstreamer Summary: GStreamer elements for PipeWire Group: System/Servers Recommends: %{name}%{?_isa} = %{EVRD} Requires: %{libname} = %{EVRD} %description gstreamer This package contains GStreamer elements to interface with a PipeWire media server. %files gstreamer %{_libdir}/gstreamer-1.0/libgstpipewire.* #------------------------------------------------------------------------- %package -n %{devname} Summary: Headers and libraries for PipeWire client development Group: Development/C++ Requires: %{libname} = %{EVRD} Provides: %{name}-devel = %{EVRD} %description -n %{devname} Headers and libraries for developing applications that can communicate with a PipeWire media server. %files -n %{devname} %{_libdir}/libpipewire-%{api}.so %{_includedir}/pipewire-%{api}/ %{_includedir}/spa-%{spa_api}/ %{_libdir}/pkgconfig/libpipewire-%{api}.pc %{_libdir}/pkgconfig/libspa-%{spa_api}.pc #------------------------------------------------------------------------- %package doc Summary: PipeWire media server documentation Group: Documentation %description doc This package contains documentation for the PipeWire media server. %files doc %{_datadir}/doc/pipewire/html #------------------------------------------------------------------------- %package utils Summary: PipeWire media server utilities Group: System/Servers Requires: %{name}%{?_isa} = %{EVRD} Requires: %{libname} = %{EVRD} %description utils This package contains command line utilities for the PipeWire media server. %files utils %{_bindir}/pw-mon %{_bindir}/pw-metadata %{_bindir}/pw-mididump %{_bindir}/pw-midiplay %{_bindir}/pw-midirecord %{_bindir}/pw-cli %{_bindir}/pw-dot %{_bindir}/pw-cat %{_bindir}/pw-play %{_bindir}/pw-profiler %{_bindir}/pw-record %{_bindir}/pw-reserve %{_mandir}/man1/pw-mon.1* %{_mandir}/man1/pw-cli.1* %{_mandir}/man1/pw-cat.1* %{_mandir}/man1/pw-dot.1* %{_mandir}/man1/pw-metadata.1* %{_mandir}/man1/pw-mididump.1* %{_mandir}/man1/pw-profiler.1* %{_bindir}/spa-acp-tool %{_bindir}/spa-inspect %{_bindir}/spa-monitor %{_bindir}/spa-resample #------------------------------------------------------------------------- %if 0%{?enable_alsa} %package alsa Summary: PipeWire media server ALSA support Group: System/Servers BuildRequires: pkgconfig(alsa) Recommends: %{name}%{?_isa} = %{EVRD} Requires: %{libname} = %{EVRD} %description alsa This package contains an ALSA plugin for the PipeWire media server. %files alsa %{_libdir}/alsa-lib/libasound_module_pcm_pipewire.so %{_libdir}/alsa-lib/libasound_module_ctl_pipewire.so %{_datadir}/alsa/alsa.conf.d/50-pipewire.conf %{_datadir}/alsa/alsa.conf.d/99-pipewire-default.conf %config(noreplace) %{_sysconfdir}/alsa/conf.d/50-pipewire.conf %config(noreplace) %{_sysconfdir}/alsa/conf.d/99-pipewire-default.conf %endif #------------------------------------------------------------------------- %if 0%{?enable_jack} %package libjack Summary: PipeWire libjack library Group: System/Servers BuildRequires: pkgconfig(jack) >= 1.9.10 Requires: %{libname} = %{EVRD} Recommends: %{name}%{?_isa} = %{EVRD} # Renamed in F32 Obsoletes: pipewire-jack < 0.2.96-2 %description libjack This package contains a PipeWire replacement for JACK audio connection kit "libjack" library. %files libjack %{_libdir}/pipewire-%{api}/jack/libjack.so* %{_libdir}/pipewire-%{api}/jack/libjacknet.so* %{_libdir}/pipewire-%{api}/jack/libjackserver.so* %{_bindir}/pw-jack %{_mandir}/man1/pw-jack.1* #------------------------------------------------------------------------- %package jack-audio-connection-kit Summary: PipeWire JACK implementation Group: System/Servers BuildRequires: pkgconfig(jack) >= 1.9.10 Requires: %{name}-libjack%{?_isa} = %{EVRD} Recommends: %{name}%{?_isa} = %{EVRD} Conflicts: jack-audio-connection-kit Conflicts: jack-audio-connection-kit-dbus Provides: jack-audio-connection-kit %description jack-audio-connection-kit This package provides a JACK implementation based on PipeWire %files jack-audio-connection-kit %{_libdir}/libjack.so.* %{_libdir}/libjackserver.so.* %{_libdir}/libjacknet.so.* #------------------------------------------------------------------------- %package plugin-jack Summary: PipeWire media server JACK support Group: System/Servers BuildRequires: pkgconfig(jack) Recommends: %{name}%{?_isa} = %{EVRD} Requires: %{libname} = %{EVRD} %description plugin-jack This package contains the PipeWire spa plugin to connect to a JACK server. %files plugin-jack %{_libdir}/spa-%{spa_api}/jack/ %endif #------------------------------------------------------------------------- %if 0%{?enable_pulse} %package libpulse Summary: PipeWire libpulse library Group: System/Servers BuildRequires: pulseaudio-devel Requires: %{libname} = %{EVRD} Recommends: %{name}%{?_isa} = %{EVRD} # Renamed in F32 Obsoletes: pipewire-pulseaudio < 0.2.96-2 %description libpulse This package contains a PipeWire replacement for PulseAudio "libpulse" library. %files libpulse %{_libdir}/pipewire-%{api}/pulse/libpulse.so* %{_libdir}/pipewire-%{api}/pulse/libpulse-simple.so* %{_libdir}/pipewire-%{api}/pulse/libpulse-mainloop-glib.so* %{_bindir}/pw-pulse %{_mandir}/man1/pw-pulse.1* #------------------------------------------------------------------------- %package pulseaudio Summary: PipeWire PulseAudio implementation Group: System/Servers Recommends: %{name}%{?_isa} = %{EVRD} Requires: %{name}-libpulse%{?_isa} = %{EVRD} BuildRequires: pulseaudio-devel Conflicts: pulseaudio Conflicts: pulseaudio-glib2 Provides: pulseaudio Provides: pulseaudio-glib2 %description pulseaudio This package provides a PulseAudio implementation based on PipeWire %files pulseaudio %{_libdir}/libpulse.so.0 %{_libdir}/libpulse-simple.so.0 %{_libdir}/libpulse-mainloop-glib.so.0 %endif #------------------------------------------------------------------------- %prep %autosetup -p1 -T -b0 -n %{name}-%{version}%{?gitrel:-%{gitrel}-g%{shortcommit}} %build %meson \ -D docs=true -D man=true -D gstreamer=true -D systemd=true \ %{!?enable_jack:-D jack=false -D pipewire-jack=false} \ %{!?enable_pulse:-D pipewire-pulseaudio=false} \ %{!?enable_alsa:-D pipewire-alsa=false} \ %{!?enable_vulkan:-D vulkan=false} %meson_build %install %meson_install %if 0%{?enable_jack} ln -s pipewire-%{api}/jack/libjack.so.0 %{buildroot}%{_libdir}/libjack.so.0.1.0 ln -s libjack.so.0.1.0 %{buildroot}%{_libdir}/libjack.so.0 ln -s pipewire-%{api}/jack/libjackserver.so.0 %{buildroot}%{_libdir}/libjackserver.so.0.1.0 ln -s libjackserver.so.0.1.0 %{buildroot}%{_libdir}/libjackserver.so.0 ln -s pipewire-%{api}/jack/libjacknet.so.0 %{buildroot}%{_libdir}/libjacknet.so.0.1.0 ln -s libjacknet.so.0.1.0 %{buildroot}%{_libdir}/libjacknet.so.0 %endif %if 0%{?enable_pulse} ln -s pipewire-%{api}/pulse/libpulse.so.0 %{buildroot}%{_libdir}/libpulse.so.0 ln -s pipewire-%{api}/pulse/libpulse-simple.so.0 %{buildroot}%{_libdir}/libpulse-simple.so.0 ln -s pipewire-%{api}/pulse/libpulse-mainloop-glib.so.0 %{buildroot}%{_libdir}/libpulse-mainloop-glib.so.0 %endif %if 0%{?enable_alsa} mkdir -p %{buildroot}%{_sysconfdir}/alsa/conf.d/ cp %{buildroot}%{_datadir}/alsa/alsa.conf.d/50-pipewire.conf \ %{buildroot}%{_sysconfdir}/alsa/conf.d/50-pipewire.conf cp %{buildroot}%{_datadir}/alsa/alsa.conf.d/99-pipewire-default.conf \ %{buildroot}%{_sysconfdir}/alsa/conf.d/99-pipewire-default.conf %endif # upstream should use udev.pc mkdir -p %{buildroot}%{_prefix}/lib/udev/rules.d mv -fv %{buildroot}/lib/udev/rules.d/90-pipewire-alsa.rules %{buildroot}%{_prefix}/lib/udev/rules.d #install sysuser config install -d %{buildroot}%{_sysusersdir}/ install -m0644 %{SOURCE1} %{buildroot}%{_sysusersdir}/%{name}.conf %check %meson_test || TESTS_ERROR=$? if [ "${TESTS_ERROR}" != "" ]; then echo "test failed" fi