auto-krokodil/macros.krokodil

69 lines
3.2 KiB
Text
Raw Normal View History

# Versioning must be the same when building both inside nvidia and kernel pkg,
# but the first part will indicate a newer build, the second part will indicate from which SRPM
# this module was built from and will allow to avoid same filenames of RPMs with
# modules from different SRPMs even if they are built at the same time (second).
# Unfortunately, if we generate release inside %%kroko_kmod_pkg, every usage of
# a macro with it will cause its regeneration, so it may be incosistent across one package.
# Usage example:
# %%kroko_kmod_pkg -r %%kroko_mk_release <...>
%kroko_mk_release %(echo $(( $(date +%%s) - $(date -d "Sat Oct 10 00:00:00 MSK 2021" +%%s) ))).%(printf "%%d" "'$(head -c1 /dev/urandom | base64)")
# r - Release, generated using %%kroko_mk_release
# j - major Nvidia version (e.g. 390 from full version 390.13)
# n - minor Nvidia version (e.g. 13 from full version 390.13)
# f - kernel flavour (e.g. generic from kernel-5.10-generic)
# k - kernel version (e.g. 5.10 from kernel-5.10-generic)
# m - kernel patch level (71 from 5.10.71)
# p - full kernel version (uname -r), e.g.: 5.10.71-generic-1rosa2021.1-x86_64)
# s - source package name (e.g.: nvidia390, kernel-5.10-generic)
%kroko_kmod_pkg(r:j:n:f:k:m:p:s:) \
# e.g.: kernel-modules-nvidia390-5.10-generic \
%define pkg kernel-modules-nvidia%{-j*}-%{-k*}-%{-f*} \
\
%{expand: \
%package -n %{pkg} \
Summary: Binary modules of Nvidia %{-j*}.%{-n*} for kernel-%{-k*}-%{-f*} \
Group: System/Kernel and hardware \
Version: %{-j*}.%{-n*} \
Release: %{-r*} \
Supplements: (kernel-%{-k*}-%{-f*} and nvidia%{-j*}) \
Provides: installonlypkg(kernel) = %{-k*}.%{-m*}.module \
# e.g.: kmod-nvidia390.13-kabi(5.10.71-generic-1rosa2021.1-x86_64) = 456.2e9d1.15 \
Provides: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) = %{-r*} \
Provides: kmod-nvidia%{-j*}-kabi(%{-p*}) = %{-r*} \
# e.g.: kmod-nvidia390-kabi(5.10.71-generic-1rosa2021.1-x86_64) = 456.2e9d1.15 \
# Do not keep older builds for the same kernel installed via installonlypkg() \
# () and provides are not allowed in Obsoletes, only real package names work as Obsoletes, \
# so we can't write: "Obsoletes: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{-r*}" \\
# XXX Without Obsoletes for now, otherwise modules for e.g. 5.10.71 will be removed when updating to 5.10.72 \
#Obsoletes: %{pkg} < %{-j*}.%{-n*}-%{-r*} \
# the same files conflict \
Conflicts: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{-r*} \
# e.g.: kmod-nvidia-5.10-generic(390.13) = 456.2e9d1.15 \
Provides: kmod-nvidia-%{-k*}-%{-f*}(%{-j*}.%{-n*}) = %{-r*} \
Requires: kernel-abi(%{-p*}) \
%description -n %{pkg} \
Binary modules of Nvidia %{-j*}.%{-n*} for kernel-%{-k*}-%{-f*} \
Built from %{-s*} \
%files -n %{pkg} \
%dir /lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*} \
/lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*}/*.ko* \
%{nil} \
}
# "Requires" in kernel package
%kroko_req_modules_in_kernel(j:n:p:) \
%{expand: \
# XXX j.n vs j will probably help to catch missyncs in repoclosure \
Requires: (kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) if nvidia%{-j*}) \
%{nil} \
}
# "Requires" in nvidiaXXX package
%kroko_req_modules_in_nvidia(k:f:j:n:) \
%{expand: \
# e.g.: (kmod-nvdia-5.10-generic(390.13) if kernel-5.10-generic)
Requires: (kmod-nvidia-%{-k*}-%{-f*}(%{-j*}.%{-n*}) if kernel-%{-k*}-%{-f*}) \
%{nil} \
}