%define kmod_name scst
# 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 the variable kdir has been set, derive the kernel version from kdir.
# - Otherwise use the version number of the running kernel.
%{!?kversion:
    %{?kdir:%define kversion %{expand:%%(
	make -sC "%{kdir}" kernelversion | grep -v ^make)}}
    %{!?kdir:
	%define kversion %{expand:%%(uname -r)}}}
%{echo:kdir=%{kdir} kversion=%{kversion}
}
# kernel_rpm: Name of the kernel RPM if the kernel is available as an RPM.
# krpmver: Version of the kernel RPM. Not necessarily identical to kversion.
%if %{expand:%%(rpm --quiet -qf /lib/modules/%{kversion}/kernel/arch 2>/dev/null;
		echo $((1-$?)))}
%define kernel_rpm %{expand:%%(
	    rpm -q --qf '%%%%{name}\\n' -f \\
		/lib/modules/%%{kversion}/kernel/arch | uniq
	)}
%define krpmver %{expand:%%(
	    rpm -q --qf '%%%%{version}-%%%%{release}\\n' -f \\
		/lib/modules/%%{kversion}/kernel/arch | uniq
	)}
%else
%if %{expand:%%(rpm --quiet -q kernel-headers; echo $((1-$?)))}
%define kernel_rpm kernel
%define krpmver %{expand:%%(
	    rpm -q --qf '%%%%{BUILDTIME} %%%%{version}-%%%%{release}\\n' \\
		kernel-headers | sort | tail -n1 | { read a b; echo $b; }
	)}
%endif
%endif
%{?kernel_rpm:
%{echo:kernel_rpm=%{kernel_rpm}
}
%{echo:krpmver=%{krpmver}
}}
# kernel_devel_rpm: Name of the kernel development RPM.
%if 0%{?kernel_rpm:1}
%if %([ %{kernel_rpm} = kernel-plus-core ]; echo $((1-$?)))
# CentOSPlus
%define kernel_devel_rpm kernel-plus-devel
%else
%if %([ %{kernel_rpm} = kernel-ml-core ]; echo $((1-$?)))
# RHEL/CentOS elrepo mainline
%define kernel_devel_rpm kernel-ml-devel
%else
%if %([ %{kernel_rpm} = kernel-core ]; echo $((1-$?)))
# Fedora
%define kernel_devel_rpm kernel-devel
%else
# Other Linux distros
%define kernel_devel_rpm %{kernel_rpm}-devel
%endif
%endif
%endif
%{echo:kernel_devel_rpm=%{kernel_devel_rpm}
}
%endif
# 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})}
%define pkgrel 1

Name:		%{kmod_name}-%{kversion}
Version:	%{rpm_version}
Release:	%{rpm_release}%{?dist}
Summary:	SCST mid-layer kernel drivers
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.
BuildRequires:	%{?kernel_rpm:%{kernel_rpm} = %{krpmver} %{kernel_devel_rpm} = %{krpmver}} gcc make

Source:		%{kmod_name}-%{version}.tar.bz2
BuildRoot:	%{_tmppath}/%{name}-%{version}-build
AutoReqProv:	no
Requires:	%{?kernel_rpm:%{kernel_rpm} = %{krpmver}} @depmod@ %{expand:%%(for c in find rm; do echo -n "$(PATH=/usr/sbin:/usr/bin:/sbin:/bin which $c) "; done)}
Provides:	scst

%description
A generic SCSI target subsystem for Linux that allows to convert any Linux
server into a sophisticated storage server. The three layers in SCST are the
target driver layer; the SCSI target core and the device handler layer. SCST
target drivers realize communication with an initiator and implement a storage
protocol like iSCSI, FC or SRP. SCST device handlers implement a SCSI
interface on top of local storage. Examples of such local storage are SCSI
RAID controller (dev_disk handler), block device (vdisk_blockio handler), file
(vdisk_fileio handler) or custom block device behavior implemented in user
space (scst_user).

Authors:
--------
    Vladislav Bolkhovitin, Bart Van Assche and others

%package devel
Summary:	SCST mid-layer kernel driver development package
Group:		Development/Kernel
BuildArch:	noarch

%description devel
A generic SCSI target subsystem for Linux (SCST) that allows to convert
any Linux server into a sophisticated storage server. SCST target drivers
implement protocols like iSCSI, FC or SRP. SCST device handlers either
provide access to a local SCSI RAID controller (dev_disk), block device
(vdisk_blockio), file (vdisk_fileio) or custom block device behavior
implemented in user space (scst_user).

