pipewire/pipewire.spec

400 lines
12 KiB
RPMSpec
Raw Normal View History

2020-10-04 20:34:07 +09:00
%global api 0.3
%global spa_api 0.2
%define major 0
2018-10-10 17:05:21 +03:00
%define libname %mklibname %{name} %{api} %{major}
%define devname %mklibname %{name} -d
2020-10-04 20:34:07 +09:00
#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}/.*$
2018-10-10 17:05:21 +03:00
Name: pipewire
Summary: Media Sharing Server
2020-10-04 20:34:07 +09:00
Version: 0.3.13
Release: 4%{?snap:.%{snap}git%{shortcommit}}%{?dist}
2018-10-10 17:05:21 +03:00
Group: System/Servers
2020-10-04 20:34:07 +09:00
License: MIT
2018-10-10 17:05:21 +03:00
URL: https://pipewire.org/
2020-10-04 20:34:07 +09:00
%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
2018-10-10 17:05:21 +03:00
## upstream patches
2020-10-04 20:34:07 +09:00
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
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
## upstreamable patches
## fedora patches
Patch0: 0001-conf-disable-bluez5.patch
BuildRequires: meson >= 0.49.0
2018-10-10 17:05:21 +03:00
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
2020-10-04 20:34:07 +09:00
%if 0%{?enable_vulkan}
BuildRequires: pkgconfig(vulkan)
%endif
BuildRequires: pkgconfig(bluez)
2018-10-10 17:05:21 +03:00
BuildRequires: pkgconfig(systemd) >= 184
BuildRequires: pkgconfig(libv4l2)
2020-10-04 20:34:07 +09:00
BuildRequires: doxygen
BuildRequires: xmltoman
BuildRequires: graphviz
2018-10-10 17:05:21 +03:00
BuildRequires: pkgconfig(sbc)
BuildRequires: pkgconfig(sdl2)
2020-10-04 20:34:07 +09:00
Requires(post): /bin/systemd-sysusers
Requires: %{libname} = %{EVRD}
2018-10-10 17:05:21 +03:00
Requires: systemd >= 184
Requires: rtkit
%description
PipeWire is a multimedia server for Linux and other Unix like operating
systems.
2018-10-10 17:25:43 +03:00
%files
2020-10-04 20:34:07 +09:00
%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
2018-10-10 17:05:21 +03:00
Group: System/Libraries
2020-10-04 20:34:07 +09:00
Recommends: %{name}%{?_isa} = %{EVRD}
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%description -n %{libname}
This package contains the runtime libraries for any application that wishes
to interface with a PipeWire media server.
2018-10-10 17:05:21 +03:00
2018-10-10 17:25:43 +03:00
%files -n %{libname}
2020-10-04 20:34:07 +09:00
%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
2018-10-10 17:25:43 +03:00
2020-10-04 20:34:07 +09:00
#-------------------------------------------------------------------------
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%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
2018-10-10 17:05:21 +03:00
Group: Development/C++
2020-10-04 20:34:07 +09:00
Requires: %{libname} = %{EVRD}
Provides: %{name}-devel = %{EVRD}
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%description -n %{devname}
Headers and libraries for developing applications that can communicate with
a PipeWire media server.
2018-10-10 17:05:21 +03:00
2018-10-10 17:25:43 +03:00
%files -n %{devname}
2020-10-04 20:34:07 +09:00
%{_libdir}/libpipewire-%{api}.so
%{_includedir}/pipewire-%{api}/
%{_includedir}/spa-%{spa_api}/
%{_libdir}/pkgconfig/libpipewire-%{api}.pc
2018-10-10 17:25:43 +03:00
%{_libdir}/pkgconfig/libspa-%{spa_api}.pc
2020-10-04 20:34:07 +09:00
#-------------------------------------------------------------------------
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%package doc
2018-10-10 17:05:21 +03:00
Summary: PipeWire media server documentation
Group: Documentation
2020-10-04 20:34:07 +09:00
%description doc
2018-10-10 17:05:21 +03:00
This package contains documentation for the PipeWire media server.
2020-10-04 20:34:07 +09:00
%files doc
%{_datadir}/doc/pipewire/html
#-------------------------------------------------------------------------
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%package utils
2018-10-10 17:05:21 +03:00
Summary: PipeWire media server utilities
Group: System/Servers
2020-10-04 20:34:07 +09:00
Requires: %{name}%{?_isa} = %{EVRD}
Requires: %{libname} = %{EVRD}
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%description utils
This package contains command line utilities for the PipeWire media server.
2018-10-10 17:05:21 +03:00
2018-10-10 17:25:43 +03:00
%files utils
2020-10-04 20:34:07 +09:00
%{_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
2018-10-10 17:25:43 +03:00
%{_bindir}/spa-inspect
2020-10-04 20:34:07 +09:00
%{_bindir}/spa-monitor
%{_bindir}/spa-resample
2018-10-10 17:25:43 +03:00
2020-10-04 20:34:07 +09:00
#-------------------------------------------------------------------------
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%if 0%{?enable_alsa}
%package alsa
Summary: PipeWire media server ALSA support
2018-10-10 17:05:21 +03:00
Group: System/Servers
2020-10-04 20:34:07 +09:00
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
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%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
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
%description libjack
This package contains a PipeWire replacement for JACK audio connection kit
"libjack" library.
2018-10-10 17:25:43 +03:00
2020-10-04 20:34:07 +09:00
%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
#-------------------------------------------------------------------------
2018-10-10 17:05:21 +03:00
%prep
2020-10-04 20:34:07 +09:00
%autosetup -p1 -T -b0 -n %{name}-%{version}%{?gitrel:-%{gitrel}-g%{shortcommit}}
2018-10-10 17:05:21 +03:00
%build
2020-10-04 20:34:07 +09:00
%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}
2018-10-10 17:05:21 +03:00
%meson_build
%install
%meson_install
2020-10-04 20:34:07 +09:00
%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
2018-10-10 17:05:21 +03:00
2020-10-04 20:34:07 +09:00
# 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