pipewire/pipewire.spec
Mikhail Novosyolov ac57a5019f Build git snapshot from 14.03.2021 14:23 MSK
There are strange problems after updating from 0.3.22 to 0.3.23, git always has some useful fixes here... Trying it.
2021-03-14 14:28:42 +03:00

340 lines
11 KiB
RPMSpec

%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