%define commit cc12755c6c29cce1b5a0791df3d21fbe08de8c9d %define commit_short %(echo %{commit} | head -c 6) # For spec-helper %define dont_remove_rpath 1 %define api 0.3 %define spa_api 0.2 %define major 0 %define libname %mklibname %{name} %{api} %{major} %define devname %mklibname %{name} -d # Some packages depend from "pulseaudio" or "jack", # satisfy such dependencies but be sure to prive a much lower version # to avoid taking priority over real pulseaudio or jack when # version of PipeWire becomes higher. %define fake_version 0.%{version}.fake # (mikhailnov) rosa-repos-pkgprefs (rosa-repos SRPM) makes dependency solvers # prefer real jack libraries over these ones. # We do NOT filter provides from %%_libdir/*/ (Fedora does filter them) # because we have preferences set in rosa-repos-pkgprefs and pull # /etc/ld.so.conf.d/*.conf configs if jack libraries from pipewire are installed. %define libjack %mklibname jack_pipewire 0 %define libjacknet %mklibname jacknet_pipewire 0 %define libjackserver %mklibname jackserver_pipewire 0 # (mikhailnov) If someone needs both 32 and 64 bit pipewire-jack or pipewire-alsa, # dnf will allow him to run: # dnf install 'pipewire-jack(x86-64)' 'pipewire-jack(x86-32)' # RPM file coloring will do the magic of dealing with same files in both packages. # I do not see sense in inventing strange subpackages to avoid this. Summary: Media Sharing Server Name: pipewire Version: 0.3.23 Release: 2.git%{commit_short}.1 License: MIT Group: System/Servers Url: https://pipewire.org/ #Source0: https://github.com/PipeWire/pipewire/archive/%{version}/%{name}-%{version}.tar.gz Source0: https://github.com/PipeWire/pipewire/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz Source1: %{name}.sysusers.conf BuildRequires: doxygen BuildRequires: graphviz BuildRequires: meson BuildRequires: xmltoman BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(bluez) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(gio-unix-2.0) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gstreamer-allocators-1.0) BuildRequires: pkgconfig(gstreamer-base-1.0) BuildRequires: pkgconfig(gstreamer-net-1.0) BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) BuildRequires: pkgconfig(jack) BuildRequires: pkgconfig(libpulse) BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(libv4l2) BuildRequires: pkgconfig(sbc) BuildRequires: pkgconfig(sdl2) BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(vulkan) BuildRequires: pkgconfig(ncurses) Requires: %{libname} = %{EVRD} Requires: rtkit Recommends: %{name}-utils = %{EVRD} Recommends: %{name}-alsa = %{EVRD} Recommends: %{name}-jack = %{EVRD} Recommends: %{name}-gstreamer = %{EVRD} Requires(post): /bin/systemd-sysusers %description PipeWire is a multimedia server for Linux and other Unix like operating systems. %files -f pipewire.lang %doc COPYING LICENSE README.md %config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf %config(noreplace) %{_sysconfdir}/%{name}/client*.conf %dir %{_sysconfdir}/%{name}/media-session.d %{_bindir}/%{name} %{_bindir}/%{name}-media-session %{_mandir}/man1/%{name}.1* %{_mandir}/man5/%{name}.conf.5* %{_sysusersdir}/%{name}.conf %{_userunitdir}/%{name}* %{_datadir}/alsa-card-profile/mixer/paths %{_datadir}/alsa-card-profile/mixer/profile-sets %{_udevrulesdir}/90-%{name}-alsa.rules %{_libdir}/%{name}-%{api}/lib%{name}-*.so %{_libdir}/spa-%{spa_api} %{_sysconfdir}/pipewire/media-session.d/* %post %sysusers_create %{name}.conf %systemd_user_post %{name}.service %systemd_user_post %{name}.socket #------------------------------------------------------------------------- %package -n %{libname} Summary: Libraries for PipeWire clients Group: System/Libraries %description -n %{libname} This package contains the runtime libraries for any application that wishes to interface with a PipeWire media server. %files -n %{libname} %doc COPYING %{_libdir}/lib%{name}-%{api}.so.%{major}* #------------------------------------------------------------------------- %package -n %{devname} Summary: Headers and libraries for PipeWire client development Group: Development/C++ Requires: %{libname} = %{EVRD} Requires: %{name}-alsa = %{EVRD} Requires: %{name}-jack = %{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} %doc COPYING %{_includedir}/%{name}-%{api} %{_includedir}/spa-%{spa_api} %{_libdir}/lib%{name}-%{api}.so %{_libdir}/pkgconfig/lib%{name}-%{api}.pc %{_libdir}/pkgconfig/libspa-%{spa_api}.pc %{_libdir}/%{name}-%{api}/jack/libjack*.so %{_defaultdocdir}/%{name}/html #------------------------------------------------------------------------- %package utils Summary: PipeWire media server utilities Group: System/Servers Requires: %{name} = %{EVRD} %description utils This package contains command line utilities for the PipeWire media server. %files utils %doc COPYING LICENSE README.md %{_bindir}/pw-mon %{_bindir}/pw-metadata %{_bindir}/pw-mididump %{_bindir}/pw-midiplay %{_bindir}/pw-midirecord %{_bindir}/pw-cli %{_bindir}/pw-dot %{_bindir}/pw-top %{_bindir}/pw-cat %{_bindir}/pw-play %{_bindir}/pw-profiler %{_bindir}/pw-record %{_bindir}/pw-reserve %{_bindir}/pw-dump %{_bindir}/spa-acp-tool %{_bindir}/spa-inspect %{_bindir}/spa-monitor %{_bindir}/spa-resample %{_bindir}/spa-json-dump %{_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* #------------------------------------------------------------------------- %package jack Summary: PipeWire JACK implementation Group: System/Libraries Requires: %{name} = %{EVRD} # XXX cycled deps... Requires: %{libjack}%{_isa} = %{EVRD} Requires: %{libjacknet}%{_isa} = %{EVRD} Requires: %{libjackserver}%{_isa} = %{EVRD} Provides: jack = %{fake_version} Provides: jack%{_isa} = %{fake_version} # jackit is a provide of jack Provides: jackit = %{fake_version} Provides: jackit%{_isa} = %{fake_version} %description jack This package provides a JACK implementation based on PipeWire. %files jack %{_bindir}/pw-jack %{_mandir}/man1/pw-jack.1* %config(noreplace) %{_sysconfdir}/pipewire/media-session.d/with-jack %config(noreplace) %{_sysconfdir}/ld.so.conf.d/pipewire-jack-%{_arch}.conf %config(noreplace) %{_sysconfdir}/pipewire/jack.conf #------------------------------------------------------------------------- %package -n %{libjack} Summary: PipeWire Jack implementation Group: System/Libraries Requires: %{name}-jack%{_isa} = %{EVRD} # prefer it over native Jack library if pipewire is installed Enhances: pipewire %description -n %{libjack} libjack.so.0 from PipeWire, ABI-compatible with libjack.so.0 from Jack %files -n %{libjack} %{_libdir}/pipewire-%{api}/jack/libjack.so.0* #------------------------------------------------------------------------- %package -n %{libjacknet} Summary: PipeWire Jack implementation Group: System/Libraries Requires: %{name}-jack%{_isa} = %{EVRD} # prefer it over native Jack library if pipewire is installed Enhances: pipewire %description -n %{libjacknet} libjacknet.so.0 from PipeWire, ABI-compatible with libjacknet.so.0 from Jack %files -n %{libjacknet} %{_libdir}/pipewire-%{api}/jack/libjacknet.so.0* #------------------------------------------------------------------------- %package -n %{libjackserver} Summary: PipeWire Jack implementation Group: System/Libraries Requires: %{name}-jack%{_isa} = %{EVRD} # prefer it over native Jack library if pipewire is installed Enhances: pipewire %description -n %{libjackserver} libjackserver.so.0 from PipeWire, ABI-compatible with libjackserver.so.0 from Jack %files -n %{libjackserver} %{_libdir}/pipewire-%{api}/jack/libjackserver.so.0* #------------------------------------------------------------------------- %package pulseaudio Summary: PipeWire PulseAudio implementation Group: System/Libraries Requires: %{name} = %{EVRD} # compat with Fedora Provides: %{name}-pulse = %{EVRD} Provides: %{name}-pulse%{_isa} = %{EVRD} Provides: pulseaudio = %{fake_version} Provides: pulseaudio%{_isa} = %{fake_version} %description pulseaudio This package provides a PulseAudio implementation based on PipeWire. Native PulseAudio libraries (libpulse.so.0 etc.) from PulseAudio communicate with a replacement of PulseAudio daemon from this package. %files pulseaudio # pipewire-pulse imitates real pulseaudio, libpulse.so.0 from pulseaudio # is used by applications to work with this fake PulseAudio server %{_bindir}/pipewire-pulse %config(noreplace) %{_sysconfdir}/pipewire/media-session.d/with-pulseaudio %config(noreplace) %{_sysconfdir}/pipewire/pipewire-pulse.conf %post pulseaudio %systemd_user_post pipewire-pulse.service %systemd_user_post pipewire-pulse.socket #------------------------------------------------------------------------- %package alsa Summary: PipeWire media server ALSA support Group: System/Servers Requires: %{name} = %{EVRD} %description alsa This package contains an ALSA plugin for the PipeWire media server. %files alsa %doc COPYING %config(noreplace) %{_sysconfdir}/alsa/conf.d/50-%{name}.conf %config(noreplace) %{_sysconfdir}/alsa/conf.d/99-%{name}-default.conf %{_datadir}/alsa/alsa.conf.d/50-%{name}.conf %{_datadir}/alsa/alsa.conf.d/99-%{name}-default.conf %{_libdir}/alsa-lib/libasound_module_ctl_%{name}.so %{_libdir}/alsa-lib/libasound_module_pcm_%{name}.so #------------------------------------------------------------------------- %package gstreamer Summary: GStreamer elements for PipeWire Group: System/Servers Requires: %{name} = %{EVRD} %description gstreamer This package contains GStreamer elements to interface with a PipeWire media server. %files gstreamer %doc COPYING %{_libdir}/gstreamer-1.0/libgstpipewire.so #------------------------------------------------------------------------- %prep %autosetup -p1 -n %{name}-%{commit} %build %meson \ -Ddocs="enabled" \ -Dman="enabled" \ -Dgstreamer="enabled" \ -Dsystemd="enabled" %meson_build %install %meson_install mkdir -p %{buildroot}%{_sysconfdir}/alsa/conf.d/ cp %{buildroot}%{_datadir}/alsa/alsa.conf.d/50-%{name}.conf %{buildroot}%{_sysconfdir}/alsa/conf.d/50-%{name}.conf cp %{buildroot}%{_datadir}/alsa/alsa.conf.d/99-%{name}-default.conf %{buildroot}%{_sysconfdir}/alsa/conf.d/99-%{name}-default.conf #install sysuser config install -d %{buildroot}%{_sysusersdir}/ install -m0644 %{SOURCE1} %{buildroot}%{_sysusersdir}/%{name}.conf # Load PipeWire's ABI compatible libraries instead of native ones mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d echo "%{_libdir}/pipewire-%{api}/jack" > %{buildroot}%{_sysconfdir}/ld.so.conf.d/pipewire-jack-%{_arch}.conf %find_lang pipewire