linux-fedora9-packaging-updates-20080422
[openafs.git] / src / packaging / RedHat / openafs.spec.in
index 8d1ebb4..b0dfa2e 100644 (file)
@@ -1,17 +1,18 @@
 # Openafs Spec $Revision$
 
 %define afsvers @VERSION@
-%define pkgvers @VERSION@
+%define pkgvers @LINUX_PKGVER@
 # for beta/rc releases make pkgrel 0.X.<tag>
 # for real releases make pkgrel 1 (or more for extra releases)
 #%define pkgrel 0.1.rc1
-%define pkgrel 1
+%define pkgrel @LINUX_PKGREL@
 
 %if %{?osvers:0}%{!?osvers:1}
 %define osvers 1
 %endif
 
-%{!?fedorakmod: %define fedorakmod 0}
+%{!?fedorakmod: %define fedorakmod 1}
+%{!?build_dkmspkg: %define build_dkmspkg 1}
 
 # Determine presence of rpmbuild command line --define arguments used for
 # option specification
 %endif
 
 %if %{fedorakmod}
-%define kmodtool bash %{_sourcedir}/kmodtool
+%define kmodtool bash %{_sourcedir}/openafs-kmodtool
 
 %define kmod_name openafs
 %define kverrel %(%{kmodtool} verrel %{?kernvers} 2>/dev/null)
 
 %define upvar ""
-%ifarch i686
-%define paevar PAE
-%endif
-%ifarch ppc
-%define smpvar smp
-%endif
-%ifarch i686 x86_64
-%define xenvar xen
-%define kdumpvar kdump
-%endif
-%{!?kvariants: %define kvariants %{?upvar} %{?smpvar} %{?paevar} %{?xenvar} %{?kdumpvar}}
+%{!?kvariants: %define kvariants %{?upvar}}
 
-%{!?ksrcdir: %define ksrcdir %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}}
+%if %{?ksrcdir:1}%{!?ksrcdir:0}
+  if ( -d %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}) ; then
+    %define ksrcdir %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}}
+  else
+    %define ksrcdir %{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}}
+  fi
+%endif
 
 %else # Legacy kernel build stuff 
 
@@ -80,6 +77,8 @@
 # End legacy kernel build stuff
 %endif 
 
+%define dkms_version %{osvers}.%{pkgrel}
+
 # Set 'debugspec' to 1 if you want to debug the spec file.  This will
 # not remove the installed tree as part of the %clean operation
 %if %{?debugspec:0}%{!?debugspec:1}
 # to distribute aklog and asetkey
 %define krb5support %{?_without_krb5:0}%{!?_without_krb5:1}
 
+%if %{krb5support}
+%if %{?krb5config:0}%{!?krb5config:1}
+%define krb5config /usr/kerberos/bin/krb5-config
+%endif
+%endif
+
 # Set 'bootkernelsupport' to 1 if you want to build the
 # kernel module for Red Hat BOOT Kernels on x86.
 %define bootkernelsupport %{?_with_bootkernel:1}%{!?_with_bootkernel:0}
@@ -227,13 +232,13 @@ Release: %{osvers}.%{pkgrel}
 License: IBM Public License
 URL: http://www.openafs.org
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
-Packager: Derek Atkins <warlord@MIT.EDU>
+Packager: OpenAFS Gatekeepers <openafs-gatekeepers@openafs.org>
 Group: Networking/Filesystems
 BuildRequires: %{?kdepend:%{kdepend}, } pam-devel, ncurses-devel, flex, bison
 %if %{krb5support}
 BuildRequires: krb5-devel
 %endif
-ExclusiveArch: %{ix86} x86_64 ia64
+ExclusiveArch: %{ix86} x86_64 ia64 s390 s390x sparc64 ppc ppc64
 
 #    http://dl.openafs.org/dl/openafs/candidate/%{afsvers}/...
 Source0: http://www.openafs.org/dl/openafs/%{afsvers}/openafs-%{afsvers}-src.tar.bz2
@@ -249,7 +254,7 @@ Source30: openafs-kernel-version.sh
 Source996: openafs-kvers-is.sh
 Source997: openafs-buildfedora.pl
 Source998: openafs-buildall.sh
