File wireplumber.spec of Package wireplumber

#
# spec file for package wireplumber
#
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

%define pipewire_minimum_version 0.3.43
%define apiver 0.4
%define apiver_str 0_4
%define sover 0

%if 0%{?suse_version}
%define libwireplumber libwireplumber-%{apiver_str}-%{sover}
%define libwireplumber_requires %{libwireplumber}
%bcond_without split_config
%else
%define libwireplumber %{name}-libs
%define libwireplumber_requires %{name}-libs%{?_isa}
%bcond_with    split_config
%endif

Name:           wireplumber
Version:        0
Release:        100
Summary:        Session / policy manager implementation for PipeWire
License:        MIT
URL:            https://gitlab.freedesktop.org/pipewire/wireplumber
Source0:        wireplumber-%{version}.tar.xz
Source1:        split-config-file.py
Patch1:         fix-catia-aliases.patch
# docs
BuildRequires:  doxygen
BuildRequires:  graphviz
BuildRequires:  python3-lxml
# /docs
BuildRequires:  cmake
BuildRequires:  meson >= 0.54.0

#!BuildIgnore:    pipewire-session-manager
BuildRequires:  pkgconfig
%if 0%{?suse_version}
BuildRequires:  fdupes
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(lua5.3)
%else
BuildRequires:  pkgconfig(lua)
%endif
BuildRequires:  pkgconfig(glib-2.0)
BuildRequires:  pkgconfig(gobject-2.0)
BuildRequires:  pkgconfig(gmodule-2.0)
BuildRequires:  pkgconfig(gio-unix-2.0)
BuildRequires:  pkgconfig(gobject-introspection-1.0)
BuildRequires:  pkgconfig(libspa-0.2) >= 0.2
BuildRequires:  pkgconfig(libpipewire-0.3) >= %{pipewire_minimum_version}
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  pkgconfig(systemd)

# Make sure that we have -libs package in the same version
Requires:       %{libwireplumber_requires} = %{version}-%{release}

Requires:       pipewire >= %{pipewire_minimum_version}
Provides:       pipewire-session-manager
Conflicts:      pipewire-media-session
%{?systemd_ordering}

%description
WirePlumber is a modular session / policy manager for PipeWire and
a GObject-based high-level library that wraps PipeWire's API,
providing convenience for writing the daemon's modules as well as
external tools for managing PipeWire.

%package audio
Summary:        Session / policy manager implementation for PipeWire (audio support)
Requires:       %{name} = %{version}
Requires:       %{libwireplumber} = %{version}
Conflicts:      pulseaudio
Recommends:     pipewire-pulseaudio
Supplements:    (pipewire-pulseaudio and wireplumber)

%description audio
WirePlumber is a modular session / policy manager for PipeWire and
a GObject-based high-level library that wraps PipeWire's API,
providing convenience for writing the daemon's modules as well as
external tools for managing PipeWire.

This package enables the use of alsa devices in PipeWire.

%package devel
Summary:        Session / policy manager implementation for PipeWire
Requires:       %{name} = %{version}-%{release}
Requires:       %{libwireplumber_requires} = %{version}-%{release}

%description devel
WirePlumber is a modular session / policy manager for PipeWire and
a GObject-based high-level library that wraps PipeWire's API,
providing convenience for writing the daemon's modules as well as
external tools for managing PipeWire.

This package provides all the necessary files for development with WirePlumber

%package -n %{libwireplumber}
Summary:        Session / policy manager implementation for PipeWire
Recommends:     %{name}%{?_isa} = %{version}-%{release}

%description -n %{libwireplumber}
WirePlumber is a modular session / policy manager for PipeWire and
a GObject-based high-level library that wraps PipeWire's API,
providing convenience for writing the daemon's modules as well as
external tools for managing PipeWire.

This package provides the wireplumber shared library.

%package -n typelib-1_0-Wp-%{apiver_str}
Summary:        Introspection bindings for libwireplumber

%description -n typelib-1_0-Wp-%{apiver_str}
WirePlumber is a modular session / policy manager for PipeWire and
a GObject-based high-level library that wraps PipeWire's API,
providing convenience for writing the daemon's modules as well as
external tools for managing PipeWire.

This package provides the GObject Introspection bindings for
the wireplumber shared library.

%prep
%autosetup -p1

%if %{with split_config}
pushd src/config/main.lua.d
python3 %{SOURCE1}
rm 90-enable-all.lua
popd
%endif

%build
%meson -Dsystem-lua=true \
       -Ddoc=disabled \
       -Dsystemd=enabled \
       -Dsystemd-user-service=true \
       -Dintrospection=enabled \
       -Delogind=disabled
%meson_build

%install
%meson_install

# Create local config skeleton
mkdir -p %{buildroot}%{_sysconfdir}/wireplumber/{bluetooth.lua.d,common,main.lua.d,policy.lua.d}

%if 0%{?suse_version}
%fdupes -s %{buildroot}/%{_datadir}/doc/pipewire/html
%endif

%ifnarch %ix86 ppc64
%check
export XDG_RUNTIME_DIR=/tmp
%meson_test
%endif

%if 0%{?suse_version}
# suse
%pre
%systemd_user_pre wireplumber.service

%post
%systemd_user_post wireplumber.service

%preun
%systemd_user_preun wireplumber.service

%postun
%systemd_user_postun wireplumber.service

%post   -n %{libwireplumber} -p /sbin/ldconfig
%postun -n %{libwireplumber} -p /sbin/ldconfig

%else
# none suse
%posttrans
%systemd_user_post %{name}.service

%preun
%systemd_user_preun %{name}.service
%endif

%files
%license LICENSE
%{_bindir}/wireplumber
%{_bindir}/wpctl
%{_bindir}/wpexec
%dir %{_sysconfdir}/wireplumber
%dir %{_sysconfdir}/wireplumber/bluetooth.lua.d
%dir %{_sysconfdir}/wireplumber/common
%dir %{_sysconfdir}/wireplumber/main.lua.d
%dir %{_sysconfdir}/wireplumber/policy.lua.d
%{_datadir}/wireplumber
%if %{with split_config}
%exclude %{_datadir}/wireplumber/main.lua.d/90-2-1-enable-alsa.lua
%endif
%{_userunitdir}/wireplumber.service
%{_userunitdir}/wireplumber@.service

%files -n %{libwireplumber}
%license LICENSE
%dir %{_libdir}/wireplumber-%{apiver}
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-default-nodes-api.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-default-nodes.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-default-profile.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-file-monitor-api.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-logind.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-lua-scripting.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-metadata.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-mixer-api.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-portal-permissionstore.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-reserve-device.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-audio-adapter.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-audio-endpoint.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-node.so
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-standard-link.so
%{_libdir}/libwireplumber-%{apiver}.so.%{sover}*
%if 0%{?suse_version}
%files -n typelib-1_0-Wp-%{apiver_str}
%endif
%{_libdir}/girepository-1.0/Wp-%{apiver}.typelib

%if %{with split_config}
%files audio
%{_datadir}/wireplumber/main.lua.d/90-2-1-enable-alsa.lua
%endif

%files devel
%{_includedir}/wireplumber-%{apiver}
%{_libdir}/libwireplumber-%{apiver}.so
%{_libdir}/pkgconfig/wireplumber-%{apiver}.pc
%{_datadir}/gir-1.0/Wp-%{apiver}.gir

%changelog
openSUSE Build Service is sponsored by