%define kmod_name scoutfs %define kmod_version @@VERSION@@ %define kmod_git_hash @@GITHASH@@ %define kmod_git_describe @@GITDESCRIBE@@ %define pkg_date %(date +%%Y%%m%%d) # take kernel version or default to uname -r %{!?kversion: %global kversion %(uname -r)} %global kernel_version %{kversion} %if 0%{?el7} %global kernel_source() /usr/src/kernels/%{kernel_version}.$(arch) %else %global kernel_source() /usr/src/kernels/%{kernel_version} %endif %{!?_release: %global _release 0.%{pkg_date}git%{kmod_git_hash}} %if 0%{?el7} Name: %{kmod_name} %else Name: kmod-%{kmod_name} %endif Summary: %{kmod_name} kernel module Version: %{kmod_version} Release: %{_release}%{?dist} License: GPLv2 Group: System/Kernel URL: http://scoutfs.org/ %if 0%{?el7} BuildRequires: %{kernel_module_package_buildreqs} %else BuildRequires: elfutils-libelf-devel %endif BuildRequires: kernel-devel-uname-r = %{kernel_version} BuildRequires: git BuildRequires: module-init-tools ExclusiveArch: x86_64 Source: %{kmod_name}-kmod-%{kmod_version}.tar %if 0%{?el7} # Build only for standard kernel variant(s); for debug packages, append "debug" # after "default" (separated by space) %kernel_module_package default %endif %global install_mod_dir extra/%{kmod_name} %if ! 0%{?el7} %global flavors_to_build x86_64 %endif # el9 sanity: make sure we lock to the minor release we built for and block upgrades %{lua: if string.match(rpm.expand("%{dist}"), "%.el9") then rpm.define("el9 1") end } %if 0%{?el9} %define release_major_minor 9.%{lua: print(rpm.expand("%{dist}"):match("%.el9_(%d)"))} Requires: system-release = %{release_major_minor} %endif %description %{kmod_name} - kernel module %prep %setup -q -n %{kmod_name}-kmod-%{kmod_version} set -- * mkdir source mv "$@" source/ mkdir obj %build echo "Building for kernel: %{kernel_version} flavors: '%{flavors_to_build}'" for flavor in %flavors_to_build; do rm -rf obj/$flavor cp -r source obj/$flavor make RPM_GITHASH=%{kmod_git_hash} SCOUTFS_GIT_DESCRIBE=%{kmod_git_describe} SK_KSRC=%{kernel_source $flavor} -C obj/$flavor module done %install export INSTALL_MOD_PATH=$RPM_BUILD_ROOT export INSTALL_MOD_DIR=%{install_mod_dir} mkdir -p %{install_mod_dir} for flavor in %{flavors_to_build}; do export KSRC=%{kernel_source $flavor} export KVERSION=%{kversion} install -d $INSTALL_MOD_PATH/lib/modules/$KVERSION/%{install_mod_dir} cp $PWD/obj/$flavor/src/scoutfs.ko $INSTALL_MOD_PATH/lib/modules/$KVERSION/%{install_mod_dir}/ done # mark modules executable so that strip-to-file can strip them find %{buildroot} -type f -name \*.ko -exec %{__chmod} u+x \{\} \; %if ! 0%{?el7} %files /lib/modules %post echo /lib/modules/%{kversion}/%{install_mod_dir}/scoutfs.ko | weak-modules --add-modules --no-initramfs depmod -a %endif %clean rm -rf %{buildroot} %preun # stash our modules for postun cleanup SCOUTFS_RPM_NAME=$(rpm -q %{name} | grep "%{version}-%{release}") rpm -ql $SCOUTFS_RPM_NAME | grep '\.ko$' > /var/run/%{name}-modules-%{version}-%{release} || true %postun cat /var/run/%{name}-modules-%{version}-%{release} | weak-modules --remove-modules --no-initramfs rm /var/run/%{name}-modules-%{version}-%{release} || true