-Source999: kmodtool
+Source999: openafs-kmodtool
 
 Patch0:  openafs-1.4.0-kmodule26.patch
 
@@ -295,7 +300,16 @@ what gets built:
                                   will be installed.  You probably don't
                                   need to change this ever.
 
- --define "fedorakmod 1"         Build 'Fedora' style kernel modules
+ --define "fedorakmod 0"         Disable the building of 'Fedora' style kernel 
+                                 modules, and use the old format.
+
+ --define "kvariants <variants>"  When building Fedora style kernel modules,
+                                  this defines the set of kernel variants
+                                  to build.
+                                  <variants> is a space seperated list which
+                                  may contain one or more of
+                                  '' (for the generic kernel), smp, PAE, xen
+                                  or kdump 
 
 To a kernel module for your running kernel, just run:
   rpmbuild --rebuild --target=`uname -m` openafs-%{pkgvers}-%{osvers}.%{pkgrel}.src.rpm
@@ -343,6 +357,29 @@ administrative management.
 This package provides basic server support to host files in an AFS
 Cell.
 
+%if %{build_dkmspkg}
+%package -n dkms-%{name}
+Summary:        DKMS-ready kernel source for AFS distributed filesystem
+Group:          Development/Kernel
+Provides:       openafs-kernel = %{PACKAGE_VERSION}
+%if %{fedorakmod}
+Provides: %{name}-kmod = %{PACKAGE_VERSION}
+%endif
+Requires(pre):  dkms
+Requires(pre):  flex
+Requires(post): dkms
+Requires:      %{name}-kmod-common = %{version}
+
+%description -n dkms-%{name}
+The AFS distributed filesystem.  AFS is a distributed filesystem
+allowing cross-platform sharing of files among multiple computers.
+Facilities are provided for access control, authentication, backup and
+administrative management.
+
+This package provides the source code to allow DKMS to build an
+AFS kernel module.
+%endif
+
 %if %{build_authlibs}
 %package authlibs
 Summary: OpenAFS authentication shared libraries
@@ -790,7 +827,11 @@ ksrc=""
 %if %{fedorakmod} 
   for kvariant in %{kvariants} ; do
     if [ -z "${kvariant}" -o -z "$ksrc" ] ; then
-      ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+      if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+        ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+      else
+        ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
+      fi
     fi
   done
 %endif
@@ -810,7 +851,7 @@ CFLAGS="$RPM_OPT_FLAGS"; export CFLAGS
        --with-linux-kernel-headers=${ksrc} \
 %endif
 %if %{krb5support}
-       --with-krb5-conf=/usr/kerberos/bin/krb5-config \
+       --with-krb5-conf=%{krb5config} \
 %endif
        $config_opts \
        || exit 1
@@ -823,6 +864,12 @@ make only_libafs_tree || exit 1
 %if %{fedorakmod} && %{build_modules}
 for kvariant in %{kvariants} ; do
   if [ -n "${kvariant}" ] ; then
+    if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+      ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+    else
+      ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
+    fi
+
     cp -R libafs_tree _kmod_build_${kvariant}
     pushd _kmod_build_${kvariant}
     ./configure --with-afs-sysname=${sysname} \
@@ -830,7 +877,7 @@ for kvariant in %{kvariants} ; do
        --libdir=%{_libdir} \
        --bindir=%{_bindir} \
        --sbindir=%{_sbindir} \
-       --with-linux-kernel-headers=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} \
+       --with-linux-kernel-headers=${ksrc} \
 %if %{krb5support}
        --with-krb5-conf=/usr/kerberos/bin/krb5-config \
 %endif
@@ -973,6 +1020,28 @@ install -p -m 644 %{SOURCE20} $uve/CellServDB.dist
 install -p -m 644 src/packaging/RedHat/openafs-cacheinfo $uve/cacheinfo
 
 #