Authors:
--------
    Vladislav Bolkhovitin, Bart Van Assche and others

%prep

%setup -q -n %{kmod_name}-%{version}

%build
%{?kdir:export KDIR=%{kdir}}
%{!?kdir:%{?kversion:export KVER=%{kversion}}}
export PREFIX=%{_prefix}
export BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y
make 2release
for d in scst iscsi-scst scst_local; do
    %{make} -C $d
done

%install
%{?kdir:export KDIR=%{kdir}}
%{!?kdir:%{?kversion:export KVER=%{kversion}}}
export PREFIX=%{_prefix} MANDIR=%{_mandir} DEPMOD=true
export BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y
for d in scst; do
    DESTDIR=%{buildroot} %{make} -C $d install
done
for d in iscsi-scst scst_local; do
    DESTDIR=%{buildroot} INSTALL_MOD_PATH=%{buildroot} %{make} -C $d install
done
# Set the executable bit such that /usr/lib/rpm/find-debuginfo.sh can find the
# SCST kernel modules.
find %{buildroot}/lib/modules -name '*.ko' -print0 | xargs -0 chmod u+x
rm -f %{buildroot}/lib/modules/%{kversion}/[Mm]odule*

%clean
rm -rf %{buildroot}

%pre
# Remove any existing ib_srpt.ko kernel modules
find /lib/modules/%{kversion} -name ib_srpt.ko -exec rm {} \;
# Remove files installed by "make install"
rm -f /usr/local/man/man5/iscsi-scstd.conf.5
rm -f /usr/local/man/man8/iscsi-scst-adm.8
rm -f /usr/local/man/man8/iscsi-scstd.8
rm -f /usr/local/sbin/iscsi-scst-adm
rm -f /usr/local/sbin/iscsi-scstd
rm -rf /usr/local/include/scst

%post
@depmod@ -a %{kversion}

%files
%defattr(-,root,root,0755)
%dir /lib/modules/%{kversion}/extra
/lib/modules/%{kversion}/extra/iscsi-scst.ko
/lib/modules/%{kversion}/extra/isert-scst.ko
/lib/modules/%{kversion}/extra/scst.ko
/lib/modules/%{kversion}/extra/scst_local.ko
%dir /lib/modules/%{kversion}/extra/dev_handlers
/lib/modules/%{kversion}/extra/dev_handlers/scst_cdrom.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_changer.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_disk.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_modisk.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_processor.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_raid.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_tape.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_user.ko
/lib/modules/%{kversion}/extra/dev_handlers/scst_vdisk.ko
%defattr(-,root,root,0755)
%{_mandir}/man5/iscsi-scstd.conf.5.gz
%{_mandir}/man8/iscsi-scst-adm.8.gz
%{_mandir}/man8/iscsi-scstd.8.gz
%{_sbindir}/iscsi-scst-adm
%{_sbindir}/iscsi-scstd
%dir /var/lib/scst/dif_tags
%dir /var/lib/scst/pr
%dir /var/lib/scst/vdev_mode_pages

%files devel
%defattr(-,root,root,0755)
%dir /usr/include/scst
/usr/include/scst/Module.symvers
/usr/include/scst/backport.h
/usr/include/scst/build_mode.h
/usr/include/scst/scst.h
/usr/include/scst/scst_const.h
/usr/include/scst/scst_debug.h
/usr/include/scst/scst_itf_ver.h
/usr/include/scst/scst_sgv.h
/usr/include/scst/scst_user.h

%changelog
* Sat Apr 4 2020 Jim McCarthy <jim.mccarthy@actifio.com>
- Changed list of build artifacts to match Actifio deliverables.
* Sun Mar  8 2020 Bart Van Assche <bvanassche@acm.org>
- Added support for the CentOSPlus kernel.
* Tue Oct  8 2019 Bart Van Assche <bvanassche@acm.org>
- Make this spec file compatible with rpmbuild v4.14.
* Wed May  6 2015 Bart Van Assche <bart.vanassche@sandisk.com>
- Build in release mode instead of debug mode.
* Mon May  4 2015 Bart Van Assche <bart.vanassche@sandisk.com>
- Added iSER target driver.
* Mon Feb 23 2015 Bart Van Assche <bart.vanassche@sandisk.com>
- Split spec file into a non-DKMS and a DKMS spec file.
* Fri Jan 16 2015 Bart Van Assche <bart.vanassche@sandisk.com>
- Added DKMS support.
* Fri Nov 22 2013 Bart Van Assche <bvanassche@acm.org>
- Initial spec file.
