Revert "Avoid ELOOP on auto-mounted snapshots"
[zfs.git] / zfs-modules.spec.in
index 798ac10..4ac9659 100644 (file)
  %endif
 %endif
 
+# Set using 'rpmbuild ... --with kernel-dkms ...', defaults to disabled.
+%if %{defined _with_kernel_dkms}
+ %define with_kernel_dkms 1
+%else
+ %if %{defined _without_kernel_dkms}
+  %define with_kernel_dkms 0
+ %else
+  %define with_kernel_dkms 0
+ %endif
+%endif
+
 # Set using 'rpmbuild ... --with debug ...', defaults to disabled.
 %if %{defined _with_debug}
  %define kdebug --enable-debug
 
  %define kpkg_kern       kernel-%{kverextra}
  %define kpkg_dbug       %{nil}
+ %define kpkg_dkms       dkms
 
  %define kdevpkg_kern    kernel-source
  %define kdevpkg_dbug    %{nil}
+ %define kdevpkg_dkms    dkms
 
  %define kverpkg_kern    %(echo %{kver_kern} | %{__sed} -e 's/-%{kverextra}//g')
  %define kverpkg_dbug    %{nil}
+ %define kverpkg_dkms    2.2.0.2
 
  # 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
  %endif
 %else
 
-# CHAOS 4.x:
-%if %{defined ch4}
- %if %{undefined kver}
-  %define klnk           %{_usrsrc}/kernels/*/include/config
-  %define kver_kern      %((echo X; %{__cat} %{klnk}/kernel.release
-                            2>/dev/null) | tail -1)
-  %define kver_dbug      %{nil}
- %else
-  %define kver_kern      %{kver}
-  %define kver_dbug      %{nil}
- %endif
-
- %define kpkg_kern       chaos-kernel
- %define kpkg_dbug       %{nil}
-
- %define kdevpkg_kern    chaos-kernel-devel
- %define kdevpkg_dbug    %{nil}
-
- %define kverpkg_kern    %{kver_kern}
- %define kverpkg_dbug    %{nil}
-
- %define koppkg          =
-
- %if %{undefined kdir}
-  %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}
-  %define kdir_dbug      %{nil}
- %else
-  %define kdir_kern      %{kdir}
-  %define kdir_dbug      %{nil}
- %endif
-
- %if %{undefined kobj}
-  %define kobj_kern      %{kdir_kern}
-  %define kobj_dbug      %{nil}
- %else
-  %define kobj_kern      %{kobj}
-  %define kobj_dbug      %{nil}
- %endif
-%else
-
 # RHEL 5.x/6.x, CHAOS 5.x:
 %if %{defined el5} || %{defined el6} || %{defined ch5}
  %if %{undefined kver}
 
  %define kpkg_kern       kernel
  %define kpkg_dbug       kernel-debug
+ %define kpkg_dkms       dkms
 
  %define kdevpkg_kern    kernel-devel
  %define kdevpkg_dbug    kernel-debug-devel
+ %define kdevpkg_dkms    dkms
 
+ %define kverpkg_dkms    2.2.0.2
  %if %{defined el6} || %{defined ch5}
   %define kverpkg_kern   %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
   %define kverpkg_dbug   %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
 
  %define kpkg_kern       kernel
  %define kpkg_dbug       kernel-debug
+ %define kpkg_dkms       dkms
 
  %define kdevpkg_kern    kernel-devel
  %define kdevpkg_dbug    kernel-debug-devel
+ %define kdevpkg_dkms    dkms
 
+ %define kverpkg_dkms    2.2.0.2
  %define kverpkg_kern    %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
  %define kverpkg_dbug    %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
 
 
  %define kverpkg_kern    %{kver_kern}
  %define kverpkg_dbug    %{nil}
+ %define kverpkg_dkms    %{nil}
 
  %if %{undefined kdir}
   %define kdir_kern      /lib/modules/%{kver_kern}/build
 %endif
 %endif
 %endif
-%endif
 
 # spldir:    Full path to the spl source headers
 # splobj:    Full path to the spl build objects
 %if %{undefined splver}
  %define spllnk_kern     %{_usrsrc}/spl-*/%{kver_kern}
  %define spllnk_dbug     %{_usrsrc}/spl-*/%{kver_dbug}