+# install dkms source
+#
+install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/src
+cp -a libafs_tree $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}
+
+cat > $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}/dkms.conf <<EOF
+
+PACKAGE_VERSION="%{dkms_version}"
+
+# Items below here should not have to change with each driver version
+PACKAGE_NAME="%{name}"
+MAKE[0]="SMP=SP; eval \\\`grep CONFIG_SMP /boot/config-\${kernelver_array[0]}\\\`; [ -n \"\\\$CONFIG_SMP\" ] && SMP=MP; ./configure --with-linux-kernel-headers=\${kernel_source_dir}; make MPS=\\\$SMP; mv src/libafs/MODLOAD-*/openafs.ko ."
+CLEAN="make -C src/libafs clean"
+
+BUILT_MODULE_NAME[0]="\$PACKAGE_NAME"
+DEST_MODULE_LOCATION[0]="/kernel/3rdparty/\$PACKAGE_NAME/"
+
+AUTOINSTALL=yes
+
+EOF
+
+#
 # install kernel-source
 #
 
@@ -1012,7 +1081,8 @@ rm -f $RPM_BUILD_ROOT%{_mandir}/man8/asetkey.*
 
 # remove unused man pages
 for x in afs_ftpd afs_inetd afs_login afs_rcp afs_rlogind afs_rsh \
-    dkload knfs package runntp; do
+    dkload knfs package runntp symlink symlink_list symlink_make \
+    symlink_remove; do
        rm -f $RPM_BUILD_ROOT%{_mandir}/man1/${x}.1
 done
 
@@ -1032,7 +1102,7 @@ gzip -9 $RPM_BUILD_ROOT%{_mandir}/man*/*
        >openafs-man5files
 
 /bin/ls $RPM_BUILD_ROOT%{_mandir}/man8 \
-       |egrep '^backup|^bos|^butc|^fms|^fstrace|^kas|^uss' \
+       |egrep '^backup|^bos|^butc|^fms|^fstrace|^kas|^read_tape|^uss' \
        >openafs-man8files
 
 #
@@ -1142,14 +1212,25 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libafsrpc.so.*
 for kvariant in %{kvariants}
 do
   if [ -n "$kvariant" ] ; then
-    srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
+    if [ -d _kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP ] ; then
+      srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
+    else
+      srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}.${kvariant}-SP
+    fi
   else
     srcdir=${sysname}/dest/root.client%{_prefix}/vice/etc/modload
   fi
 
-  dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+  if [ -f ${srcdir}/libafs-%{kverrel}${kvariant}.ko ] ; then
+    srcmod=${srcdir}/libafs-%{kverrel}${kvariant}.ko
+    dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+  else
+    srcmod=${srcdir}/libafs-%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}.ko
+    dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}/extra/openafs
+  fi
+
   mkdir -p ${dstdir}
-  install -m 644 ${srcdir}/libafs-%{kverrel}${kvariant}.ko $dstdir/openafs.ko
+  install -m 755 ${srcmod} ${dstdir}/openafs.ko
 done
 %else
 # Install the kernel modules
@@ -1169,7 +1250,7 @@ do
 
     mkdir -p ${dstdir}
 
-    install -m 644 ${srcdir}/${modname} ${dstdir}/openafs${kmodend}
+    install -m 755 ${srcdir}/${modname} ${dstdir}/openafs${kmodend}
 done
 %endif
 %endif
@@ -1256,6 +1337,15 @@ if [ $1 = 0 ] ; then
         chkconfig --del openafs-server
 fi
 
+%if %{build_dkmspkg}
+%post -n dkms-%{name}
+dkms add -m %{name} -v %{dkms_version} --rpm_safe_upgrade
+dkms build -m %{name} -v %{dkms_version} --rpm_safe_upgrade
+dkms install -m %{name} -v %{dkms_version} --rpm_safe_upgrade
+
+%preun -n dkms-%{name}
+dkms remove -m %{namee} -v %{dkms_version} --rpm_safe_upgrade --all ||:
+%endif
 %endif
 
 %if %{build_modules}
@@ -1303,7 +1393,6 @@ fi
 %endif
 %endif
 
-
 ##############################################################################
 ###
 ### file lists
@@ -1453,6 +1542,12 @@ fi
 %{_libdir}/libubik.a
 %{_mandir}/man1/rxgen.*
 
+%if %{build_dkmspkg}
+%files -n dkms-%{name}
+%defattr(-,root,root)
+%{_prefix}/src/%{name}-%{dkms_version}
+%endif
+
 %files kernel-source
 %defattr(-,root,root)
 %{_prefix}/src/openafs-kernel-%{afsvers}/LICENSE.IBM