From d571dfe4a4dc15fa9337af2d29f2f21a04d49b5b Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Fri, 16 Jan 2015 13:16:06 +0000 Subject: [PATCH] scst.spec.in: Determine version number correctly on a koji server This patch has been tested on a koji build server and also on four different RPM-based distributions (CentOS 7, Fedora 20, openSuSE 13.2 and SLES 11 SP3). git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5974 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst.spec.in | 57 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/scst.spec.in b/scst.spec.in index 986b196ff..2b4b537a5 100644 --- a/scst.spec.in +++ b/scst.spec.in @@ -1,15 +1,50 @@ %define kmod_name scst -%{!?kversion:%define kversion %{expand:%%(uname -r)}} -%define kernel_rpm %{expand:%%( \ - krpm="$(rpm -qf /boot/vmlinuz-%{kversion} 2>/dev/null | \ - grep -v 'is not owned by any package' | head -n 1)"; \ - if [ -n "$krpm" ]; then \ - echo "/boot/vmlinuz-%{kversion}"; \ - else \ - echo "%{nil}"; \ - fi \ +# kversion: Kernel version as it appears under /lib/modules. +# The algorithm for setting the variable kversion is as follows: +# - If the variable kversion has been set, use its value. +# - If an RPM with the name kernel-headers exists (RHEL / CentOS), use the +# version number of the kernel that package is based on. This provides the +# version number when building on a koji build server. +# - Otherwise use the version number of the running kernel. +%{!?kversion:%define kversion %{expand:%%( + if rpm --quiet -q kernel-headers; then + rpm -q --qf '%%%%{version}-%%%%{release}.%%%%{arch}' \\ + kernel-headers; + else + uname -r; + fi + )}} +%{echo:kversion=%{kversion} +} +# kernel_rpm: Name of the kernel RPM if the kernel is available as an RPM. +%if %{expand:%%(rpm --quiet -q kernel-headers || + rpm --quiet -qf /lib/modules/%{kversion}/kernel/arch 2>/dev/null; + echo $((1-$?)))} +%define kernel_rpm %{expand:%%( + if rpm --quiet -q kernel-headers; then + echo kernel; + else + rpm -q --qf '%%%%{name}\\n' \\ + "$(rpm -qf /lib/modules/%%{kversion}/kernel/arch | head -n1)"; + fi )} +%endif +# krpmver: Version of the kernel RPM. Not necessarily identical to %{kversion}. +%{?kernel_rpm:%define krpmver %{expand:%%( + if rpm --quiet -q %%{kernel_rpm}; then + rpm -q --qf '%%%%{version}-%%%%{release}\\n' "%%{kernel_rpm}"; + else + rpm -q --qf '%%%%{version}-%%%%{release}\\n' kernel-headers; + fi | + head -n1 + )}} +%{echo:krpmver=%{krpmver} +} +# kernel_devel_rpm: Name of the kernel development RPM. +%{?kernel_rpm:%define kernel_devel_rpm %{kernel_rpm}-devel} +# Version of the RPM that is being built. %define rpm_version @rpm_version@ +# Make command with or without flags. %define make %{expand:%%(echo ${MAKE:-make})} Name: %{kmod_name}-%{kversion} @@ -20,6 +55,10 @@ Group: System/Kernel License: GPLv2 Vendor: http://scst.sourceforge.net/ URL: http://scst.sourceforge.net/ +# Unfortunately the Red Hat / CentOS kernel-debug-devel RPM provides +# kernel-devel so a workaround is needed to match the kernel-devel RPM. +%{?kernel_rpm:Requires: %{kernel_rpm} = %{krpmver}} +BuildRequires: %{?kernel_rpm:%{kernel_rpm} = %{krpmver} %{kernel_devel_rpm} = %{krpmver}} gcc make Source: %{kmod_name}-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build