+ %define spllnk_dkms     %{_var}/lib/dkms/spl/*/build
 
  %define splver_kern     %((echo X; %{__cat} %{spllnk_kern}/spl.release
                             2>/dev/null) | tail -1)
  %define splver_dbug     %((echo X; %{__cat} %{spllnk_dbug}/spl.release
                             2>/dev/null) | tail -1)
+ %define splver_dkms     %((echo X; %{__cat} %{spllnk_dkms}/spl.release
+                            2>/dev/null) | tail -1)
 %else
  %define splver_kern     %{splver}
  %define splver_dbug     %{splver}
+ %define splver_dksm     %{splver}
 %endif
 
 %define splpkg_kern      spl-modules
 %define splpkg_dbug      spl-modules-debug
+%define splpkg_dkms      spl-modules-dkms
 
 %define spldevpkg_kern   spl-modules-devel
 %define spldevpkg_dbug   spl-modules-debug-devel
+%define spldevpkg_dkms   spl-modules-dkms
 
 %define splverpkg_kern   %{splver_kern}
 %define splverpkg_dbug   %{splver_dbug}
+%define splverpkg_dkms   %{splver_dkms}
 
 %if %{undefined spldir}
  %define spldir_kern     %{_usrsrc}/spl-%{splver_kern}/%{kver_kern}
  %define spldir_dbug     %{_usrsrc}/spl-%{splver_dbug}/%{kver_dbug}
+ %define spldir_dkms     %{_usrsrc}/spl-%{splver_dkms}
 %else
  %define spldir_kern     %{spldir}
  %define spldir_dbug     %{spldir}.debug
+ %define spldir_dkms     %{spldir}
 %endif
 
 %if %{undefined splobj}
  %define splobj_kern     %{spldir_kern}
  %define splobj_dbug     %{spldir_dbug}
+ %define splobj_dkms     %{spldir_dkms}
 %else
  %define splobj_kern     %{splobj}
  %define splobj_dbug     %{splobj}.debug
+ %define splobj_dkms     %{splobj}
 %endif
 
 
 
 %define rel_kern         @ZFS_META_RELEASE@
 %define rel_dbug         @ZFS_META_RELEASE@
+%define rel_dkms         @ZFS_META_RELEASE@
 
 %if %{defined kpkg_kern}
 %define req_kern         %{kpkg_kern}
 %if %{defined kpkg_dbug}
 %define req_dbug         %{kpkg_dbug}
 %endif
+%if %{defined kpkg_dkms}
+%define req_dkms         %{kpkg_dkms}
+%endif
 
 %define splreq_kern      %{splpkg_kern}
 %define splreq_dbug      %{splpkg_dbug}
+%define splreq_dkms      %{splpkg_dkms}
 
 %define spldevreq_kern   %{spldevpkg_kern}
 %define spldevreq_dbug   %{spldevpkg_dbug}
+%define spldevreq_dkms   %{spldevpkg_dkms}
 
 %else
 
 %define relext_dbug      %(echo %{kverpkg_dbug} | %{__sed} -e 's/-/_/g')
 %define rel_kern         @ZFS_META_RELEASE@_%{relext_kern}
 %define rel_dbug         @ZFS_META_RELEASE@_%{relext_dbug}
+%define rel_dkms         @ZFS_META_RELEASE@
 
 %if %{defined kpkg_kern}
 %define req_kern         %{kpkg_kern} %{koppkg} %{kverpkg_kern}
 %if %{defined kpkg_dbug}
 %define req_dbug         %{kpkg_dbug} %{koppkg} %{kverpkg_dbug}
 %endif
+%if %{defined kpkg_dkms}
+%define req_dkms         %{kpkg_dkms} >= %{kverpkg_dkms}
+%endif
 
 %define splreq_kern      %{splpkg_kern} = %{splverpkg_kern}_%{relext_kern}
 %define splreq_dbug      %{splpkg_dbug} = %{splverpkg_dbug}_%{relext_dbug}
+%define splreq_dkms      %{splpkg_dkms} = %{splverpkg_dkms}
 
 %define spldevreq_kern   %{spldevpkg_kern} = %{splverpkg_kern}_%{relext_kern}
 %define spldevreq_dbug   %{spldevpkg_dbug} = %{splverpkg_dbug}_%{relext_dbug}
+%define spldevreq_dkms   %{spldevpkg_dkms} = %{splverpkg_dkms}
 
 %endif
 
@@ -503,6 +506,34 @@ and Module.symvers symbols needed for building additional modules
 which use %{name}.
 
 %endif
+%if %{?with_kernel_dkms}
+
+%package dkms
+Summary:         ZFS File System (DKMS)
+Group:           Utilities/System
+Release:         %{rel_dkms}
+Provides:        %{name}
+BuildArch:       noarch
+%if %{defined req_dkms}
+Requires:        %{req_dkms}
+%endif
+%if %{defined kdevpkg_dkms}
+BuildRequires:   %{kdevpkg_dkms}
+%endif
+%if %{defined splreq_dkms}
+Requires:        %{splreq_dkms}
+%endif
+%if %{defined spldevpkg_dkms}
+BuildRequires:   %{spldevpkg_dkms}
+%endif
+Provides:        lustre-backend-fs
+
+%description dkms
+The %{name}-dkms package contains the necessary pieces to build and
+install the ZFS kernel modules with Dynamic Kernel Modules Support
+(DKMS).
+
+%endif
 
 %prep
 %setup -n @PACKAGE@-%{version}
@@ -527,6 +558,15 @@ make
 make DESTDIR=$RPM_BUILD_ROOT install
 
 %endif
+%if %{?with_kernel_dkms}
+
+%configure %{kdebug} %{kdebug_dmu_tx}
+make dist
+mkdir -p $RPM_BUILD_ROOT/%{_prefix}/src
+tar -xf @PACKAGE@-%{version}.tar.gz -C $RPM_BUILD_ROOT/%{_prefix}/src
+cp -af dkms.conf $RPM_BUILD_ROOT/%{_prefix}/src/@PACKAGE@-%{version}
+
+%endif
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -539,7 +579,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %files devel
 %defattr(-,root,root)
-%{_prefix}/src/*/%{kver_kern}/*
+%{_prefix}/src/*/%{kver_kern}
 
 %post
 if [ -f /boot/System.map-%{kver_kern} ]; then
