# The following block is used to allow the source RPM to be rebuilt 
# against specific kernels.  It is preferable that rpmbuild define the
# require_kver, require_kdir, require_obj constants for us, but if it does not
# not we attempt to determine the correct values based on your distro.

# kdir:    Full path to the kernel source headers
# kobj:    Full path to the kernel build objects
# kver:    Kernel version
# kpkg:    Kernel package name
# kdevpkg: Kernel devel package name
# kverpkg: Kernel package version

%if %{defined require_kver}
%define kver %{require_kver}
%endif

%if %{defined require_kdir}
%define kdir %{require_kdir}
%endif

%if %{defined require_kobj}
%define kobj %{require_kobj}
%endif

# SLES:
%if %{defined suse_version}
 %if %{undefined kver}
  %ifarch ppc64
   %define kverextra     ppc64
  %else
   %define kverextra     default
  %endif

  %if %{suse_version} >= 1100
   %define klnk          %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
   %define krelease      %{klnk}/include/config/kernel.release
  %else
   %define klnk          %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
   %define krelease      %{klnk}/.kernelrelease
  %endif

  %define kver           %((echo X; %{__cat} %{krelease} 2>/dev/null)|tail -1)
 %endif

 %if %{undefined kverextra}
  %define kverextra      %(echo %{kver} | cut -f3 -d'-')
 %endif

 %define kpkg            kernel-%{kverextra}
 %define kdevpkg         kernel-source
 %define kverpkg         %(echo %{kver} | %{__sed} -e 's/-%{kverextra}//g')

 # The kernel and rpm versions do not strictly match under SLES11
 # e.g. kernel version 2.6.27.19-5 != rpm version 2.6.27.19-5.1
 %if %{suse_version} >= 1100
  %define koppkg         >=
 %else
  %define koppkg         =
 %endif

 %if %{undefined kdir}
  %define kdir           %{_usrsrc}/linux-%{kverpkg}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}-obj/%{_target_cpu}/%{kverextra}
 %endif
%else

# CHAOS 4.x/5.x:
%if %{defined ch4} || %{defined ch5}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            chaos-kernel
 %define kdevpkg         chaos-kernel-devel
 %define kverpkg         %{kver}
 %define koppkg          =
 %if %{undefined kdir}
  %define kdir %{_usrsrc}/kernels/%{kver}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif
%else

# RHEL 5.x/6.x:
%if %{defined el5} || %{defined el6}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel
 %define kdevpkg         kernel-devel
 %if %{defined el6}
  %define kverpkg        %(echo %{kver} | %{__sed} -e 's/.%{_target_cpu}//g')
 %else
  %define kverpkg        %{kver}
 %endif
 %define koppkg          =
 %if %{undefined kdir}
  %define kdir           %{_usrsrc}/kernels/%{kver}-%{_target_cpu}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif
%else

# Fedora:
%if %{defined fedora}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel
 %define kdevpkg         kernel-devel
 %define kverpkg         %(echo %{kver} | %{__sed} -e 's/.%{_target_cpu}//g')
 %define koppkg          =
 %if %{undefined kdir}
  %define kdir           %{_usrsrc}/kernels/%{kver}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif
%else

# Unsupported distro:
 %if %{undefined kver}
  %define kver           %(uname -r)
 %endif
 %define kverpkg         %{kver}
 %if %{undefined kdir}
  %define kdir           /lib/modules/%{kver}/build
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif

%endif
%endif
%endif
%endif

# spldir:    Full path to the spl source headers
# splobj:    Full path to the spl build objects
# splver:    Spl version
# splpkg:    Spl package name
# spldevpkg: Spl devel package name
# splverpkg: Spl package version

%if %{defined require_splver}
%define splver %{require_splver}
%endif

%if %{defined require_spldir}
%define spldir %{require_spldir}
%endif

%if %{defined require_splobj}
%define splobj %{require_splobj}
%endif

%if %{undefined splver}
 %define spllnk          %{_usrsrc}/spl-*/%{kver}
 %define splver          %((echo X; %{__cat} %{spllnk}/spl.release
                            2>/dev/null) | tail -1)
%endif
%define splpkg           spl-modules
%define spldevpkg        spl-modules-devel
%define splverpkg        %{splver}
%if %{undefined spldir}
 %define spldir %{_usrsrc}/spl-%{splver}/%{kver}
%endif
%if %{undefined splobj}
 %define splobj          %{spldir}/module
%endif


# Distro agnostic:
%define name             @PACKAGE@-modules
%define version          @VERSION@
%define debug_package    %{nil}

# The kernel version should only be appended to a binary RPM.  When
# building a source RPM it must be kernel version agnostic.  This means
# the source RPM must never specify a required kernel version, but the
# final RPM should be keyed to the kernel version it was built against.
%if %{defined build_src_rpm}
%define release          @ZFS_META_RELEASE@
%if %{defined kpkg}
%define krequires        %{kpkg}
%endif
%define splrequires      %{splpkg}
%else
%define relext           %(echo %{kverpkg} | %{__sed} -e 's/-/_/g')
%define release          @ZFS_META_RELEASE@_%{relext}
%if %{defined kpkg}
%define krequires        %{kpkg} %{koppkg} %{kverpkg}
%endif
%define splrequires      %{splpkg} = %{splverpkg}
%endif

Summary:         ZFS File System
Group:           Utilities/System
Name:            %{name}
Version:         %{version}
Release:         %{release}
License:         @LICENSE@
URL:             git://eris.llnl.gov/zfs.git
BuildRoot:       %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
Source:          @PACKAGE@-%{version}.tar.gz
%if %{defined krequires}
Requires:        %{krequires}
%endif
%if %{defined kdevpkg}
BuildRequires:   %{kdevpkg}
%endif
Requires:        %{splrequires}
BuildRequires:   %{spldevpkg}

%description
The %{name} package contains kernel modules and support utilities for
the %{name} file system.

%package devel
Summary:         ZFS File System Headers and Symbols
Group:           Development/Libraries
%if %{defined krequires}
Requires:        %{krequires}
%endif
Requires:        %{splrequires}
%if %{defined kdevpkg}
BuildRequires:   %{kdevpkg}
%endif
BuildRequires:   %{spldevpkg}

%description devel
The %{name}-devel package contains the kernel header files and 
Module.symvers symbols needed for building additional modules
which use %{name}.

%prep
%setup -n @PACKAGE@-%{version}
%build
%configure --with-linux=%{kdir} --with-linux-obj=%{kobj} \
           --with-spl=%{spldir} --with-spl-obj=%{splobj} \
           --with-config=kernel
make

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-, root, root)
/lib/modules/*

%files devel
%defattr(-,root,root)
%{_prefix}/src/*

%post
if [ -f /boot/System.map-%{kver} ]; then
	depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0
else
	depmod -ae %{kver} || exit 0
fi

%postun
if [ -f /boot/System.map-%{kver} ]; then
	depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0
else
	depmod -ae %{kver} || exit 0
fi