%define _version 0.0.1
%define _release 1.25.c99f81a
%define _user digital-cockpit
%define _group digital-cockpit
%define _uid 1020
%define _gid 1020

%global debug_package %{nil}

Name:           qm-digital-cockpit
Version:        %{_version}
Release:        %{_release}%{?dist}
Summary:        qm-digital-cockpit files and services

License:        MIT
URL:            http://fedoraproject.org/
Source:         %{name}-%{version}-%{_release}.tar.xz

BuildRequires:  meson
BuildRequires:  systemd
BuildRequires:  systemd-rpm-macros
BuildArch:      noarch
Requires(pre):  /usr/sbin/useradd, /usr/bin/getent, /usr/bin/mkdir, /usr/bin/chown
Requires:       xdg-dbus-proxy

%description
This package contains the qm-digital-cockpit assets


%package selinux-policy
Summary:        SELinux policy module for %{name}
BuildRequires:  selinux-policy
BuildRequires:  selinux-policy-devel
BuildRequires:  make
BuildArch:      noarch
%{?selinux_requires}

%description selinux-policy
This package contains the SELinux policy module for %{name}.

%package qm-layer
Summary:        QM layer assets for %{name}
BuildArch:      noarch

%description qm-layer
This package contains QM layer assets for %{name}.

%package android-vm
Summary:        Android vm container for %{name}
BuildArch:      noarch

%description android-vm
This package contains the Android vm container for %{name}.

%package dms
Summary:        Driver Monitoring System container for %{name}
BuildArch:      noarch

%description dms
This package contains the Driver Monitoring System container for %{name}.

%package instrument-cluster
Summary:        Instrument Cluster  container for %{name}
BuildArch:      noarch

%description instrument-cluster
This package contains the Instrument Cluster container for %{name}.

%package ivi
Summary:        In-vehicle infotainment container for %{name}
BuildArch:      noarch

%description ivi
This package contains the In-vehicle infotainment container for %{name}.

%package wayland-compositor
Summary:        Wayland compositor container for %{name}
BuildArch:      noarch

%description wayland-compositor
This package contains the Wayland compositor container for %{name}.

%package wayland-compositor-native
Summary:        Wayland compositor for %{name}
BuildArch:      noarch
Requires:       weston

%description wayland-compositor-native
This package contains the Wayland compositor for %{name}.

%prep
%autosetup -p1 -n %{name}-%{version}-%{_release}

%build
%meson                 \
  -Ddc_user=%{_user}   \
  -Ddc_group=%{_group} \
  -Ddc_uid=%{_uid}     \
  -Ddc_uid=%{_gid}     \
  %{nil}
%meson_build

%install
%meson_install

# systemctl --user only works if you have a dbus session bus running
mkdir -p %{buildroot}%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants

ln -sf ../qm-session-bus-proxy.service \
       %{buildroot}%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants/qm-session-bus-proxy.service
ln -sf ../qm-system-bus-proxy.service \
       %{buildroot}%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants/qm-system-bus-proxy.service
ln -sf ../wayland-compositor.service \
       %{buildroot}%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants/wayland-compositor.service

%pre
if [ $1 = 1 ]; then
  # Initial installation
  /usr/bin/getent group %{_group} >/dev/null || /usr/sbin/groupadd -g %{_gid} %{_group}
  if ! /usr/bin/getent passwd %{_user} >/dev/null ; then
      /usr/sbin/useradd -u %{_uid} -g %{_group} -m -d %{_sharedstatedir}/%{_user} -c "%{name}" %{_user}
      /usr/bin/mkdir -p %{_sharedstatedir}/%{_user}/.config/systemd/user/
      /usr/bin/mkdir -p %{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants
      /usr/bin/chown -R %{_user}:%{_group} %{_sharedstatedir}/%{_user}/.config
  fi
fi

%post
%systemd_post digital-cockpit.service
%systemd_user_post dbus-broker.service
%systemd_user_post dbus.socket
%systemd_user_post qm-session-bus-proxy.service

%preun
%systemd_preun digital-cockpit.service
%systemd_user_preun dbus-broker.service
%systemd_user_preun dbus.socket
%systemd_user_preun qm-session-bus-proxy.service

%post selinux-policy
%selinux_modules_install %{_datadir}/selinux/packages/qm-digital-cockpit.pp.bz2

%postun selinux-policy
if [ $1 -eq 0 ]; then
    %selinux_modules_uninstall %{_datadir}/selinux/packages/qm-digital-cockpit.pp.bz2
fi

%pre qm-layer
if [ $1 = 1 ]; then
  # Initial installation
  /usr/bin/getent group %{_group} >/dev/null || /usr/sbin/groupadd -g %{_gid} %{_group}
  if ! /usr/bin/getent passwd %{_user} >/dev/null ; then
      /usr/sbin/useradd -u %{_uid} -g %{_group} -m -d %{_sharedstatedir}/%{_user} -c "%{name}" %{_user}
  fi
fi

%files
%license LICENSE
%attr(0644,root,root) %{_sysconfdir}/pam.d/digital-cockpit-autologin
%attr(0644,root,root) %{_prefix}/lib/systemd/system/digital-cockpit.service
%attr(0644,root,root) %{_prefix}/lib/systemd/user/digital-cockpit-session.target
%attr(0644,root,root) %{_prefix}/lib/systemd/system-preset/50-digital-cockpit.preset
%attr(0644,root,root) %{_prefix}/lib/systemd/user-preset/50-digital-cockpit.preset
%attr(0644,%{_user},%{_user}) %{_sharedstatedir}/%{_user}/.config/systemd/user/qm-session-bus-proxy.service
%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants/qm-session-bus-proxy.service
%attr(0644,%{_user},%{_user}) %{_sharedstatedir}/%{_user}/.config/systemd/user/qm-system-bus-proxy.service
%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants/qm-system-bus-proxy.service

%files selinux-policy
%defattr(-,root,root,0755)
%attr(0644,root,root) %{_datadir}/selinux/packages/qm-digital-cockpit.pp.bz2
%attr(0644,root,root) %{_datadir}/selinux/devel/include/contrib/qm-digital-cockpit.if

%files qm-layer


%files android-vm
%defattr(-,root,root,0755)
%attr(0644,root,root) %{_sysconfdir}/containers/systemd/android-vm.container

%files dms
%defattr(-,root,root,0755)
%attr(0644,root,root) %{_sysconfdir}/containers/systemd/dms.container

%files instrument-cluster
%defattr(-,root,root,0755)
%attr(0644,root,root) %{_sysconfdir}/containers/systemd/instrument-cluster.container

%files ivi
%defattr(-,root,root,0755)
%attr(0644,root,root) %{_sysconfdir}/containers/systemd/ivi.container

%files wayland-compositor
%defattr(-,root,root,0755)
%attr(0644,root,root) %{_sysconfdir}/containers/systemd/wayland-compositor.container

%files wayland-compositor-native
%attr(0644,%{_user},%{_user}) %{_sharedstatedir}/%{_user}/.config/systemd/user/wayland-compositor.service
%{_sharedstatedir}/%{_user}/.config/systemd/user/default.target.wants/wayland-compositor.service
%attr(0644,%{_user},%{_user}) %{_sharedstatedir}/%{_user}/.config/systemd/user/wayland-compositor.socket


%changelog
* Fri Nov 10 2023 Roberto Majadas <rmajadas@redhat.com>
-