# 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.

%{?require_kver: %define kver %{require_kver}}
%{?require_kdir: %define kdir %{require_kdir}}
%{?require_kobj: %define kobj %{require_kobj}}

# 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

%{?require_splver: %define splver %{require_splver}}
%{?require_spldir: %define spldir %{require_spldir}}
%{?require_splobj: %define splobj %{require_splobj}}

# 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

# SLES*:
%if %{defined sles_version}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/linux-obj/%{_target_cpu}/%{_target_cpu}
  %define kver           %((echo X; %{__cat} %{klnk}/.kernelrelease
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel-%{_target_cpu}
 %define kdevpkg         kernel-source kernel-syms
 %define kverpkg         %(echo %{kver} | cut -d'-' -f1-2)
 %if %{undefined kdir}
  %define kdir           %{_usrsrc}/linux-%{kverpkg}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}-obj/%{_target_cpu}/%{_target_cpu}
 %endif

# CHAOS4:
%else
%if %{defined ch4}
 %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}
 %if %{undefined kdir}
  %define kdir %{_usrsrc}/kernels/%{kver}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif

# RHEL*/Fedora:
%else
%if %{defined fedora} || %{defined rhel}
 %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} | cut -d'.' -f1-7)
 %if %{undefined kdir}
  %define kdir           %{_usrsrc}/kernels/%{kver}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif

%else

# Unsupported distro:
 %if %{undefined kver}
  %define kver            X
 %endif
 %define kpkg             kernel
 %define kdevpkg          kernel-devel
 %define kverpkg          %{kver}
 %if %{undefined kdir}
  %define kdir           %{_usrsrc}/kernels/%{kver}
 %endif
 %if %{undefined kobj}
  %define kobj           %{kdir}
 %endif

%endif
%endif
%endif

# SPL package dependencies
%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@
%define krequires        %{kpkg}
%define splrequires      %{splpkg}
%else
%define relext           %(echo %{kverpkg} | %{__sed} -e 's/-/_/g')
%define release          @ZFS_META_RELEASE@_%{relext}
%define krequires        %{kpkg} = %{kverpkg}
%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_u} -n)
Source:          @PACKAGE@-%{version}.tar.gz
Requires:        %{krequires}
Requires:        %{splrequires}
BuildRequires:   %{kdevpkg}
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
Requires:        %{krequires}
Requires:        %{splrequires}
BuildRequires:   %{kdevpkg}
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