Package dkms: Specfile

# SPDX-License-Identifier: GPL-2.0-only
%define _unpackaged_files_terminate_build 1

# Based on dkms.spec from the source.

Summary: Dynamic Kernel Module Support Framework
Name: dkms
Version: 3.0.10
Release: alt1
License: GPL-2.0-or-later
Group: System/Kernel and hardware
Url: https://github.com/dell/dkms
Vcs: https://github.com/dell/dkms.git
# PR: https://www.dell.com/downloads/global/power/1q04-ler.pdf

BuildArch: noarch
Source0: %name-%version.tar
Patch: %name-%version-%release.patch
BuildRequires(pre): lsb-release

%filter_from_requires /\(debconf\|python\|dpkg\|lsb\|systemd\|module-init-tools\|\/etc\/sysconfig\/kernel\)/d

%description
The framework for the Dynamic Kernel Module Support (DKMS) method
for installing module RPMS as originally developed by Dell.

%package checkinstall
Summary: Checkinstall for dkms
Group: Development/Other
BuildArch: noarch
Requires(pre): %name = %EVR
Requires: /proc
Requires: kernel > 5.7
Requires: kernel-headers-modules-un-def
Requires: rpm-build

%description checkinstall
Run checkinstall tests for dkms.

%prep
%setup
%patch -p1

%build
echo "enable dkms.service" > dkms.preset

# Turn prerm into postrm, disabling call to depmod.
sed 's/dkms remove/& --no-depmod/' kernel_prerm.d_dkms > kernel_postrm.d_dkms

%install
# Install both service types.
make install-redhat \
    DESTDIR=%buildroot \
    BASHDIR=%buildroot%_sysconfdir/bash_completion.d \
        ETC=%buildroot%_sysconfdir/dkms \
     LIBDIR=%buildroot%_libexecdir/dkms \
        MAN=%buildroot%_man8dir \
       SBIN=%buildroot%_sbindir \
    SYSTEMD=%buildroot%_unitdir \
        VAR=%buildroot%_localstatedir/dkms \

# Install triggers.
rm -rf %buildroot%_sysconfdir/kernel
install -p -m755 kernel_postrm.d_dkms   %buildroot%_libexecdir/dkms/postrm
install -p -m755 kernel_postinst.d_dkms %buildroot%_libexecdir/dkms/postinst
# '9' to make it run before boot_kernel.filetrigger for prerm
install -p -m755 -D .gear/dkms.filetrigger %buildroot%_rpmlibdir/9dkms.filetrigger

# Bundled (in 2009) lsb_release is too old for ALT.
install -p /usr/bin/lsb_release %buildroot%prefix/lib/dkms/

# Rename sysv service name for consistency, otherwise post_service,
# and preun_service will not work properly.
install -Dp dkms_autoinstaller %buildroot%_initdir/dkms

install -D -p -m644 dkms.preset %buildroot%_presetdir/30-dkms.preset

%post
%post_service dkms

%preun
%preun_service dkms

%pre checkinstall
set -e
PS4=$'\n+ '
khdr=$(rpm -q kernel-headers-modules-un-def | sort -V | tail -1)
khdr=${khdr#kernel-headers-modules-}
khdr=${khdr%%.*}
krel=${khdr##*-}
kver=${khdr%%-*}
kver=${kver##*-}
kflv=${khdr%%-*-*}
kver=$kver-$kflv-$krel

set -x
dkms add %_defaultdocdir/%name-%version/test/dkms_test-1.0/dkms.conf
    dkms status | grep added || exit 1
dkms build	 --verbose --kernelver=$kver dkms_test/1.0
    dkms status | grep built || exit 1
dkms install	 --verbose --kernelver=$kver dkms_test/1.0
    dkms status | grep installed || exit 1
    modinfo /lib/modules/$kver/kernel/extra/dkms_test.ko*
dkms uninstall	 --verbose --kernelver=$kver dkms_test/1.0
    ! test -e /lib/modules/$kver/kernel/extra/dkms_test.ko*
dkms unbuild	 --verbose --kernelver=$kver dkms_test/1.0

dkms autoinstall --verbose --kernelver=$kver dkms_test/1.0
    modinfo /lib/modules/$kver/kernel/extra/dkms_test.ko*
dkms remove	 --verbose --kernelver=$kver dkms_test/1.0
   dkms status | grep . && exit 1
   ! test -e /lib/modules/$kver/kernel/extra/dkms_test.ko*

rm -rf /usr/src/dkms_test-1.0

%files
%doc README.md test
%config(noreplace) %_sysconfdir/dkms
%_sbindir/dkms
%_initdir/dkms
%_unitdir/dkms.service
%_presetdir/*dkms.preset
%_libexecdir/dkms
%_rpmlibdir/*dkms.filetrigger
%_localstatedir/dkms
%_man8dir/dkms.8*
%_sysconfdir/bash_completion.d/dkms

%files checkinstall

%changelog
* Wed Apr 05 2023 Andrey Cherepanov <cas@altlinux.org> 3.0.10-alt1
- New version returned to Sisyphus.
- Changed packager.

* Fri Oct 09 2020 Vitaly Chikunov <vt@altlinux.org> 2.8.3-alt4
- Optimize dkms.filetrigger un/install logic.

* Fri Oct 09 2020 Vitaly Chikunov <vt@altlinux.org> 2.8.3-alt3
- Make checkinstall work outside of hasher.
- Optimize dkms.filetrigger.

* Tue Sep 29 2020 Vitaly Chikunov <vt@altlinux.org> 2.8.3-alt2
- spec: Remove dependence on /etc/sysconfig/kernel.

* Wed Sep 02 2020 Vitaly Chikunov <vt@altlinux.org> 2.8.3-alt1
- First import to ALT.