@@ -555,6 +595,10 @@ else
        /sbin/depmod -a || exit 0
 fi
 
+%postun devel
+rmdir %{_prefix}/src/@PACKAGE@-%{version}-@ZFS_META_RELEASE@ 2>/dev/null
+exit 0
+
 %endif
 %if %{?with_kernel_debug}
 
@@ -564,7 +608,7 @@ fi
 
 %files debug-devel
 %defattr(-,root,root)
-%{_prefix}/src/*/%{kver_dbug}/*
+%{_prefix}/src/*/%{kver_dbug}
 
 %post debug
 if [ -f /boot/System.map-%{kver_dbug} ]; then
@@ -580,4 +624,35 @@ else
        /sbin/depmod -a || exit 0
 fi
 
+%postun debug-devel
+rmdir %{_prefix}/src/@PACKAGE@-%{version}-@ZFS_META_RELEASE@ 2>/dev/null
+exit 0
+
+%endif
+%if %{?with_kernel_dkms}
+
+%files dkms
+%defattr(-,root,root)
+%{_prefix}/src/@PACKAGE@-%{version}
+
+%post dkms
+for POSTINST in %{_prefix}/lib/dkms/common.postinst; do
+       if [ -f $POSTINST ]; then
+               $POSTINST @PACKAGE@ %{version}
+               exit $?
+       fi
+       echo "WARNING: $POSTINST does not exist."
+done
+echo -e "ERROR: DKMS version is too old and @PACKAGE@ was not"
+echo -e "built with legacy DKMS support."
+echo -e "You must either rebuild @PACKAGE@ with legacy postinst"
+echo -e "support or upgrade DKMS to a more current version."
+exit 1
+
+%preun dkms
+echo -e
+echo -e "Uninstall of @PACKAGE@ module (version %{version}) beginning:"
+dkms remove -m @PACKAGE@ -v %{version} --all --rpm_safe_upgrade
+exit 0
+
 %endif