[Pkg-dkms-commits] [dkms] 01/03: Rebase to upstream commit eb402f72b9a71ccdd0d3610db8570195eb048f1f

Aron Xu aron at debian.org
Tue Aug 23 09:21:22 UTC 2016


This is an automated email from the git hooks/post-receive script.

aron pushed a commit to branch master
in repository dkms.

commit 459066531a3aaffda2ceecf2875c3999ee8b4414
Author: Aron Xu <aron at debian.org>
Date:   Wed Aug 24 12:16:19 2016 +0800

    Rebase to upstream commit eb402f72b9a71ccdd0d3610db8570195eb048f1f
---
 Makefile                       |   25 +-
 README.dkms                    |    9 +-
 dkms                           | 3326 ++++++++++++++++++++++------------------
 dkms.8                         |   81 +-
 dkms.service                   |   11 +
 dkms.spec                      |  121 +-
 dkms_apport.py                 |   35 +-
 dkms_autoinstaller             |   62 +-
 dkms_common.postinst           |   60 +-
 dkms_framework.conf            |   10 +
 sample.spec                    |    2 +-
 template-dkms-mkrpm.spec       |    2 +-
 test/README                    |    1 +
 test/dkms_test-1.0/Makefile    |    7 +
 test/dkms_test-1.0/dkms.conf   |   13 +
 test/dkms_test-1.0/dkms_test.c |   23 +
 16 files changed, 2186 insertions(+), 1602 deletions(-)

diff --git a/Makefile b/Makefile
index c64332e..572bc3f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
-RELEASE_DATE := "07-December-2011"
+RELEASE_DATE := "22-September-2014"
 RELEASE_MAJOR := 2
 RELEASE_MINOR := 2
-RELEASE_SUBLEVEL := 0
-RELEASE_EXTRALEVEL := .3
+RELEASE_SUBLEVEL := 1
+RELEASE_EXTRALEVEL := .0
 RELEASE_NAME := dkms
 RELEASE_VERSION := $(RELEASE_MAJOR).$(RELEASE_MINOR).$(RELEASE_SUBLEVEL)$(RELEASE_EXTRALEVEL)
 RELEASE_STRING := $(RELEASE_NAME)-$(RELEASE_VERSION)
@@ -13,13 +13,13 @@ SBIN = $(DESTDIR)/usr/sbin
 ETC = $(DESTDIR)/etc/dkms
 VAR = $(DESTDIR)/var/lib/dkms
 MAN = $(DESTDIR)/usr/share/man/man8
-INITD = $(DESTDIR)/etc/init.d
-INITD_RH = $(DESTDIR)/etc/rc.d/init.d 
+INITD = $(DESTDIR)/etc/rc.d/init.d
 LIBDIR = $(DESTDIR)/usr/lib/dkms
 BASHDIR = $(DESTDIR)/etc/bash_completion.d
 KCONF = $(DESTDIR)/etc/kernel
 SHAREDIR = $(DESTDIR)/usr/share
 DOCDIR = $(SHAREDIR)/doc/dkms
+SYSTEMD = $(DESTDIR)/usr/lib/systemd/system
 
 #Define the top-level build directory
 BUILDDIR := $(shell pwd)
@@ -56,14 +56,23 @@ doc-perms:
 	# ensure doc file permissions ok
 	chmod 0644 $(DOCFILES)
 
-install-redhat: install doc-perms
-	mkdir -m 0755 -p  $(INITD_RH)
+install-redhat-sysv: install doc-perms
+	mkdir -m 0755 -p  $(INITD)
 	install -p -m 0755 dkms_mkkerneldoth $(LIBDIR)/mkkerneldoth
 	install -p -m 0755 dkms_find-provides $(LIBDIR)/find-provides
 	install -p -m 0755 lsb_release $(LIBDIR)/lsb_release
 	install -p -m 0644 template-dkms-mkrpm.spec $(ETC)
 	install -p -m 0644 template-dkms-redhat-kmod.spec $(ETC)
-	install -p -m 0755 dkms_autoinstaller $(INITD_RH)
+	install -p -m 0755 dkms_autoinstaller $(INITD)
+
+install-redhat-systemd: install doc-perms
+	mkdir -m 0755 -p  $(SYSTEMD)
+	install -p -m 0755 dkms_mkkerneldoth $(LIBDIR)/mkkerneldoth
+	install -p -m 0755 dkms_find-provides $(LIBDIR)/find-provides
+	install -p -m 0755 lsb_release $(LIBDIR)/lsb_release
+	install -p -m 0644 template-dkms-mkrpm.spec $(ETC)
+	install -p -m 0644 template-dkms-redhat-kmod.spec $(ETC)
+	install -p -m 0644 dkms.service $(SYSTEMD)
 
 install-doc:
 	mkdir -m 0755 -p $(DOCDIR)
diff --git a/README.dkms b/README.dkms
index 9d1e7a4..46b68c3 100644
--- a/README.dkms
+++ b/README.dkms
@@ -1,12 +1,9 @@
-README.dkms
-Version 1.1
-2/4/2004
-
 This intention of this README is to explain how a DKMS enabled module RPM
 functions and also how DKMS can be used in conjunction with tarballs which
 contain a dkms.conf file within them.
 
-The DKMS project (and any updates) can be found at: http://linux.dell.com/dkms/
+The DKMS project (and any updates) can be found at: https://github.com/dell-oss/dkms
+NOTE: IT IS NO LONGER HOSTED ON LINUX.DELL.COM.
 
 Table of Contents
 0. Installation of DKMS via RPM
@@ -133,4 +130,4 @@ dkms.conf configuration file.
 You may also wish to join the dkms-devel public mailing-list at
 http://lists.us.dell.com/.
 
-The DKMS project is located at: http://linux.dell.com/dkms/
+The DKMS project is located at: https://github.com/dell-oss/dkms
diff --git a/dkms b/dkms
index 042acc0..160ce3e 100644
--- a/dkms
+++ b/dkms
@@ -3,6 +3,7 @@
 #  Dynamic Kernel Module Support (DKMS) <dkms-devel at dell.com>
 #  Copyright (C) 2003-2008 Dell, Inc.
 #  by Gary Lerhaupt, Matt Domsch, & Mario Limonciello
+#  Copyright (C) 2012 by Darik Horn <dajhorn at vanadac.com>
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -23,16 +24,16 @@
 # All of the variables we will accept from dkms.conf.
 # Does not include directives
 readonly dkms_conf_variables="CLEAN REMAKE_INITRD remake_initrd PACKAGE_NAME
-       PACKAGE_VERSION POST_ADD POST_INSTALL POST_REMOVE PRE_BUILD
-       PRE_INSTALL BUILD_EXCLUSIVE_KERNEL BUILD_EXCLUSIVE_ARCH
-       build_exclude OBSOLETE_BY MAKE MAKE_MATCH MODULES_CONF
-       modules_conf_array PATCH PATCH_MATCH patch_array BUILT_MODULE_NAME
-       built_module_name BUILT_MODULE_LOCATION built_module_location
-       DEST_MODULE_NAME dest_module_name MODULES_CONF_OBSOLETES
-       DEST_MODULE_LOCATION dest_module_location
-       modules_conf_obsoletes MODULES_CONF_ALIAS_TYPE
-       modules_conf_alias_type STRIP strip MODULES_CONF_OBSOLETE_ONLY
-       modules_conf_obsolete_only AUTOINSTALL"
+   PACKAGE_VERSION POST_ADD POST_BUILD POST_INSTALL POST_REMOVE PRE_BUILD
+   PRE_INSTALL BUILD_DEPENDS BUILD_EXCLUSIVE_KERNEL BUILD_EXCLUSIVE_ARCH
+   build_exclude OBSOLETE_BY MAKE MAKE_MATCH MODULES_CONF
+   modules_conf_array PATCH PATCH_MATCH patch_array BUILT_MODULE_NAME
+   built_module_name BUILT_MODULE_LOCATION built_module_location
+   DEST_MODULE_NAME dest_module_name MODULES_CONF_OBSOLETES
+   DEST_MODULE_LOCATION dest_module_location
+   modules_conf_obsoletes MODULES_CONF_ALIAS_TYPE
+   modules_conf_alias_type STRIP strip MODULES_CONF_OBSOLETE_ONLY
+   modules_conf_obsolete_only AUTOINSTALL NO_WEAK_MODULES"
 
 # Some important regular expressions.  Requires bash 3 or above.
 # Any poor souls still running bash 2 or older really need an upgrade.
@@ -40,7 +41,7 @@ readonly y_re='^(Y|y)'
 readonly mv_re='^([^/]*)/(.*)$'
 readonly rh_kernels='(debug|summit|smp|enterprise|bigmem|hugemem|BOOT|vmnix)'
 
-#Areas that will vary between Linux and other OS's
+# Areas that will vary between Linux and other OS's
 _get_kernel_dir() {
     KVER=$1
     case ${current_os} in
@@ -69,16 +70,18 @@ invoke_command()
     local exitval=0
     [[ $verbose ]] && echo -e "$1" || echo -en "$2..."
     if [[ $3 = background && ! $verbose ]]; then
-	local exitval_file=$(mktemp_or_die $tmp_location/dkms.XXXXXX)
-	(eval "$1" >/dev/null 2>&1; echo "exitval=$?" >> "$exitval_file") &
-	while [[ -e $exitval_file && ! -s $exitval_file ]]; do
-	    sleep 3
-	    echo -en "."
-	done
-	. "$exitval_file"
-	rm -f "$exitval_file"
+        local pid progresspid
+        (eval "$1" >/dev/null 2>&1) & pid=$!
+        while [ -d /proc/$pid ]; do
+            sleep 3
+            echo -en "."
+        done & progresspid=$!
+        wait $pid 2>/dev/null
+        exitval=$?
+        kill $progresspid 2>/dev/null
+        wait $progresspid 2>/dev/null
     else
-	eval "$1"; exitval=$?
+        eval "$1"; exitval=$?
     fi
     (($exitval > 0)) && echo -en "(bad exit status: $exitval)"
     echo -en "\n"
@@ -126,6 +129,8 @@ show_usage()
     echo $"              [--kernelsourcedir=source-location] [--no-prepare-kernel] [--no-initrd]"
     echo $"              [--binaries-only] [--source-only] [-r release (SuSE)] [--verbose]"
     echo $"              [--size] [--spec=specfile] [--media=floppy|iso|tar] [--legacy-postinst=0|1]"
+    echo $"              [--no-depmod]"
+    echo $"              [-j number]"
 }
 
 VER()
@@ -137,11 +142,23 @@ VER()
     # The result should compare correctly as a string.
 
     echo $1 | sed -e 's:\([^0-9]\)\([0-9]\):\1 \2:g' \
-		  -e 's:\([0-9]\)\([^0-9]\):\1 \2:g' \
-		  -e 's:\(.*\): \1 :' \
-		  -e 's: \([0-9]\) : 00\1 :g' \
-		  -e 's: \([0-9][0-9]\) : 0\1 :g' \
-		  -e 's: ::g'
+        -e 's:\([0-9]\)\([^0-9]\):\1 \2:g' \
+        -e 's:\(.*\): \1 :' \
+        -e 's: \([0-9]\) : 00\1 :g' \
+        -e 's: \([0-9][0-9]\) : 0\1 :g' \
+        -e 's: ::g'
+}
+
+# Find out how many CPUs there are so that we may pass an appropriate -j
+# option to make. Ignore hyperthreading for now.
+get_num_cpus()
+{
+   # use nproc(1) from coreutils 8.1-1+ if available, otherwise single job
+   if [ -x /usr/bin/nproc ]; then
+	nproc
+   else
+	echo "1"
+  fi
 }
 
 # Figure out the correct module suffix for the kernel we are currently
@@ -162,11 +179,14 @@ set_kernel_source_dir()
 
 # A little test function for DKMS commands that only work on one kernel.
 have_one_kernel() {
-    (( ${#kernelver[@]} > 1 )) && \
-	die 4 $"The action $1 does not support multiple kernel version" \
-	$"parameters on the command line."
-    [[ $all ]] && die 5 $"The action $1 does not support the --all" \
-	$"parameter."
+    if (( ${#kernelver[@]} != 1 )); then
+        die 4 $"The action $1 does not support multiple kernel version" \
+        $"parameters on the command line."
+    fi
+    if [[ $all ]]; then
+        die 5 $"The action $1 does not support the --all" \
+        $"parameter."
+    fi
 }
 
 # Set up the kernelver and arch arrays.  You must have a 1:1 correspondence --
@@ -178,66 +198,66 @@ setup_kernels_arches()
 {
     # If all is set, use dkms status to fill the arrays
     if [[ $all && $1 != status ]]; then
-	local i=0
-	while read line; do
-	    line=${line#*/}; line=${line#*/};
-	    # (I would leave out the delimiters in the status output
-	    #  in the first place.)
-	    kernelver[$i]=${line%/*}
-	    arch[$i]=${line#*/}
-	    i=$(($i + 1))
-	done < <(module_status_built "$module" "$module_version")
+        local i=0
+        while read line; do
+            line=${line#*/}; line=${line#*/};
+            # (I would leave out the delimiters in the status output
+            #  in the first place.)
+            kernelver[$i]=${line%/*}
+            arch[$i]=${line#*/}
+            i=$(($i + 1))
+        done < <(module_status_built "$module" "$module_version")
     fi
 
     # Set default kernel version and arch, if none set (but only --all isn't set)
     if [[ $1 != status ]]; then
-	if [[ ! $kernelver && ! $all ]]; then
-	    kernelver[0]=$(uname -r)
-	    kernels_arches_default="yes"
-	fi
-	if [[ ! $arch ]]; then
-	    kernelver_rpm=$(rpm -qf "/lib/modules/$kernelver" 2>/dev/null | \
-		grep -v "not owned by any package" | grep kernel | head -n 1)
-	    if ! arch[0]=$(rpm -q --queryformat "%{ARCH}" "$kernelver_rpm" 2>/dev/null); then
-		arch[0]=$(uname -m)
-		if [[ $arch = x86_64 ]] && \
-		    grep -q Intel /proc/cpuinfo && \
-		    ls $install_tree/$kernelver/build/configs \
-		    2>/dev/null | grep -q "ia32e"; then
-		    arch[0]="ia32e"
-		fi
-	    fi
-	fi
+        if [[ ! $kernelver && ! $all ]]; then
+            kernelver[0]=$(uname -r)
+            kernels_arches_default="yes"
+        fi
+        if [[ ! $arch ]]; then
+            kernelver_rpm=$(rpm -qf "/lib/modules/$kernelver" 2>/dev/null | \
+            grep -v "not owned by any package" | grep kernel | head -n 1)
+            if ! arch[0]=$(rpm -q --queryformat "%{ARCH}" "$kernelver_rpm" 2>/dev/null); then
+                arch[0]=$(uname -m)
+                if [[ $arch = x86_64 ]] && grep -q Intel /proc/cpuinfo && ls $install_tree/$kernelver/build/configs 2>/dev/null | grep -q "ia32e"; then
+                    arch[0]="ia32e"
+                fi
+            fi
+        fi
     fi
 
     # If only one arch is specified, make it so for all the kernels
     if ((${#arch[@]} == 1 && ${#kernelver[@]} > 1)); then
-	while ((${#arch[@]} < ${#kernelver[@]})); do
-	    arch[${#arch[@]}]=$arch
-	done
+        while ((${#arch[@]} < ${#kernelver[@]})); do
+            arch[${#arch[@]}]=$arch
+        done
     fi
 
     # Set global multi_arch
     multi_arch=""
     local i=0
     for ((i=0; $i < ${#arch[@]}; i++)); do
-	[[ $arch != ${arch[$i]} ]] && {
-	    multi_arch="true"
-	    break
-	}
+        [[ $arch != ${arch[$i]} ]] && {
+            multi_arch="true"
+            break
+        }
     done
 }
 
 do_depmod()
 {
+    if [[ $no_depmod ]]; then
+        return
+    fi
     # $1 = kernel version
     if [ "${current_os}" != "Linux" ] ; then
         return
     fi
     if [[ -f /boot/System.map-$1 ]]; then
-	/sbin/depmod -a "$1" -F "/boot/System.map-$1"
+        depmod -a "$1" -F "/boot/System.map-$1"
     else
-	/sbin/depmod -a "$1"
+        depmod -a "$1"
     fi
 }
 
@@ -251,24 +271,24 @@ make_initrd()
     [[ $no_initrd ]] && return
     local mkinitrd kernel_file initrd_dir="/boot"
     for mkinitrd in dracut update-initramfs mkinitrd ''; do
-	[[ $mkinitrd ]] && which "$mkinitrd" >/dev/null 2>&1 && break
+        [[ $mkinitrd ]] && which "$mkinitrd" >/dev/null 2>&1 && break
     done
 
-    # no mkinitrd? Just return.
+    # No mkinitrd? Just return.
     [[ $mkinitrd ]] || return 0
 
-    # back up our current initrd
+    # Back up our current initrd
     echo $""
     [[ $2 = ia64 && -d /boot/efi/efi/redhat ]] && initrd_dir="/boot/efi/efi/redhat"
-    # find out what the proper filename will be
+    # Find out what the proper filename will be
     for initrd in "initrd-$1.img" "initramfs-$1.img" "initrd.img-$1" "initrd-$1" ''; do
-	[[ $initrd && -f $initrd_dir/$initrd ]] && break
+        [[ $initrd && -f $initrd_dir/$initrd ]] && break
     done
     if ! [[ $initrd ]]; then
-	# Return if we cannot find an initrd.
-	warn $"Unable to find an initial ram disk that I know how to handle." \
-	    $"Will not try to make an initrd."
-	return 0
+        # Return if we cannot find an initrd.
+        warn $"Unable to find an initial ram disk that I know how to handle." \
+            $"Will not try to make an initrd."
+        return 0
     fi
     echo $"Backing up $initrd to $initrd_dir/$initrd.old-dkms"
     cp -f "$initrd_dir/$initrd" "$initrd_dir/$initrd.old-dkms"
@@ -276,27 +296,27 @@ make_initrd()
     echo $"(If next boot fails, revert to $initrd.old-dkms image)"
 
     if [[ $mkinitrd = dracut ]]; then
-	invoke_command "$mkinitrd $1" "$mkinitrd" background
+        invoke_command "$mkinitrd -f $initrd_dir/$initrd $1" "$mkinitrd" background
     elif [[ $mkinitrd = update-initramfs ]]; then
-	invoke_command "$mkinitrd -u" "$mkinitrd" background
+        invoke_command "$mkinitrd -u -k $1" "$mkinitrd" background
     elif $mkinitrd --version >/dev/null 2>&1; then
-	invoke_command "$mkinitrd -f $initrd_dir/$initrd $1" "$mkinitrd" background
+        invoke_command "$mkinitrd -f $initrd_dir/$initrd $1" "$mkinitrd" background
     elif [[ -e /etc/SuSE-release || -d /etc/SuSEconfig ]]; then
-	for kernel_file in vmlinuz vmlinux ''; do
-	    [[ $kernel_file && -f $initrd_dir/$kernel_file ]] && break
-	done
-	if [[ ! $kernel_file ]]; then
-	    error $"Unable to find valid kernel file under " \
-		$"$initrd_dir for kernel version $1" 
-	    return 1;
-	fi
-	invoke_command "$mkinitrd -k $kernel_file-$1 -i $initrd" "$mkinitrd" background
+        for kernel_file in vmlinuz vmlinux ''; do
+            [[ $kernel_file && -f $initrd_dir/$kernel_file ]] && break
+        done
+        if [[ ! $kernel_file ]]; then
+            error $"Unable to find valid kernel file under " \
+            $"$initrd_dir for kernel version $1"
+            return 1;
+        fi
+        invoke_command "$mkinitrd -k $kernel_file-$1 -i $initrd" "$mkinitrd" background
     elif [[ -e /etc/debian_version ]]; then
-	invoke_command "$mkinitrd -o $initrd_dir/$initrd $1" "$mkinitrd" background
+        invoke_command "$mkinitrd -o $initrd_dir/$initrd $1" "$mkinitrd" background
     else
-	echo $""
-	echo $"Calling $mkinitrd (bad exit status 9 may occur)"
-	invoke_command "$mkinitrd" "$mkinitrd" background
+        echo $""
+        echo $"Calling $mkinitrd (bad exit status 9 may occur)"
+        invoke_command "$mkinitrd" "$mkinitrd" background
     fi
     return
 }
@@ -308,26 +328,41 @@ distro_version_rpm()
     local r wp ver dist
 
     for r in redhat-release sles-release suse-release ovs-release; do
-	wp=$(rpm -q --whatprovides "$r") || continue
-	ver=$(rpm -q --qf "%{version}\n" ${wp})
-	case $r in
-	    sles*) echo sles${ver};;
-	    suse*) echo suse${ver};;
-	    ovs*)  echo ovm${ver};;
-	    redhat*)
-		case $wp in
-		    redhat*|sl*)
-			ver=$(echo $ver | \
-			sed -e 's/^\([[:digit:]]*\).*/\1/g')
-			echo el${ver};;
-		    centos*|enterprise*) echo el${ver};;
-		    fedora*) echo fc${ver};;
-		    *) echo unknown ;;
-		esac
-	       ;;
-	    *) echo unknown;;
-	esac
-	return
+        wp=$(rpm -q --whatprovides "$r") || continue
+        ver=$(rpm -q --qf "%{version}\n" ${wp})
+        case $r in
+            sles*)
+                echo sles${ver}
+                ;;
+            suse*)
+                echo suse${ver}
+                ;;
+            ovs*)
+                echo ovm${ver}
+                ;;
+            redhat*)
+                case $wp in
+                    redhat*|sl*)
+                        ver=$(echo $ver | \
+                        sed -e 's/^\([[:digit:]]*\).*/\1/g')
+                        echo el${ver}
+                        ;;
+                    centos*|enterprise*)
+                        echo el${ver}
+                        ;;
+                    fedora*)
+                        echo fc${ver}
+                        ;;
+                    *)
+                        echo unknown
+                        ;;
+                esac
+                ;;
+            *)
+                echo unknown
+                ;;
+        esac
+        return
     done
     echo unknown
 }
@@ -339,36 +374,38 @@ distro_version()
     # What distribution are we running?
     local LSB_DESCRIPTION DISTRIB_ID DISTRIB_RELEASE ver
 
-    # try the LSB-provided strings first
+    # Try the LSB-provided strings first
     if [ -r /etc/lsb-release ]; then
-	. /etc/lsb-release
+        . /etc/lsb-release
     elif type lsb_release >/dev/null 2>&1; then
-	DISTRIB_ID=$(lsb_release -i -s)
-	DISTRIB_RELEASE=$(lsb_release -r -s)
+        DISTRIB_ID=$(lsb_release -i -s)
+        DISTRIB_RELEASE=$(lsb_release -r -s)
     fi
 
     case ${DISTRIB_ID} in
-	Fedora)     echo fc${DISTRIB_RELEASE} ;;
-	RedHatEnterprise*|CentOS|ScientificSL)  # OEL also reports as such
-	# format is 4.7, 5.3
-	    ver=$(echo "${DISTRIB_RELEASE}" | \
-		sed -e 's/^\([[:digit:]]*\).*/\1/g')
-	    echo el${ver}
-	    ;;
-	SUSE*)
-	    if [[ $(lsb_release -d -s) =~ Enterprise ]]; then
-		echo sles${DISTRIB_RELEASE}
-	    else
-		echo suse${DISTRIB_RELEASE}
-	    fi
-	    ;;
-	*)
-	    if [[ ${DISTRIB_ID} && ${DISTRIB_RELEASE} ]]; then
-		echo "${DISTRIB_ID}${DISTRIB_RELEASE}"
-	    else
-		distro_version_rpm
-	    fi
-	    ;;
+        Fedora)
+            echo fc${DISTRIB_RELEASE}
+            ;;
+        RedHatEnterprise*|CentOS|ScientificSL)
+            # OEL also reports as such; format is 4.7, 5.3
+            ver=$(echo "${DISTRIB_RELEASE}" | \
+            sed -e 's/^\([[:digit:]]*\).*/\1/g')
+            echo el${ver}
+            ;;
+        SUSE*)
+            if [[ $(lsb_release -d -s) =~ Enterprise ]]; then
+                echo sles${DISTRIB_RELEASE}
+            else
+                echo suse${DISTRIB_RELEASE}
+            fi
+            ;;
+        *)
+            if [[ ${DISTRIB_ID} && ${DISTRIB_RELEASE} ]]; then
+                echo "${DISTRIB_ID}${DISTRIB_RELEASE}"
+            else
+                distro_version_rpm
+            fi
+            ;;
     esac
 }
 
@@ -378,24 +415,44 @@ override_dest_module_location()
     [[ ${addon_modules_dir} ]] && echo "/${addon_modules_dir}" && return
 
     if [ "$current_os" = "GNU/kFreeBSD" ] ; then
-	# Does not support subdirs, regardless of distribution
-	echo "" && return
+        # Does not support subdirs, regardless of distribution
+        echo "" && return
     fi
 
     case "$running_distribution" in
-	fc[12345]) ;;
-	el[1234]) ;;
-	sles[123456789]) ;;
-	suse[123456789]) ;;
-	suse10\.[01]) ;;
-	fc*) echo "/extra" && return ;;
-	el*) echo "/extra" && return ;;
-	ovm*) echo "/extra" && return ;;
-	sles*) echo "/updates" && return ;;
-	suse*) echo "/updates" && return ;;
-	Ubuntu*) echo "/updates/dkms" && return ;;
-	Debian*) echo "/updates/dkms" && return ;;
-	*) ;;
+    fc[12345])
+        ;;
+    el[1234])
+        ;;
+    sles[123456789])
+        ;;
+    suse[123456789])
+        ;;
+    suse10\.[01])
+        ;;
+    fc*)
+        echo "/extra" && return
+        ;;
+    el*)
+        echo "/extra" && return
+        ;;
+    ovm*)
+        echo "/extra" && return
+        ;;
+    sles*)
+        echo "/updates" && return
+        ;;
+    suse*)
+        echo "/updates" && return
+        ;;
+    Ubuntu*)
+        echo "/updates/dkms" && return
+        ;;
+    Debian*)
+        echo "/updates/dkms" && return
+        ;;
+    *)
+        ;;
     esac
     echo "$orig_location"
 }
@@ -413,21 +470,21 @@ safe_source() {
     declare -a -r export_envs=("$@")
     local tmpfile=$(mktemp_or_die)
     ( exec >"$tmpfile"
-	. "$to_source_file" >/dev/null
-	# This is really ugly, but a neat hack
-	# Remember, in bash 2.0 and greater all variables are really arrays.
-	for _export_env in "${export_envs[@]}"; do
-	    for _i in $(eval echo \${!$_export_env[@]}); do
-		eval echo '$_export_env[$_i]=\"${'$_export_env'[$_i]}\"'
-	    done
-	done
-
-	# handle DKMS_DIRECTIVE stuff specially.
-	for directive in $(set | grep ^DKMS_DIRECTIVE | cut -d = -f 2-3); do
-	    directive_name=${directive%%=*}
-	    directive_value=${directive#*=}
-	    echo "$directive_name=\"$directive_value\""
-	done
+    . "$to_source_file" >/dev/null
+    # This is really ugly, but a neat hack
+    # Remember, in bash 2.0 and greater all variables are really arrays.
+    for _export_env in "${export_envs[@]}"; do
+        for _i in $(eval echo \${!$_export_env[@]}); do
+            eval echo '$_export_env[$_i]=\"${'$_export_env'[$_i]}\"'
+        done
+    done
+
+    # handle DKMS_DIRECTIVE stuff specially.
+    for directive in $(set | grep ^DKMS_DIRECTIVE | cut -d = -f 2-3); do
+        directive_name=${directive%%=*}
+        directive_value=${directive#*=}
+        echo "$directive_name=\"$directive_value\""
+    done
     )
     . "$tmpfile"
     rm "$tmpfile"
@@ -456,15 +513,15 @@ read_conf()
     [[ $3 ]] && read_conf_file="$3"
 
     [[ -r $read_conf_file ]] || die 4 $"Could not locate dkms.conf file." \
-	$"File: $conf does not exist."
+    $"File: $conf does not exist."
 
     [[ $last_mvka = $module/$module_version/$1/$2 && \
-	$last_mvka_conf = $(readlink -f $read_conf_file) ]] && return
+    $last_mvka_conf = $(readlink -f $read_conf_file) ]] && return
 
 
     # Clear variables and arrays
     for var in $dkms_conf_variables; do
-	unset $var
+        unset $var
     done
 
     # Source in the dkms.conf.
@@ -478,10 +535,10 @@ read_conf()
 
     # Source in the directive_array
     for directive in "${directive_array[@]}"; do
-	directive_name=${directive%%=*}
-	directive_value=${directive#*=}
-	export $directive_name="$directive_value"
-	echo $"DIRECTIVE: $directive_name=\"$directive_value\""
+        directive_name=${directive%%=*}
+        directive_value=${directive#*=}
+        export $directive_name="$directive_value"
+        echo $"DIRECTIVE: $directive_name=\"$directive_value\""
     done
 
     # Set variables
@@ -499,159 +556,169 @@ read_conf()
     # Set module naming/location arrays
     local index array_size=0 s
     for s in ${#BUILT_MODULE_NAME[@]} \
-	${#BUILT_MODULE_LOCATION[@]} \
-	${#DEST_MODULE_NAME[@]} \
-	${#DEST_MODULE_LOCATION[@]}; do
-	((s > array_size)) && array_size=$s
+        ${#BUILT_MODULE_LOCATION[@]} \
+        ${#DEST_MODULE_NAME[@]} \
+        ${#DEST_MODULE_LOCATION[@]}; do
+        ((s > array_size)) && array_size=$s
     done
     for ((index=0; index < array_size; index++)); do
-	# Set values
-	built_module_name[$index]=${BUILT_MODULE_NAME[$index]}
-	built_module_location[$index]=${BUILT_MODULE_LOCATION[$index]}
-	dest_module_name[$index]=${DEST_MODULE_NAME[$index]}
-	dest_module_location[$index]=${DEST_MODULE_LOCATION[$index]}
-	modules_conf_obsoletes[$index]=${MODULES_CONF_OBSOLETES[$index]}
-	modules_conf_alias_type[$index]=${MODULES_CONF_ALIAS_TYPE[$index]}
-	case ${MODULES_CONF_OBSOLETE_ONLY[$index]} in
-	    [yY]*) modules_conf_obsolete_only[$index]="yes";;
-	esac
-	case ${STRIP[$index]} in
-	    [nN]*) strip[$index]="no";;
-	    *)     strip[$index]="yes";;
-	esac
-
-	# If unset, set by defaults
-	[[ ! ${built_module_name[$index]} ]] && \
-	    ((${#DEST_MODULE_LOCATION[@]} == 1)) && \
-	    built_module_name[$index]=$module
-	[[ ! ${dest_module_name[$index]} ]] && \
-	    dest_module_name[$index]=${built_module_name[$index]}
-	[[ ${built_module_location[$index]} && \
-	    ${built_module_location[$index]:(-1)} != / ]] && \
-	    built_module_location[$index]="${built_module_location[$index]}/"
-
-	# FAIL if no built_module_name
-	if [[ ! ${built_module_name[$index]} ]]; then
-	    echo $"dkms.conf: Error! No 'BUILT_MODULE_NAME' directive specified for record #$index." >&2
-	    return_value=1
-	fi
+        # Set values
+        built_module_name[$index]=${BUILT_MODULE_NAME[$index]}
+        built_module_location[$index]=${BUILT_MODULE_LOCATION[$index]}
+        dest_module_name[$index]=${DEST_MODULE_NAME[$index]}
+        dest_module_location[$index]=${DEST_MODULE_LOCATION[$index]}
+        modules_conf_obsoletes[$index]=${MODULES_CONF_OBSOLETES[$index]}
+        modules_conf_alias_type[$index]=${MODULES_CONF_ALIAS_TYPE[$index]}
+        case ${MODULES_CONF_OBSOLETE_ONLY[$index]} in
+            [yY]*)
+                modules_conf_obsolete_only[$index]="yes"
+                ;;
+        esac
+        case ${STRIP[$index]} in
+            [nN]*)
+                strip[$index]="no"
+                ;;
+            [yY]*)
+                strip[$index]="yes"
+                ;;
+            '')
+                strip[$index]=${strip[0]:-yes}
+                ;;
+        esac
+
+        # If unset, set by defaults
+        [[ ! ${built_module_name[$index]} ]] && \
+            ((${#DEST_MODULE_LOCATION[@]} == 1)) && \
+            built_module_name[$index]=$module
+        [[ ! ${dest_module_name[$index]} ]] && \
+            dest_module_name[$index]=${built_module_name[$index]}
+        [[ ${built_module_location[$index]} && \
+            ${built_module_location[$index]:(-1)} != / ]] && \
+            built_module_location[$index]="${built_module_location[$index]}/"
+
+        # FAIL if no built_module_name
+        if [[ ! ${built_module_name[$index]} ]]; then
+            echo $"dkms.conf: Error! No 'BUILT_MODULE_NAME' directive specified for record #$index." >&2
+            return_value=1
+        fi
 
-	# FAIL if built_module_name ends in .o or .ko
-	case ${built_module_name[$index]} in
-	*.o|*.ko)
-	    echo $"dkms.conf: Error! 'BUILT_MODULE_NAME' directive ends in '.o' or '.ko' in record #$index." >&2
-	    return_value=1
-	    ;;
-	esac
-
-	# FAIL if dest_module_name ends in .o or .ko
-	case ${dest_module_name[$index]} in
-	*.o|*.ko)
-	    echo $"dkms.conf: Error! 'DEST_MODULE_NAME' directive ends in '.o' or '.ko' in record #$index." >&2
-	    return_value=1
-	    ;;
-	esac
-
-	# Override location for specific kernels
-	dest_module_location[$index]="$(override_dest_module_location ${dest_module_location[$index]})"
-
-	# Fail if no DEST_MODULE_LOCATION
-	if [[ ! ${DEST_MODULE_LOCATION[$index]} ]]; then
-	    echo $"dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #$index.">&2
-	    return_value=1
-	fi
-	    # Fail if bad DEST_MODULE_LOCATION
-	case ${DEST_MODULE_LOCATION[$index]} in
-	    /kernel*) ;;
-	    /updates*) ;;
-	    /extra*) ;;
-	    *)
-		echo $"dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with">&2
-		echo $"'/kernel', '/updates', or '/extra' in record #$index.">&2
-		return_value=1
-		;;
-	esac
+        # FAIL if built_module_name ends in .o or .ko
+        case ${built_module_name[$index]} in
+            *.o|*.ko)
+                echo $"dkms.conf: Error! 'BUILT_MODULE_NAME' directive ends in '.o' or '.ko' in record #$index." >&2
+                return_value=1
+                ;;
+        esac
+
+        # FAIL if dest_module_name ends in .o or .ko
+        case ${dest_module_name[$index]} in
+            *.o|*.ko)
+                echo $"dkms.conf: Error! 'DEST_MODULE_NAME' directive ends in '.o' or '.ko' in record #$index." >&2
+                return_value=1
+                ;;
+        esac
+
+        # Override location for specific kernels
+        dest_module_location[$index]="$(override_dest_module_location ${dest_module_location[$index]})"
+
+        # Fail if no DEST_MODULE_LOCATION
+        if [[ ! ${DEST_MODULE_LOCATION[$index]} ]]; then
+            echo $"dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified for record #$index.">&2
+            return_value=1
+        fi
+            # Fail if bad DEST_MODULE_LOCATION
+        case ${DEST_MODULE_LOCATION[$index]} in
+            /kernel*)
+                ;;
+            /updates*)
+                ;;
+            /extra*)
+                ;;
+            *)
+            echo $"dkms.conf: Error! Directive 'DEST_MODULE_LOCATION' does not begin with">&2
+            echo $"'/kernel', '/updates', or '/extra' in record #$index.">&2
+            return_value=1
+            ;;
+        esac
     done
 
     # Get the correct make command
     [[ ${MAKE_MATCH[0]} ]] || make_command="${MAKE[0]}"
     for ((index=0; index < ${#MAKE[@]}; index++)); do
-	[[ ${MAKE[$index]} && ${MAKE_MATCH[$index]} && \
-	    $1 =~ ${MAKE_MATCH[$index]} ]] && \
-	    make_command="${MAKE[$index]}"
+    [[ ${MAKE[$index]} && ${MAKE_MATCH[$index]} && \
+        $1 =~ ${MAKE_MATCH[$index]} ]] && \
+        make_command="${MAKE[$index]}"
     done
 
     # Use the generic make and make clean commands if not specified
     if [[ $(VER $1) < $(VER 2.6.6) ]]; then
-	[[ ! $make_command ]] && \
-	    make_command="make -C $kernel_source_dir SUBDIRS=$dkms_tree/$module/$module_version/build modules"
-	[[ ! $clean ]] && \
-	    clean="make -C $kernel_source_dir SUBDIRS=$dkms_tree/$module/$module_version/build clean"
+        [[ ! $make_command ]] && make_command="make -C $kernel_source_dir SUBDIRS=$dkms_tree/$module/$module_version/build modules"
+        [[ ! $clean ]] && clean="make -C $kernel_source_dir SUBDIRS=$dkms_tree/$module/$module_version/build clean"
     else
-	[[ ! $make_command ]] && \
-	    make_command="make -C $kernel_source_dir M=$dkms_tree/$module/$module_version/build"
-	 [[ ! $clean ]] && \
-	     clean="make -C $kernel_source_dir M=$dkms_tree/$module/$module_version/build clean"
+        [[ ! $make_command ]] && make_command="make -C $kernel_source_dir M=$dkms_tree/$module/$module_version/build"
+        [[ ! $clean ]] && clean="make -C $kernel_source_dir M=$dkms_tree/$module/$module_version/build clean"
     fi
 
     # Set modules_conf_array
     for ((index=0; index < ${#MODULES_CONF[@]}; index++)); do
-	[[ ${MODULES_CONF[$index]} ]] && modules_conf_array[$index]="${MODULES_CONF[$index]}"
+        [[ ${MODULES_CONF[$index]} ]] && modules_conf_array[$index]="${MODULES_CONF[$index]}"
     done
 
     # Set patch_array (including kernel specific patches)
     count=0
     for ((index=0; index < ${#PATCH[@]}; index++)); do
-	if [[ ${PATCH[$index]} && (! ${PATCH_MATCH[$index]} || \
-		$1 =~ ${PATCH_MATCH[$index]}) ]]; then
-	    patch_array[$count]="${PATCH[$index]}"
-	    count=$(($count+1))
-	fi
+    if [[ ${PATCH[$index]} && (! ${PATCH_MATCH[$index]} || $1 =~ ${PATCH_MATCH[$index]}) ]]; then
+        patch_array[$count]="${PATCH[$index]}"
+        count=$(($count+1))
+    fi
     done
 
     # Set remake_initrd
     [[ $REMAKE_INITRD =~ $y_re ]] && remake_initrd="yes"
 
     # Set build_exclude
-    [[ $BUILD_EXCLUSIVE_KERNEL && ! $1 =~ $BUILD_EXCLUSIVE_KERNEL ]] && \
-       build_exclude="yes"
-    [[ $BUILD_EXCLUSIVE_ARCH && ! $2 =~ $BUILD_EXCLUSIVE_ARCH ]] && \
-	build_exclude="yes"
+    [[ $BUILD_EXCLUSIVE_KERNEL && ! $1 =~ $BUILD_EXCLUSIVE_KERNEL ]] && build_exclude="yes"
+    [[ $BUILD_EXCLUSIVE_ARCH && ! $2 =~ $BUILD_EXCLUSIVE_ARCH ]] && build_exclude="yes"
 
     # Fail if absolutely no DEST_MODULE_LOCATION
     if ((${#dest_module_location[@]} == 0)); then
-	echo $"dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified." >&2
-	return_value=1
+        echo $"dkms.conf: Error! No 'DEST_MODULE_LOCATION' directive specified." >&2
+        return_value=1
     fi
 
     # Fail if no PACKAGE_NAME
     if [[ ! $package_name ]]; then
-	echo $"dkms.conf: Error! No 'PACKAGE_NAME' directive specified.">&2
-	return_value=1
+        echo $"dkms.conf: Error! No 'PACKAGE_NAME' directive specified.">&2
+        return_value=1
     fi
 
     # Fail if no PACKAGE_VERSION
     if [[ ! $package_version ]]; then
-	echo $"dkms.conf: Error! No 'PACKAGE_VERSION' directive specified.">&2
-	return_value=1
+        echo $"dkms.conf: Error! No 'PACKAGE_VERSION' directive specified.">&2
+        return_value=1
     fi
 
     # Set clean
     [[ $clean ]] || clean="make clean"
 
-    ((return_value == 0)) && last_mvka="$module/$module_version/$1/$2" && \
-	last_mvka_conf="$(readlink -f "$read_conf_file")"
+    ((return_value == 0)) && last_mvka="$module/$module_version/$1/$2" && last_mvka_conf="$(readlink -f "$read_conf_file")"
     return $return_value
 }
 
 # Little helper function for parsing the output of modinfo.
 get_module_verinfo(){
+    unset res
     local vals=
     while read -a vals; do
-	case ${vals[0]} in
-	    version:) res[0]=${vals[1]}; res[2]=${vals[2]};;
-	    srcversion:) res[1]=${vals[1]};;
-	esac
+    case ${vals[0]} in
+        version:)
+            res[0]=${vals[1]}
+            res[2]=${vals[2]}
+            ;;
+        srcversion:)
+        res[1]=${vals[1]}
+        ;;
+    esac
     done < <(modinfo $1)
 }
 
@@ -670,107 +737,108 @@ check_version_sanity()
     local -a kernels_info dkms_info
     set_module_suffix
     read -a kernels_module < <(find $lib_tree -name ${4}$module_suffix)
-    [[ $kernels_module ]] || return 0
+    if [ -z $kernels_module ]; then
+        # Magic split into array syntax saves trivial awk and cut calls.
+        local -a obs=(${3//-/ })
+        local -a my=(${1//-/ })
+        local obsolete=0
+        if [[ ${obs} && ${my} ]]; then
+            if [[ $(VER ${obs}) == $(VER ${my}) && ! $force ]]; then
+                # They get obsoleted possibly in this kernel release
+                if [[ ! ${obs[1]} ]]; then
+                    # They were obsoleted in this upstream kernel
+                    obsolete=1
+                elif [[ $(VER ${my[1]}) > $(VER ${obs[1]}) ]]; then
+                    # They were obsoleted in an earlier ABI bump of the kernel
+                    obsolete=1
+                elif [[ $(VER ${my[1]}) = $(VER ${obs[1]}) ]]; then
+                    # They were obsoleted in this ABI bump of the kernel
+                    obsolete=1
+                fi
+            elif [[ $(VER ${my}) > $(VER ${obs}) && ! $force ]]; then
+                # They were obsoleted in an earlier kernel release
+                obsolete=1
+            fi
+        fi
+
+        if ((obsolete == 1)); then
+            echo $"" >&2
+            echo $"Module has been obsoleted due to being included" >&2
+            echo $"in kernel $3.  We will avoid installing" >&2
+            echo $"for future kernels above $3." >&2
+            echo $"You may override by specifying --force." >&2
+            return 1
+  else
+          return 0
+        fi
+    fi
+
     if [[ ${kernels_module[1]} ]]; then
-	warn $"Warning! Cannot do version sanity checking because multiple ${4}$module_suffix" \
-	    $"modules were found in kernel $1."
-	return 0
+        warn $"Warning! Cannot do version sanity checking because multiple ${4}$module_suffix" \
+            $"modules were found in kernel $1."
+        return 0
     fi
     local dkms_module="$dkms_tree/$module/$module_version/$1/$2/module/${4}$module_suffix"
     get_module_verinfo $kernels_module; kernels_info=("${res[@]}")
     get_module_verinfo $dkms_module; dkms_info=("${res[@]}")
     if [[ ! ${dkms_info[1]} && ${kernels_info[1]} ]]; then
-	# use obsolete checksum info
-	dkms_info[1]=${dkms_info[2]}
-	kernels_info[1]=${kernels_info[2]}
-    fi
-
-    if [[ ${kernels_info[1]} && ${dkms_info[1]} && \
-	${kernels_info[1]} = ${dkms_info[1]} && ! $force ]]; then
-	echo $"" >&2
-	echo $"Good news! Module version $dkms_info for ${4}$module_suffix" >&2
-	echo $"exactly matches what is already found in kernel $1." >&2
-	echo $"DKMS will not replace this module." >&2
-	echo $"You may override by specifying --force." >&2
-	return 1
-    fi
-
-    if [[ $kernels_info && $dkms_info && \
-	! ( $(VER $dkms_info) > $(VER $kernels_info) ) && ! $force ]]; then
-	error $"Module version $dkms_info for ${4}$module_suffix" \
-	    $"is not newer than what is already found in kernel $1 ($kernels_info)." \
-	    $"You may override by specifying --force."
-	return 1
-    fi
-
-    # magic split into array syntax saves trivial awk and cut calls.
-    local -a obs=(${3//-/ })
-    local -a my=(${1//-/ })
-    local obsolete=0
-    if [[ ${obs} && ${my} ]]; then
-	if [[ $(VER ${obs}) == $(VER ${my}) && ! $force ]]; then
-	    #they get obsoleted possibly in this kernel release
-	    if [[ ! ${obs[1]} ]]; then
-		#they were obsoleted in this upstream kernel
-		obsolete=1
-	    elif [[ $(VER ${my[1]}) > $(VER ${obs[1]}) ]]; then
-		#they were obsoleted in an earlier ABI bump of the kernel
-		obsolete=1
-	    elif [[ $(VER ${my[1]}) = $(VER ${obs[1]}) ]]; then
-		#they were obsoleted in this ABI bump of the kernel
-		obsolete=1
-	    fi
-	elif [[ $(VER ${my}) > $(VER ${obs}) && ! $force ]]; then
-	    #they were obsoleted in an earlier kernel release
-	    obsolete=1
-	fi
+        # Use obsolete checksum info
+        dkms_info[1]=${dkms_info[2]}
+        kernels_info[1]=${kernels_info[2]}
+    fi
+
+    if [[ ${kernels_info[1]} && ${dkms_info[1]} && ${kernels_info[1]} = ${dkms_info[1]} && ! $force ]]; then
+        echo $"" >&2
+        echo $"Good news! Module version $dkms_info for ${4}$module_suffix" >&2
+        echo $"exactly matches what is already found in kernel $1." >&2
+        echo $"DKMS will not replace this module." >&2
+        echo $"You may override by specifying --force." >&2
+        return 1
     fi
 
-    if ((obsolete == 1)); then
-	echo $"" >&2
-	echo $"Module has been obsoleted due to being included" >&2
-	echo $"in kernel $3.  We will avoid installing" >&2
-	echo $"for future kernels above $3." >&2
-	echo $"You may override by specifying --force." >&2
-	return 1
+    if [[ $kernels_info && $dkms_info && ! ( $(VER $dkms_info) > $(VER $kernels_info) ) && ! $force ]]; then
+        error $"Module version $dkms_info for ${4}$module_suffix" \
+            $"is not newer than what is already found in kernel $1 ($kernels_info)." \
+            $"You may override by specifying --force."
+        return 1
     fi
+
     return 0
 }
 
 moduleconfig_update_obsoletes()
 {
     # $@ = files to process
-    # do nothing if we have no obsoletes
-    [[ ${modules_conf_obsoletes[@]} ]] || return 0
-    # generate sed args to remove obsolete modules
+    # Do nothing if we have no obsoletes
+    ( IFS=; [[ "${modules_conf_obsoletes[*]}" ]] ) || return 0
+    # Generate sed args to remove obsolete modules
     local mod_diff
     for ((index=0; index < ${#dest_module_name[@]}; index++)); do
-	[[ ${modules_conf_obsoletes[$index]} ]] || continue
-	for obsolete_module in ${modules_conf_obsoletes[$index]//,/ }; do
-	    # for module.conf style syntax
-	    sa_mc_o[${#sa_mc_o[@]}]="-e"
-	    sa_mc_o[${#sa_mc_o[@]}]="s/\(alias ${modules_conf_alias_type[$index]}[0-9]*\) $obsolete_module$/\1 ${dest_module_name[$index]}/g"
-
-	    # for /etc/sysconfig/kernel style syntax
-	    sa_sck_o[${#sa_sck_o[@]}]="-e"
-	    sa_sck_o[${#sa_sck_o[@]}]="s/\(INITRD_MODULES.*\)$obsolete_module\b\(.*\)/\1${dest_module_name[$index]}\2/"
-	done
+        [[ ${modules_conf_obsoletes[$index]} ]] || continue
+        for obsolete_module in ${modules_conf_obsoletes[$index]//,/ }; do
+            # For module.conf style syntax
+            sa_mc_o[${#sa_mc_o[*]}]="-e"
+            sa_mc_o[${#sa_mc_o[*]}]="s/\(alias ${modules_conf_alias_type[$index]}[0-9]*\) $obsolete_module$/\1 ${dest_module_name[$index]}/g"
+            # For /etc/sysconfig/kernel style syntax
+            sa_sck_o[${#sa_sck_o[*]}]="-e"
+            sa_sck_o[${#sa_sck_o[*]}]="s/\(INITRD_MODULES.*\)$obsolete_module\b\(.*\)/\1${dest_module_name[$index]}\2/"
+        done
     done
 
-    # do all the changes at once, record the diffs for posterity
+    # Do all the changes at once, record the diffs for posterity
     for file in "$@"; do
-	[[ $file && -w $file ]] || continue
-	if [[ $file = /etc/sysconfig/kernel ]]; then
-	    sed "${sa_sck_o[@]}" "$file" > "$temp_dir_name/${file##*/}.new"
-	else
-	    sed "${sa_mc_o[@]}" "$file" > "$temp_dir_name/${file##*/}.new"
-	fi
-	if ! mod_diff=$(diff -u "$temp_dir_name/${file##*/}.new" "$file"); then
-	    echo $"$file updated to replace obsoleted module references:"
-	    echo "$mod_diff"
-	    cp -fp "$temp_dir_name/${file##*/}.new" "$file"
-	    rm -f "$temp_dir_name/${file##*/}.new"
-	fi
+        [[ $file && -w $file ]] || continue
+        if [[ $file = /etc/sysconfig/kernel ]]; then
+            sed "${sa_sck_o[*]}" "$file" > "$temp_dir_name/${file##*/}.new"
+        else
+            sed "${sa_mc_o[*]}" "$file" > "$temp_dir_name/${file##*/}.new"
+        fi
+        if ! mod_diff=$(diff -u "$temp_dir_name/${file##*/}.new" "$file"); then
+            echo $"$file updated to replace obsoleted module references:"
+            echo "$mod_diff"
+            cp -fp "$temp_dir_name/${file##*/}.new" "$file"
+            rm -f "$temp_dir_name/${file##*/}.new"
+        fi
     done
 }
 
@@ -781,46 +849,45 @@ moduleconfig_add()
     local temp_dir_name=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
     local -a sa_mc_o=() sa_sck_o=()
     modconfig_files="/etc/modprobe.d/dkms.conf
-		     /etc/modprobe.d/dkms
-		     /etc/modules.conf
-		     /etc/modprobe.conf
-		     /etc/modprobe.d/$package_name.conf
-		     /etc/sysconfig/kernel"
+        /etc/modprobe.d/dkms
+        /etc/modules.conf
+        /etc/modprobe.conf
+        /etc/modprobe.d/$package_name.conf
+        /etc/sysconfig/kernel"
 
     moduleconfig_update_obsoletes $modconfig_files
 
     for moduleconfig in $modconfig_files; do
-	[[ -e $moduleconfig ]] || continue
-	for ((index=0; index < ${#dest_module_name[@]}; index++)); do
-
-	    # Only add it if it can't be found already in config file
-	    if [[ ${modules_conf_alias_type[$index]} ]] && \
-	       ! grep -qs "alias ${modules_conf_alias_type[$index]}[0-9]* ${dest_module_name[$index]}\b" $moduleconfig && \
-	       [[ ${modules_conf_obsolete_only[$index]} != yes ]]; then
-		if [[ $modconfig_files = /etc/modprobe.d/$package_name.conf ]] && \
-		    [[ ! -e /etc/modprobe.d/$package_name.conf ]]; then
-		    touch /etc/modprobe.d/$package_name.conf
-		    echo $"created /etc/modprobe.d/$package_name.conf.">&2
-		fi
-		aliases=$(awk "/^alias ${modules_conf_alias_type[$index]}/ {print \$2}" $moduleconfig)
-		if [[ $aliases ]]; then
-		    alias_number=$(($(echo "$aliases" | sed "s/${modules_conf_alias_type[$index]}//" | sort -n | tail -n 1) + 1))
-		else
-		    alias_number=0
-		fi
-		echo -e "alias ${modules_conf_alias_type[$index]}${alias_number} ${dest_module_name[$index]}" >> $moduleconfig
-		echo $"$moduleconfig: added alias reference for '${dest_module_name[$index]}'"
-	    fi
-	done
-
-	# Add anything else
-	for ((index=0; index < ${#modules_conf_array[@]}; index++)); do
-	    if [ -n "${modules_conf_array[$index]}" ] && \
-	    ! grep -q "${modules_conf_array[$index]}" "$moduleconfig"; then
-	    echo -e $"$moduleconfig: added '${modules_conf_array[$index]}'"
-	    echo -e "${modules_conf_array[$index]}" >> $moduleconfig
-	    fi
-	done
+    [[ -e $moduleconfig ]] || continue
+    for ((index=0; index < ${#dest_module_name[@]}; index++)); do
+
+        # Only add it if it can't be found already in config file
+        if [[ ${modules_conf_alias_type[$index]} ]] && \
+           ! grep -qs "alias ${modules_conf_alias_type[$index]}[0-9]* ${dest_module_name[$index]}\b" $moduleconfig && \
+           [[ ${modules_conf_obsolete_only[$index]} != yes ]]; then
+            if [[ $modconfig_files = /etc/modprobe.d/$package_name.conf ]] && [[ ! -e /etc/modprobe.d/$package_name.conf ]]; then
+                touch /etc/modprobe.d/$package_name.conf
+                echo $"created /etc/modprobe.d/$package_name.conf.">&2
+            fi
+            aliases=$(awk "/^alias ${modules_conf_alias_type[$index]}/ {print \$2}" $moduleconfig)
+            if [[ $aliases ]]; then
+                alias_number=$(($(echo "$aliases" | sed "s/${modules_conf_alias_type[$index]}//" | sort -n | tail -n 1) + 1))
+            else
+                alias_number=0
+            fi
+            echo -e "alias ${modules_conf_alias_type[$index]}${alias_number} ${dest_module_name[$index]}" >> $moduleconfig
+            echo $"$moduleconfig: added alias reference for '${dest_module_name[$index]}'"
+        fi
+    done
+
+    # Add anything else
+    for ((index=0; index < ${#modules_conf_array[@]}; index++)); do
+        if [ -n "${modules_conf_array[$index]}" ] && \
+        ! grep -q "${modules_conf_array[$index]}" "$moduleconfig"; then
+        echo -e $"$moduleconfig: added '${modules_conf_array[$index]}'"
+        echo -e "${modules_conf_array[$index]}" >> $moduleconfig
+        fi
+    done
     done
 
     # Delete the temp dir
@@ -840,40 +907,41 @@ moduleconfig_remove()
     [ -e /etc/modprobe.d/$package_name.conf ] && modconfig_files="/etc/modprobe.d/$package_name.conf"
 
     for moduleconfig in $modconfig_files; do
-	for ((index=0; index < ${#dest_module_name[@]}; index++)); do
-	    # Remove/Replace aliases (maybe)
-	    [[ ${modules_conf_alias_type[$index]} ]] || continue
-	    find "$install_tree/$1/" -name "${dest_module_name[$index]}.*" -quit 2>/dev/null && continue
-
-	    local conf_replacement=""
-	    for obsolete_module in ${modules_conf_obsoletes[$index]//,/ }; do
-		find $install_tree/$1/ -name "$obsolete_module.*" -quit 2>/dev/null || continue
-		conf_replacement=$obsolete_module
-		break
-	    done
-
-	    if [[ ! $conf_replacement ]]; then
-		grep -v "alias ${modules_conf_alias_type[$index]}[0-9]* ${dest_module_name[$index]}" $moduleconfig > $temp_dir_name/moduleconfig.new
-		mv -f $temp_dir_name/moduleconfig.new $moduleconfig
-		echo $"$moduleconfig: removed alias for '${dest_module_name[$index]}'"
-		if [[ $modconfig_files = /etc/modprobe.d/$package_name.conf ]]; then
-		    rm -f /etc/modprobe.d/$package_name.conf
-		    echo $"$moduleconfig: deleted /etc/modprobe.d/$package_name.conf file"
-		fi
-	    elif grep -q "alias ${modules_conf_alias_type[$index]}[0-9]* ${dest_module_name[$index]}$" $moduleconfig; then
-		sed "s/\(alias ${modules_conf_alias_type[$index]}[0-9]*\) ${dest_module_name[$index]}$/\1 $conf_replacement/g" $moduleconfig > $temp_dir_name/moduleconfig.new
-		mv -f $temp_dir_name/moduleconfig.new $moduleconfig
-		echo $"$moduleconfig: alias for '${dest_module_name[$index]}' changed back to '$conf_replacement'"
-	    fi
-	done
-
-	# Remove static conf entries
-	for ((index=0; index < ${#modules_conf_array[@]}; index++)); do
-	    [[ ${modules_conf_array[$index]} ]] || continue
-	    grep -v "${modules_conf_array[$index]}" "$moduleconfig" > $temp_dir_name/moduleconfig.new
-	    echo $"$moduleconfig: removed '${modules_conf_array[$index]}'"
-	    mv -f $temp_dir_name/moduleconfig.new $moduleconfig
-	done
+        for ((index=0; index < ${#dest_module_name[@]}; index++)); do
+            # Remove/Replace aliases (maybe)
+            [[ ${modules_conf_alias_type[$index]} ]] || continue
+            find "$install_tree/$1/" -name "${dest_module_name[$index]}.*" -quit 2>/dev/null && continue
+
+            local conf_replacement=""
+            for obsolete_module in ${modules_conf_obsoletes[$index]//,/ }; do
+                find $install_tree/$1/ -name "$obsolete_module.*" -quit 2>/dev/null || continue
+                conf_replacement=$obsolete_module
+                break
+            done
+
+            if [[ ! $conf_replacement ]]; then
+                grep -v "alias ${modules_conf_alias_type[$index]}[0-9]* ${dest_module_name[$index]}" $moduleconfig > $temp_dir_name/moduleconfig.new
+                mv -f $temp_dir_name/moduleconfig.new $moduleconfig
+                echo $"$moduleconfig: removed alias for '${dest_module_name[$index]}'"
+                if [[ $modconfig_files = /etc/modprobe.d/$package_name.conf ]]; then
+                    rm -f /etc/modprobe.d/$package_name.conf
+                    echo $"$moduleconfig: deleted /etc/modprobe.d/$package_name.conf file"
+                fi
+                elif grep -q "alias ${modules_conf_alias_type[$index]}[0-9]* ${dest_module_name[$index]}$" $moduleconfig; then
+                    sed "s/\(alias ${modules_conf_alias_type[$index]}[0-9]*\) ${dest_module_name[$index]}$/\1 $conf_replacement/g" \
+                        $moduleconfig > $temp_dir_name/moduleconfig.new
+                    mv -f $temp_dir_name/moduleconfig.new $moduleconfig
+                    echo $"$moduleconfig: alias for '${dest_module_name[$index]}' changed back to '$conf_replacement'"
+            fi
+        done
+
+        # Remove static conf entries
+        for ((index=0; index < ${#modules_conf_array[@]}; index++)); do
+            [[ ${modules_conf_array[$index]} ]] || continue
+            grep -v "${modules_conf_array[$index]}" "$moduleconfig" > $temp_dir_name/moduleconfig.new
+            echo $"$moduleconfig: removed '${modules_conf_array[$index]}'"
+            mv -f $temp_dir_name/moduleconfig.new $moduleconfig
+        done
     done
 
     # Delete the temp dir
@@ -887,20 +955,20 @@ etc_sysconfig_kernel_modify()
     # Make a temp directory to store files
     local temp_dir_name=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
     if [[ $1 = add ]]; then
-	. /etc/sysconfig/kernel
-	for m in "${dest_module_name[@]}"; do
-	    for l in "${INITRD_MODULES}"; do
-		[[ $m = $l ]] && continue 2
-	    done
-	    sed -e "s/INITRD_MODULES=\"\(.*\)\"/INITRD_MODULES=\"\1 $m\"/" /etc/sysconfig/kernel > $temp_dir_name/kernel.new
-	    mv $temp_dir_name/kernel.new /etc/sysconfig/kernel
-	done
+        . /etc/sysconfig/kernel
+        for m in "${dest_module_name[@]}"; do
+            for l in "${INITRD_MODULES}"; do
+                [[ $m = $l ]] && continue 2
+            done
+            sed -e "s/INITRD_MODULES=\"\(.*\)\"/INITRD_MODULES=\"\1 $m\"/" /etc/sysconfig/kernel > $temp_dir_name/kernel.new
+            mv $temp_dir_name/kernel.new /etc/sysconfig/kernel
+        done
     # Remove /etc/sysconfig/kernel entries
     elif [[ $1 = delete ]]; then
-	for m in "${dest_module_name[@]}"; do
-	    sed -e "s/\(INITRD_MODULES.*\)$m\b\(.*\)/\1\2/" /etc/sysconfig/kernel > $temp_dir_name/kernel.new
-	    mv $temp_dir_name/kernel.new /etc/sysconfig/kernel
-	done
+        for m in "${dest_module_name[@]}"; do
+            sed -e "s/\(INITRD_MODULES.*\)$m\b\(.*\)/\1\2/" /etc/sysconfig/kernel > $temp_dir_name/kernel.new
+            mv $temp_dir_name/kernel.new /etc/sysconfig/kernel
+        done
     fi
     # Delete the temp dir
     rm -rf $temp_dir_name
@@ -911,13 +979,13 @@ check_module_args() {
     die 1 $"Invalid number of arguments passed." \
         $"Usage: $1 <module>/<module-version> or" \
         $"       $1 -m <module>/<module-version> or" \
-	$"       $1 -m <module> -v <module-version>"
+        $"       $1 -m <module> -v <module-version>"
 }
 
 read_conf_or_die() {
     read_conf "$@" && return
     die 8 $"Bad conf file." $"File: $conf" \
-	$"does not represent a valid dkms.conf file."
+        $"does not represent a valid dkms.conf file."
 }
 
 run_build_script() {
@@ -926,8 +994,12 @@ run_build_script() {
     local script_type run
     [[ $2 ]] || return 0
     case "$1" in
-        pre_build|post_build) script_type='build';;
-        *) script_type='source'
+        pre_build|post_build)
+            script_type='build'
+            ;;
+        *)
+            script_type='source'
+            ;;
     esac
     run="$dkms_tree/$module/$module_version/$script_type/$2"
     if [[ -x ${run%% *} ]]; then
@@ -949,12 +1021,12 @@ run_build_script() {
 # being unpacked into /usr/src/$module-$module_version.
 add_module()
 {
-    # if $archive is set and $module and $module_version are not,
+    # If $archive is set and $module and $module_version are not,
     # try loading the tarball passed first.
     if [[ $archive_location && ! $module && ! $module_version ]]; then
-	load_tarball
+        load_tarball
     elif [[ $try_source_tree && ! $module && ! $module_version ]]; then
-	add_source_tree "$try_source_tree"
+        add_source_tree "$try_source_tree"
     fi
 
     # Check that we have all the arguments
@@ -962,24 +1034,24 @@ add_module()
 
     # Check that this module-version hasn't already been added
     if is_module_added "$module" "$module_version"; then
-	die 3 $"DKMS tree already contains: $module-$module_version" \
-	    $"You cannot add the same module/version combo more than once."
+        die 3 $"DKMS tree already contains: $module-$module_version" \
+            $"You cannot add the same module/version combo more than once."
     fi
 
     [[ $conf ]] || conf="$source_tree/$module-$module_version/dkms.conf"
 
     # Check that /usr/src/$module-$module_version exists
     if ! [[ -d $source_tree/$module-$module_version ]]; then
-	die 2 $"Could not find module source directory." \
-	    $"Directory: $source_tree/$module-$module_version does not exist."
+        die 2 $"Could not find module source directory." \
+            $"Directory: $source_tree/$module-$module_version does not exist."
     fi
 
     # Do stuff for --rpm_safe_upgrade
     if [[ $rpm_safe_upgrade ]]; then
-	local pppid=$(awk '/PPid:/ {print $2}' /proc/$PPID/status)
-	local lock_name=$(mktemp_or_die $tmp_location/dkms_rpm_safe_upgrade_lock.$pppid.XXXXXX)
-	echo "$module-$module_version" >> $lock_name
-	ps -o lstart --no-headers -p $pppid 2>/dev/null >> $lock_name
+        local pppid=$(awk '/PPid:/ {print $2}' /proc/$PPID/status)
+        local lock_name=$(mktemp_or_die $tmp_location/dkms_rpm_safe_upgrade_lock.$pppid.XXXXXX)
+        echo "$module-$module_version" >> $lock_name
+        ps -o lstart --no-headers -p $pppid 2>/dev/null >> $lock_name
     fi
 
     # Check the conf file for sanity
@@ -1011,26 +1083,29 @@ prepare_kernel()
 
     # Check that kernel-source exists
     _check_kernel_dir "$1" || {
-	case "$running_distribution" in
-	    Debian* | Ubuntu* )
-		die 1 $"Your kernel headers for kernel $1 cannot be found." \
-		    $"Please install the linux-headers-$1 package," \
-		    $"or use the --kernelsourcedir option to tell DKMS where it's located";;
-	    * ) die 1 echo $"Your kernel headers for kernel $1 cannot be found at" \
-		$"/lib/modules/$1/build or /lib/modules/$1/source."
-		$"You can use the --kernelsourcedir option to tell DKMS where it's located."
-	esac
+    case "$running_distribution" in
+        Debian* | Ubuntu* )
+            die 1 $"Your kernel headers for kernel $1 cannot be found." \
+                $"Please install the linux-headers-$1 package," \
+                $"or use the --kernelsourcedir option to tell DKMS where it's located"
+                ;;
+        * )
+            die 1 echo $"Your kernel headers for kernel $1 cannot be found at" \
+                $"/lib/modules/$1/build or /lib/modules/$1/source."
+                $"You can use the --kernelsourcedir option to tell DKMS where it's located."
+            ;;
+    esac
     }
 
     [[ $no_prepare_kernel ]] && return
 
     if [[ (! ( $(VER $1) < $(VER 2.6.5) ) || -d /etc/SuSEconfig) && \
-       -d "$kernel_source_dir" && \
-       -z "$ksourcedir_fromcli" ]]; then
-	echo $""
-	echo $"Kernel preparation unnecessary for this kernel.  Skipping..."
-	no_clean_kernel="no-clean-kernel"
-	return 1
+        -d "$kernel_source_dir" && \
+        -z "$ksourcedir_fromcli" ]]; then
+        echo $""
+        echo $"Kernel preparation unnecessary for this kernel.  Skipping..."
+        no_clean_kernel="no-clean-kernel"
+        return 1
     fi
 
     # Prepare kernel for module build
@@ -1039,101 +1114,103 @@ prepare_kernel()
     echo $"(This is not compiling a kernel, just preparing kernel symbols)"
     cd $kernel_source_dir
     [[ -r .config ]] && {
-	config_contents=$(cat .config)
-	echo $"Storing current .config to be restored when complete"
+        config_contents=$(cat .config)
+        echo $"Storing current .config to be restored when complete"
     }
 
     # Set kernel_config
     if [[ -e /etc/redhat-release || -e /etc/fedora-release ]]; then
-	# Note this also applies to VMware 3.x
-	if [[ -z $kernel_config && -d $kernel_source_dir/configs ]]; then
-	    local kernel_trunc=${1%%-*}
-	    # Try a .config specific to whatever kernel we are running
-	    if [[ $1 =~ $rh_kernels && \
-		-e $kernel_source_dir/configs/kernel-$kernel_trunc-$2-${BASH_REMATCH[1]}.config ]]; then
-		kernel_config="$kernel_source_dir/configs/kernel-$kernel_trunc-$2-${BASH_REMATCH[1]}.config"
-	    elif [[ -e $kernel_source_dir/configs/kernel-$kernel_trunc-$2.config ]]; then
-		# If that one does not exist, try a generic one.
-		kernel_config="$kernel_source_dir/configs/kernel-$kernel_trunc-$2.config"
-	    else
-		# If that does not exist, fall back to no config file
-		kernel_config=""
-	    fi
-	fi
-    elif [[ (-e /etc/SuSE-release || -d /etc/SuSEconfig) && \
-	-z $kernel_config && -d $kernel_source_dir/arch ]]; then
-	    local kernel_trunc=${1%%-*}
-	    case $2 in
-		i586|i686) config_arch="i386";;
-		*) config_arch=$2;;
-	    esac
-	    for config_type in default smp bigsmp; do
-		[[ $1 =~ $config_type ]] && kernel_config="$kernel_source_dir/arch/$config_arch/defconfig.$config_type"
-		[[ -e $kernel_config ]] || kernel_config=""
-	    done
-	    [[ $kernel_config ]] || kernel_config="$kernel_source_dir/arch/$config_arch/defconfig.default"
-	    [[ -e $kernel_config ]] || kernel_config=""
+    # Note this also applies to VMware 3.x
+    if [[ -z $kernel_config && -d $kernel_source_dir/configs ]]; then
+        local kernel_trunc=${1%%-*}
+        # Try a .config specific to whatever kernel we are running
+        if [[ $1 =~ $rh_kernels && -e $kernel_source_dir/configs/kernel-$kernel_trunc-$2-${BASH_REMATCH[1]}.config ]]; then
+            kernel_config="$kernel_source_dir/configs/kernel-$kernel_trunc-$2-${BASH_REMATCH[1]}.config"
+        elif [[ -e $kernel_source_dir/configs/kernel-$kernel_trunc-$2.config ]]; then
+            # If that one does not exist, try a generic one.
+            kernel_config="$kernel_source_dir/configs/kernel-$kernel_trunc-$2.config"
+        else
+            # If that does not exist, fall back to no config file
+            kernel_config=""
+        fi
+    fi
+    elif [[ (-e /etc/SuSE-release || -d /etc/SuSEconfig) && -z $kernel_config && -d $kernel_source_dir/arch ]]; then
+        local kernel_trunc=${1%%-*}
+        case $2 in
+            i586|i686)
+                config_arch="i386"
+                ;;
+            *)
+                config_arch=$2
+                ;;
+        esac
+        for config_type in default smp bigsmp; do
+            [[ $1 =~ $config_type ]] && kernel_config="$kernel_source_dir/arch/$config_arch/defconfig.$config_type"
+            [[ -e $kernel_config ]] || kernel_config=""
+        done
+        [[ $kernel_config ]] || kernel_config="$kernel_source_dir/arch/$config_arch/defconfig.default"
+        [[ -e $kernel_config ]] || kernel_config=""
     fi
 
     # Do preparation
     if [ -e /boot/vmlinuz.version.h ]; then
-	echo $"Running UnitedLinux preparation routine"
-	local kernel_config="/boot/vmlinuz.config"
-	invoke_command "make mrproper" "make mrproper" background
-	[[ $config_contents ]] && echo "$config_contents" > .config
-	invoke_command "cp /boot/vmlinuz.version.h include/linux/version.h" "using /boot/vmlinux.version.h"
-	invoke_command "cp -f $kernel_config .config" "using $kernel_config"
-	invoke_command "make KERNELRELEASE=$1 cloneconfig" "make cloneconfig" background
-	invoke_command "make CONFIG_MODVERSIONS=1 KERNELRELEASE=$1 dep" "make CONFIG_MODVERSIONS=1 dep" background
+        echo $"Running UnitedLinux preparation routine"
+        local kernel_config="/boot/vmlinuz.config"
+        invoke_command "make mrproper" "make mrproper" background
+        [[ $config_contents ]] && echo "$config_contents" > .config
+        invoke_command "cp /boot/vmlinuz.version.h include/linux/version.h" "using /boot/vmlinux.version.h"
+        invoke_command "cp -f $kernel_config .config" "using $kernel_config"
+        invoke_command "make KERNELRELEASE=$1 cloneconfig" "make cloneconfig" background
+        invoke_command "make -j$parallel_jobs CONFIG_MODVERSIONS=1 KERNELRELEASE=$1 dep" "make CONFIG_MODVERSIONS=1 dep" background
     elif grep -q rhconfig.h $kernel_source_dir/include/linux/{modversions,version}.h 2>/dev/null; then
-	echo $"Running Red Hat style preparation routine"
-	invoke_command "make clean" "make clean" background
-	[[ $config_contents ]] && echo "$config_contents" > .config
-
-	if [[ $kernel_config ]]; then
-	    echo $"using $kernel_config"
-	    cp -f "$kernel_config" .config
-	elif [[ -e .config ]]; then
-	    warn $"Using $kernel_source_dir/.config" \
-		$"(I hope this is the correct config for this kernel)"
-	else
-	    warn $"Cannot find a .config file to prepare your kernel with." \
-		$"Try using the --config option to specify where one can be found." \
-		$"Your build will likely fail because of this."
-	fi
+        echo $"Running Red Hat style preparation routine"
+        invoke_command "make clean" "make clean" background
+        [[ $config_contents ]] && echo "$config_contents" > .config
+
+        if [[ $kernel_config ]]; then
+            echo $"using $kernel_config"
+            cp -f "$kernel_config" .config
+        elif [[ -e .config ]]; then
+            warn $"Using $kernel_source_dir/.config" \
+                $"(I hope this is the correct config for this kernel)"
+        else
+            warn $"Cannot find a .config file to prepare your kernel with." \
+                $"Try using the --config option to specify where one can be found." \
+                $"Your build will likely fail because of this."
+        fi
 
-	# Hack to workaround broken tmp_include_depends for Red Hat
-	if grep -q "/usr/src/build" $kernel_source_dir/tmp_include_depends 2>/dev/null; then
-	    sed 's/\/usr\/src\/build\/.*\/install//g' $kernel_source_dir/tmp_include_depends > $kernel_source_dir/tmp_include_depends.new
-	    mv -f $kernel_source_dir/tmp_include_depends.new $kernel_source_dir/tmp_include_depends
-	fi
+        # Hack to workaround broken tmp_include_depends for Red Hat
+        if grep -q "/usr/src/build" $kernel_source_dir/tmp_include_depends 2>/dev/null; then
+            sed 's/\/usr\/src\/build\/.*\/install//g' $kernel_source_dir/tmp_include_depends > $kernel_source_dir/tmp_include_depends.new
+            mv -f $kernel_source_dir/tmp_include_depends.new $kernel_source_dir/tmp_include_depends
+        fi
 
-	invoke_command "make KERNELRELEASE=$1 oldconfig" "make oldconfig" background
-	kerneldoth_contents=$(cat /boot/kernel.h 2>/dev/null)
-	invoke_command "/usr/lib/dkms/mkkerneldoth --kernelver $1 --targetarch $2 --output /boot/kernel.h" "running mkkerneldoth" background
+        invoke_command "make KERNELRELEASE=$1 oldconfig" "make oldconfig" background
+        kerneldoth_contents=$(cat /boot/kernel.h 2>/dev/null)
+        invoke_command "/usr/lib/dkms/mkkerneldoth --kernelver $1 --targetarch $2 --output /boot/kernel.h" "running mkkerneldoth" background
     else
-	echo $"Running Generic preparation routine"
-	invoke_command "make mrproper" "make mrproper" background
-	[[ $config_contents ]] && echo "$config_contents" > .config
-
-	if [[ $kernel_config ]]; then
-	    echo $"using $kernel_config"
-	    cp -f "$kernel_config" .config
-	elif [[ -e .config ]]; then
-	    warn $"using $kernel_source_dir/.config" \
-		$"(I hope this is the correct config for this kernel)"
-	else
-	    warn $"Warning! Cannot find a .config file to prepare your kernel with." \
-		$"Try using the --config option to specify where one can be found." \
-		$"Your build will likely fail because of this."
-	fi
+        echo $"Running Generic preparation routine"
+        invoke_command "make mrproper" "make mrproper" background
+        [[ $config_contents ]] && echo "$config_contents" > .config
+
+        if [[ $kernel_config ]]; then
+            echo $"using $kernel_config"
+            cp -f "$kernel_config" .config
+        elif [[ -e .config ]]; then
+            warn $"using $kernel_source_dir/.config" \
+                $"(I hope this is the correct config for this kernel)"
+        else
+            warn $"Warning! Cannot find a .config file to prepare your kernel with." \
+                $"Try using the --config option to specify where one can be found." \
+                $"Your build will likely fail because of this."
+        fi
 
-	invoke_command "make KERNELRELEASE=$1 oldconfig" "make oldconfig" background
-	if [[ $(VER $1) < $(VER 2.5) ]]; then
-	    invoke_command "make KERNELRELEASE=$1 dep" "make dep" background
-	else
-	    invoke_command "make KERNELRELEASE=$1 prepare-all scripts" "make prepare-all" background
-	fi
+        invoke_command "make KERNELRELEASE=$1 oldconfig" "make oldconfig" background
+        if [[ $(VER $1) < $(VER 2.5) ]]; then
+            invoke_command "make -j$parallel_jobs KERNELRELEASE=$1 dep" "make dep" background
+        else
+            invoke_command "make -j$parallel_jobs KERNELRELEASE=$1 prepare-all scripts" "make prepare-all" background
+        fi
     fi
     cd - >/dev/null
 }
@@ -1152,9 +1229,9 @@ prepare_build()
 
     # Check that the module has not already been built for this kernel
     [[ -d $base_dir ]] && die 3 \
-	$"This module/version has already been built on: $kernelver" \
-	$"Directory: $base_dir" \
-	$"already exists.  Use the dkms remove function before trying to build again."
+        $"This module/version has already been built on: $kernelver" \
+        $"Directory: $base_dir" \
+        $"already exists.  Use the dkms remove function before trying to build again."
 
     # Read the conf file
     set_module_suffix "$kernelver"
@@ -1162,31 +1239,31 @@ prepare_build()
 
     # Error out if build_exclude is set
     [[ $build_exclude ]] && die 9 \
-	$" The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which" \
-	$"does not match this kernel/arch.  This indicates that it should not be built."
+        $" The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which" \
+        $"does not match this kernel/arch.  This indicates that it should not be built."
 
     # Error out if source_tree is basically empty (binary-only dkms tarball w/ --force check)
     (($(ls $dkms_tree/$module/$module_version/source | wc -l | awk {'print $1'}) < 2)) && die 8 \
-	$"The directory $dkms_tree/$module/$module_version/source/" \
-	$"does not appear to have module source located within it.  Build halted."
+        $"The directory $dkms_tree/$module/$module_version/source/" \
+        $"does not appear to have module source located within it.  Build halted."
 
     prepare_kernel "$kernelver" "$arch"
 
     # Set up temporary build directory for build
     rm -rf "$dkms_tree/$module/$module_version/build"
-    cp -rf "$dkms_tree/$module/$module_version/source/" "$dkms_tree/$module/$module_version/build"
+    cp -a "$dkms_tree/$module/$module_version/source/" "$dkms_tree/$module/$module_version/build"
 
     cd "$dkms_tree/$module/$module_version/build"
 
     # Apply any patches
     for p in "${patch_array[@]}"; do
-	[[ ! -e $dkms_tree/$module/$module_version/build/patches/$p ]] && \
-	    report_build_problem 5 \
-	    $" Patch $p as specified in dkms.conf cannot be" \
-	    $"found in $dkms_tree/$module/$module_version/build/patches/."
-	invoke_command "patch -p1 < ./patches/$p" "applying patch $p" || \
-	    report_build_problem 6 $"Application of patch $p failed." \
-	    $"Check $dkms_tree/$module/$module_version/build/ for more information."
+        [[ ! -e $dkms_tree/$module/$module_version/build/patches/$p ]] && \
+            report_build_problem 5 \
+            $" Patch $p as specified in dkms.conf cannot be" \
+            $"found in $dkms_tree/$module/$module_version/build/patches/."
+        invoke_command "patch -p1 < ./patches/$p" "applying patch $p" || \
+            report_build_problem 6 $"Application of patch $p failed." \
+            $"Check $dkms_tree/$module/$module_version/build/ for more information."
     done
 
     # Run the pre_build script
@@ -1204,19 +1281,19 @@ do_build()
     invoke_command "$clean" "cleaning build area" background
     echo $"DKMS make.log for $module-$module_version for kernel $kernelver ($arch)" >> "$dkms_tree/$module/$module_version/build/make.log"
     date >> "$dkms_tree/$module/$module_version/build/make.log"
-    local the_make_command="${make_command/#make/make KERNELRELEASE=$kernelver}"
+    local the_make_command="${make_command/#make/make -j$parallel_jobs KERNELRELEASE=$kernelver}"
 
     invoke_command "{ $the_make_command; } >> $dkms_tree/$module/$module_version/build/make.log 2>&1" "$the_make_command" background || \
-	report_build_problem 10 $"Bad return status for module build on kernel: $kernelver ($arch)" \
-	$"Consult $dkms_tree/$module/$module_version/build/make.log for more information."
+        report_build_problem 10 $"Bad return status for module build on kernel: $kernelver ($arch)" \
+        $"Consult $dkms_tree/$module/$module_version/build/make.log for more information."
 
     # Make sure all the modules built successfully
     for ((count=0; count < ${#built_module_name[@]}; count++)); do
-	[[ -e ${built_module_location[$count]}${built_module_name[$count]}$module_suffix ]] && continue
-	report_build_problem 7 \
-	    $" Build of ${built_module_name[$count]}$module_suffix failed for: $kernelver ($arch)" \
-	    $"Consult the make.log in the build directory" \
-	    $"$dkms_tree/$module/$module_version/build/ for more information."
+        [[ -e ${built_module_location[$count]}${built_module_name[$count]}$module_suffix ]] && continue
+        report_build_problem 7 \
+            $" Build of ${built_module_name[$count]}$module_suffix failed for: $kernelver ($arch)" \
+            $"Consult the make.log in the build directory" \
+            $"$dkms_tree/$module/$module_version/build/ for more information."
     done
     cd - >/dev/null
 
@@ -1228,8 +1305,9 @@ do_build()
     # Save a copy of the new module
     mkdir "$base_dir/module" >/dev/null
     for ((count=0; count < ${#built_module_name[@]}; count++)); do
-	[[ ${strip[$count]} != no ]] && strip -g "$dkms_tree/$module/$module_version/build/${built_module_location[$count]}${built_module_name[$count]}$module_suffix"
-	cp -f "$dkms_tree/$module/$module_version/build/${built_module_location[$count]}${built_module_name[$count]}$module_suffix" "$base_dir/module/${dest_module_name[$count]}$module_suffix" >/dev/null
+    [[ ${strip[$count]} != no ]] && strip -g "$dkms_tree/$module/$module_version/build/${built_module_location[$count]}${built_module_name[$count]}$module_suffix"
+    cp -f "$dkms_tree/$module/$module_version/build/${built_module_location[$count]}${built_module_name[$count]}$module_suffix" \
+        "$base_dir/module/${dest_module_name[$count]}$module_suffix" >/dev/null
     done
 
     # Run the post_build script
@@ -1248,17 +1326,17 @@ clean_build()
        -d $kernel_source_dir && \
        ! -h $kernel_source_dir && \
        ! $ksourcedir_fromcli ]]; then
-	echo $"Kernel cleanup unnecessary for this kernel.  Skipping..."
+        echo $"Kernel cleanup unnecessary for this kernel.  Skipping..."
     elif [[ ! $no_clean_kernel ]]; then
-	cd "$kernel_source_dir"
-	[[ $kerneldoth_contents ]] || invoke_command "make mrproper" "cleaning kernel tree (make mrproper)" background
-	[[ $config_contents ]] || echo "$config_contents" > .config
-	[[ $kerneldoth_contents ]] && echo "$kerneldoth_contents" > /boot/kernel.h
-	cd - >/dev/null
+        cd "$kernel_source_dir"
+        [[ $kerneldoth_contents ]] || invoke_command "make mrproper" "cleaning kernel tree (make mrproper)" background
+        [[ $config_contents ]] || echo "$config_contents" > .config
+        [[ $kerneldoth_contents ]] && echo "$kerneldoth_contents" > /boot/kernel.h
+        cd - >/dev/null
     fi
 
     # Clean the build directory
-    rm -rf "$dkms_tree/$module/$module_version/build/*"
+    rm -rf "$dkms_tree/$module/$module_version/build"
 }
 
 build_module()
@@ -1270,6 +1348,28 @@ build_module()
     echo $"DKMS: build completed."
 }
 
+# Force the installation of a module if this is listed
+# in the files in $forced_modules_dir, if any
+force_installation()
+{
+    forced_modules_dir="/usr/share/dkms/modules_to_force_install"
+    to_force=""
+    if [ -d $forced_modules_dir ]; then
+        for elem in $forced_modules_dir/*; do
+            if [ -e $elem ]; then
+                to_force="$to_force $(cat $elem)"
+            fi
+        done
+
+        for elem in $to_force; do
+            if [ "${1}" = "${elem}" ]; then
+                return 0
+            fi
+        done
+    fi
+    return 1
+}
+
 # Install a previously built module
 # There are huge swaths of code here that special-case for various distros.
 # They should be split into their own functions.
@@ -1280,20 +1380,27 @@ install_module()
     local base_dir="$dkms_tree/$module/$module_version/$kernelver/$arch"
     check_module_args install
 
+    # Save the status of $force
+    tmp_force="$force"
+
+    # If the module is set to be force-installed
+    force_installation $module && echo "Forcing installation of $module" \
+        && force="true"
+
     # Make sure that kernel exists to install into
     [[ -e $install_tree/$kernelver ]] || die 6 \
-	$"The directory $install_tree/$kernelver doesn't exist." \
-	$"You cannot install a module onto a non-existant kernel."
+        $"The directory $install_tree/$kernelver doesn't exist." \
+        $"You cannot install a module onto a non-existant kernel."
 
     # Read the conf file
     read_conf_or_die "$kernelver" "$arch"
 
     # Check that its not already installed (kernel symlink)
     is_module_installed "$module" "$module_version" "$kernelver" "$arch" && die 5 \
-	$"This module/version combo is already installed" \
-	$"for kernel: $kernelver ($arch)"
+        $"This module/version combo is already installed" \
+        $"for kernel: $kernelver ($arch)"
 
-    # if upgrading using rpm_safe_upgrade, go ahead and force the install
+    # If upgrading using rpm_safe_upgrade, go ahead and force the install
     # else we can wind up with the first half of an upgrade failing to install anything,
     # while the second half of the upgrade, the removal, then succeeds, leaving us with
     # nothing installed.
@@ -1303,84 +1410,86 @@ install_module()
     local lib_tree="$install_tree/$kernelver"
     local count
     for ((count=0; count < ${#built_module_name[@]}; count++)); do
-	echo $""
-	echo $"${dest_module_name[$count]}$module_suffix:"
-	# Check this version against what is already in the kernel
-	check_version_sanity "$kernelver" "$arch" \
-	    "$obsolete_by" "${dest_module_name[$count]}" || continue
-
-	if ((count == 0)) && ! run_build_script pre_install "$pre_install" && \
-	    ! [[ $force ]]; then
-	    die 101 $"pre_install failed, aborting install." \
-		$"You may override by specifying --force."
-	fi
-	local module_count=$(find $lib_tree -name ${dest_module_name[$count]}$module_suffix -type f | wc -l | awk {'print $1'})
-	echo $" - Original module"
-	if [[ -L $dkms_tree/$module/kernel-$kernelver-$arch && \
-	    -e $dkms_tree/$module/original_module/$kernelver/$arch/${dest_module_name[$count]}$module_suffix ]]; then
-	    echo $"   - An original module was already stored during a previous install"
-	elif ! [[ -L $dkms_tree/$module/kernel-$kernelver-$arch ]]; then
-	    local archive_pref1="$lib_tree/extra/${dest_module_name[$count]}$module_suffix"
-	    local archive_pref2="$lib_tree/updates/${dest_module_name[$count]}$module_suffix"
-	    local archive_pref3="$lib_tree${dest_module_location[$count]}/${dest_module_name[$count]}$module_suffix"
-	    local archive_pref4=""
-	    ((module_count == 1)) && archive_pref4=$(find $lib_tree -name ${dest_module_name[$count]}$module_suffix -type f)
-	    local original_module=""
-	    local found_orginal=""
-	    for original_module in $archive_pref1 $archive_pref2 $archive_pref3 $archive_pref4; do
-		[[ -f $original_module ]] || continue
-		case "$running_distribution" in
-		    Debian* | Ubuntu* ) ;;
-		    *)
-			echo $"   - Found $original_module"
-			echo $"   - Storing in $dkms_tree/$module/original_module/$kernelver/$arch/"
-			echo $"   - Archiving for uninstallation purposes"
-			mkdir -p "$dkms_tree/$module/original_module/$kernelver/$arch"
-			mv -f "$original_module" "$dkms_tree/$module/original_module/$kernelver/$arch/"
-			;;
-		esac
-		found_original="yes"
-		break
-	    done
-	    if [[ ! $found_original ]] && ((module_count > 1)); then
-		echo $"   - Multiple original modules exist but DKMS does not know which to pick"
-		echo $"   - Due to the confusion, none will be considered during a later uninstall"
-	    elif [[ ! $found_original ]]; then
-		echo $"   - No original module exists within this kernel"
-	    fi
-	else
-	    echo $"   - This kernel never originally had a module by this name"
-	fi
-
-	if ((module_count > 1)); then
-	    echo $" - Multiple same named modules!"
-	    echo $"   - $module_count named ${dest_module_name[$count]}$module_suffix in $lib_tree/"
-	    case "$running_distribution" in
-		Debian* | Ubuntu* ) ;;
-		*)
-		    echo $"   - All instances of this module will now be stored for reference purposes ONLY"
-		    echo $"   - Storing in $dkms_tree/$module/original_module/$kernelver/$arch/collisions/"
-		    ;;
-	    esac
-	    for module_dup in $(find $lib_tree -name ${dest_module_name[$count]}$module_suffix -type f); do
-		dup_tree="${module_dup#$lib_tree}";
-		dup_tree="${dup_tree/${dest_module_name[$count]}$module_suffix}"
-		case "$running_distribution" in
-		Debian* | Ubuntu* ) ;;
-		*)
-		   echo $"     - Stored $module_dup"
-		   mkdir -p "$dkms_tree/$module/original_module/$kernelver/$arch/collisions/$dup_tree"
-		   mv -f $module_dup "$dkms_tree/$module/original_module/$kernelver/$arch/collisions/$dup_tree"
-		   ;;
-		esac
-	    done
-	fi
-
-	# Copy module to its location
-	echo $" - Installation"
-	echo $"   - Installing to $install_tree/$kernelver${dest_module_location[$count]}/"
-	mkdir -p $install_tree/$kernelver${dest_module_location[$count]}
-	cp -f "$base_dir/module/${dest_module_name[$count]}$module_suffix" "$install_tree/$kernelver${dest_module_location[$count]}/${dest_module_name[$count]}$module_suffix"
+    echo $""
+    echo $"${dest_module_name[$count]}$module_suffix:"
+    # Check this version against what is already in the kernel
+    check_version_sanity "$kernelver" "$arch" "$obsolete_by" "${dest_module_name[$count]}" || continue
+
+    if ((count == 0)) && ! run_build_script pre_install "$pre_install" && ! [[ $force ]]; then
+        die 101 $"pre_install failed, aborting install." \
+            $"You may override by specifying --force."
+    fi
+    local module_count=$(find $lib_tree -name ${dest_module_name[$count]}$module_suffix -type f | wc -l | awk {'print $1'})
+    echo $" - Original module"
+    if [[ -L $dkms_tree/$module/kernel-$kernelver-$arch && \
+        -e $dkms_tree/$module/original_module/$kernelver/$arch/${dest_module_name[$count]}$module_suffix ]]; then
+        echo $"   - An original module was already stored during a previous install"
+    elif ! [[ -L $dkms_tree/$module/kernel-$kernelver-$arch ]]; then
+        local archive_pref1="$lib_tree/extra/${dest_module_name[$count]}$module_suffix"
+        local archive_pref2="$lib_tree/updates/${dest_module_name[$count]}$module_suffix"
+        local archive_pref3="$lib_tree${dest_module_location[$count]}/${dest_module_name[$count]}$module_suffix"
+        local archive_pref4=""
+        ((module_count == 1)) && archive_pref4=$(find $lib_tree -name ${dest_module_name[$count]}$module_suffix -type f)
+        local original_module=""
+        local found_orginal=""
+        for original_module in $archive_pref1 $archive_pref2 $archive_pref3 $archive_pref4; do
+            [[ -f $original_module ]] || continue
+            case "$running_distribution" in
+                Debian* | Ubuntu* )
+                    ;;
+                *)
+                echo $"   - Found $original_module"
+                echo $"   - Storing in $dkms_tree/$module/original_module/$kernelver/$arch/"
+                echo $"   - Archiving for uninstallation purposes"
+                mkdir -p "$dkms_tree/$module/original_module/$kernelver/$arch"
+                mv -f "$original_module" "$dkms_tree/$module/original_module/$kernelver/$arch/"
+                ;;
+            esac
+            found_original="yes"
+            break
+        done
+        if [[ ! $found_original ]] && ((module_count > 1)); then
+            echo $"   - Multiple original modules exist but DKMS does not know which to pick"
+            echo $"   - Due to the confusion, none will be considered during a later uninstall"
+        elif [[ ! $found_original ]]; then
+            echo $"   - No original module exists within this kernel"
+        fi
+    else
+        echo $"   - This kernel never originally had a module by this name"
+    fi
+
+    if ((module_count > 1)); then
+        echo $" - Multiple same named modules!"
+        echo $"   - $module_count named ${dest_module_name[$count]}$module_suffix in $lib_tree/"
+        case "$running_distribution" in
+            Debian* | Ubuntu* )
+                ;;
+            *)
+                echo $"   - All instances of this module will now be stored for reference purposes ONLY"
+                echo $"   - Storing in $dkms_tree/$module/original_module/$kernelver/$arch/collisions/"
+                ;;
+        esac
+        for module_dup in $(find $lib_tree -name ${dest_module_name[$count]}$module_suffix -type f); do
+            dup_tree="${module_dup#$lib_tree}";
+            dup_tree="${dup_tree/${dest_module_name[$count]}$module_suffix}"
+            case "$running_distribution" in
+                Debian* | Ubuntu* )
+                    ;;
+                *)
+                   echo $"     - Stored $module_dup"
+                   mkdir -p "$dkms_tree/$module/original_module/$kernelver/$arch/collisions/$dup_tree"
+                   mv -f $module_dup "$dkms_tree/$module/original_module/$kernelver/$arch/collisions/$dup_tree"
+                   ;;
+            esac
+        done
+    fi
+
+    # Copy module to its location
+    echo $" - Installation"
+    echo $"   - Installing to $install_tree/$kernelver${dest_module_location[$count]}/"
+    mkdir -p $install_tree/$kernelver${dest_module_location[$count]}
+    [[ $symlink_modules ]] && symlink="-s"
+    cp -f $symlink  "$base_dir/module/${dest_module_name[$count]}$module_suffix" "$install_tree/$kernelver${dest_module_location[$count]}/${dest_module_name[$count]}$module_suffix"
 
     done
 
@@ -1388,11 +1497,13 @@ install_module()
     rm -f "$dkms_tree/$module/kernel-$kernelver-$arch" 2>/dev/null
     ln -s "$module_version/$kernelver/$arch" "$dkms_tree/$module/kernel-$kernelver-$arch" 2>/dev/null
 
-    # add to kabi-tracking
-    if [[ ${weak_modules} ]]; then
-	echo $"Adding any weak-modules"
-	list_each_installed_module "$module" "$kernelver" "$arch" | ${weak_modules} --add-modules
-    fi
+    # Add to kabi-tracking
+	if [ -z "$NO_WEAK_MODULES" ]; then
+		if [[ ${weak_modules} ]]; then
+			echo $"Adding any weak-modules"
+			list_each_installed_module "$module" "$kernelver" "$arch" | ${weak_modules} ${weak_modules_no_initrd} --add-modules
+		fi
+	fi
 
     # Run the post_install script
     run_build_script post_install "$post_install"
@@ -1403,20 +1514,23 @@ install_module()
     etc_sysconfig_kernel_modify "add"
 
     invoke_command "do_depmod $kernelver" "depmod" background || {
-	do_uninstall "$kernelver" "$arch"
-	die 6 $"Problems with depmod detected.  Automatically uninstalling this module." \
-	    $"DKMS: Install Failed (depmod problems).  Module rolled back to built state."
-	    exit 6
+        do_uninstall "$kernelver" "$arch"
+        die 6 $"Problems with depmod detected.  Automatically uninstalling this module." \
+            $"DKMS: Install Failed (depmod problems).  Module rolled back to built state."
+            exit 6
     }
 
     # Do remake_initrd things (save old initrd)
     [[ $remake_initrd ]] && ! make_initrd "$kernelver" "$arch" && {
-	do_uninstall "$kernelver" "$arch"
-	die 7 $"Problems with mkinitrd detected.  Automatically uninstalling this module." \
-	    $"DKMS: Install Failed (mkinitrd problems).  Module rolled back to built state."
+        do_uninstall "$kernelver" "$arch"
+        die 7 $"Problems with mkinitrd detected.  Automatically uninstalling this module." \
+            $"DKMS: Install Failed (mkinitrd problems).  Module rolled back to built state."
     }
     echo $""
     echo $"DKMS: install completed."
+
+    # Restore the status of $force
+    force="$tmp_force"
 }
 
 # List each kernel object that has been installed for a particular module.
@@ -1428,8 +1542,8 @@ list_each_installed_module()
     local count
     local real_dest_module_location
     for ((count=0; count < ${#built_module_name[@]}; count++)); do
-	real_dest_module_location="$(find_actual_dest_module_location $1 $count $2 $3)"
-	echo "$install_tree/$2${real_dest_module_location}/${dest_module_name[$count]}$module_suffix"
+        real_dest_module_location="$(find_actual_dest_module_location $1 $count $2 $3)"
+        echo "$install_tree/$2${real_dest_module_location}/${dest_module_name[$count]}$module_suffix"
     done
 }
 
@@ -1445,7 +1559,7 @@ is_module_built() {
     [[ -d $d/module ]] || return 1
     read_conf_or_die "$3" "$4" "$dkms_tree/$1/$2/source/dkms.conf"
     for m in "${dest_module_name[@]}"; do
-	[[ -f $d/module/$m.ko || -f $d/module/$m.o ]] || return 1
+        [[ -f $d/module/$m.ko || -f $d/module/$m.o ]] || return 1
     done
 }
 
@@ -1462,24 +1576,24 @@ is_module_installed() { is_module_built "$@" && _is_module_installed "$@"; }
 
 maybe_add_module() (
     is_module_added "$1" "$2" && {
-	echo $"Module $1/$2 already added."
-	return 0
+        echo $"Module $1/$2 already added."
+        return 0
     }
     module="$1" module_version="$2" add_module
 )
 
 maybe_build_module() (
     is_module_built "$1" "$2" "$3" "$4" && {
-	echo $"Module $1/$2 already built for kernel $3/4"
-	return 0
+        echo $"Module $1/$2 already built for kernel $3/4"
+        return 0
     }
     module="$1" module_version="$2" kernelver="$3" arch="$4" build_module
 )
 
 maybe_install_module() (
     is_module_installed "$1" "$2" "$3" "$4" && {
-	echo $"Module $1/$2 already installed on kernel $3/$4"
-	return 0
+        echo $"Module $1/$2 already installed on kernel $3/$4"
+        return 0
     }
     module="$1" module_version="$2" kernelver="$3" arch="$4" install_module
 )
@@ -1487,21 +1601,21 @@ maybe_install_module() (
 build_modules() {
     local i=0
     for ((i=0; i < ${#kernelver[@]}; i++)); do
-	maybe_build_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}"
+        maybe_build_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}"
     done
 }
 
 install_modules() {
     local i=0
     for ((i=0; i < ${#kernelver[@]}; i++)); do
-	maybe_install_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}"
+        maybe_install_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}"
     done
 }
 
 check_module_exists() {
     is_module_added "$module" "$module_version" && return
     die 2 $"DKMS tree does not contain: $module-$module_version" \
-	$"Build cannot continue without the proper tree."
+        $"Build cannot continue without the proper tree."
 }
 
 possible_dest_module_locations()
@@ -1533,11 +1647,11 @@ find_actual_dest_module_location()
     dkms_owned="${dkms_tree}/${module}/kernel-${kernelver}-${arch}/module/${dest_module_name[$count]}${module_suffix}"
 
     for l in $locations; do
-	installed="${install_tree}/${kernelver}${l}/${dest_module_name[${count}]}${module_suffix}"
-	if [[ -f ${installed} ]] && diff "${dkms_owned}" "${installed}" > /dev/null 2>&1; then
-	    echo "${l}"
-	    return 0
-	fi
+        installed="${install_tree}/${kernelver}${l}/${dest_module_name[${count}]}${module_suffix}"
+        if [[ -f ${installed} ]] && diff "${dkms_owned}" "${installed}" > /dev/null 2>&1; then
+            echo "${l}"
+            return 0
+        fi
     done
 
 }
@@ -1562,51 +1676,57 @@ do_uninstall()
     local kernel_symlink=$(readlink -f "$dkms_tree/$module/kernel-$1-$2")
     local real_dest_module_location
     if [[ $kernel_symlink = $dkms_tree/$module/$module_version/$1/$2 ]]; then
-	was_active="true"
-	echo $""
-	echo $"Status: Before uninstall, this module version was ACTIVE on this kernel."
-	# remove kabi-tracking if last instance removed
-	if [[ ${weak_modules} ]] && \
-	    (module_status_built $module $module_version |grep -q "installed"); then
-	    echo $"Removing any linked weak-modules"
-	    list_each_installed_module "$module" "$1" "$2" | ${weak_modules} --remove-modules
-	fi
-
-	for ((count=0; count < ${#built_module_name[@]}; count++)); do
-	    real_dest_module_location="$(find_actual_dest_module_location $module $count $1 $2)"
-	    echo $""
-	    echo $"${dest_module_name[$count]}$module_suffix:"
-	    echo $" - Uninstallation"
-	    echo $"   - Deleting from: $install_tree/$1${real_dest_module_location}/"
-	    rm -f "$install_tree/$1${real_dest_module_location}/${dest_module_name[$count]}$module_suffix"
-	    echo $" - Original module"
-	    if [[ -e $dkms_tree/$module/original_module/$1/$2/${dest_module_name[$count]}$module_suffix ]]; then
-		case "$running_distribution" in
-		Debian* | Ubuntu* ) ;;
-		*)
-		    echo $"   - Archived original module found in the DKMS tree"
-		    echo $"   - Moving it to: $install_tree/$1${DEST_MODULE_LOCATION[$count]}/"
-		    mkdir -p "$install_tree/$1${DEST_MODULE_LOCATION[$count]}/"
-		    mv -f "$dkms_tree/$module/original_module/$1/$2/${dest_module_name[$count]}$module_suffix" \
-			"$install_tree/$1${DEST_MODULE_LOCATION[$count]}/" 2>/dev/null
-		    ;;
-		esac
-	    else
-		echo $"   - No original module was found for this module on this kernel."
-		echo $"   - Use the dkms install command to reinstall any previous module version."
-
-		# Remove modules_conf entries from /etc/modules.conf if remake_initrd is set or if this is last instance removed
-		if [[ $remake_initrd ]] || \
-		    (do_status $module $module_version | grep -q "installed"); then
-		    echo $""
-		    moduleconfig_remove "$1"
+        was_active="true"
+        echo $""
+        echo $"Status: Before uninstall, this module version was ACTIVE on this kernel."
+        # remove kabi-tracking if last instance removed
+		if [ -z "$NO_WEAK_MODULES" ]; then
+			if [[ ${weak_modules} ]] && (module_status_built $module $module_version |grep -q "installed"); then
+				echo $"Removing any linked weak-modules"
+				list_each_installed_module "$module" "$1" "$2" | ${weak_modules} ${weak_modules_no_initrd} --remove-modules
+			fi
 		fi
-	    fi
-	done
-	rm -f "$dkms_tree/$module/kernel-$1-$2"
+
+    for ((count=0; count < ${#built_module_name[@]}; count++)); do
+        real_dest_module_location="$(find_actual_dest_module_location $module $count $1 $2)"
+        echo $""
+        echo $"${dest_module_name[$count]}$module_suffix:"
+        echo $" - Uninstallation"
+        echo $"   - Deleting from: $install_tree/$1${real_dest_module_location}/"
+        rm -f "$install_tree/$1${real_dest_module_location}/${dest_module_name[$count]}$module_suffix"
+        dir_to_remove="${real_dest_module_location#/}"
+        while [ "${dir_to_remove}" != "${dir_to_remove#/}" ]; do
+            dir_to_remove="${dir_to_remove#/}"
+        done
+        (cd "$install_tree/$1" && rmdir --parents --ignore-fail-on-non-empty "${dir_to_remove}" || true)
+        echo $" - Original module"
+        if [[ -e $dkms_tree/$module/original_module/$1/$2/${dest_module_name[$count]}$module_suffix ]]; then
+            case "$running_distribution" in
+                Debian* | Ubuntu* )
+                    ;;
+                *)
+                    echo $"   - Archived original module found in the DKMS tree"
+                    echo $"   - Moving it to: $install_tree/$1${DEST_MODULE_LOCATION[$count]}/"
+                    mkdir -p "$install_tree/$1${DEST_MODULE_LOCATION[$count]}/"
+                    mv -f "$dkms_tree/$module/original_module/$1/$2/${dest_module_name[$count]}$module_suffix" \
+                    "$install_tree/$1${DEST_MODULE_LOCATION[$count]}/" 2>/dev/null
+                    ;;
+            esac
+            else
+            echo $"   - No original module was found for this module on this kernel."
+            echo $"   - Use the dkms install command to reinstall any previous module version."
+
+            # Remove modules_conf entries from /etc/modules.conf if remake_initrd is set or if this is last instance removed
+            if [[ $remake_initrd ]] || (do_status $module $module_version | grep -q "installed"); then
+                echo $""
+                moduleconfig_remove "$1"
+            fi
+        fi
+    done
+    rm -f "$dkms_tree/$module/kernel-$1-$2"
     else
-	echo $""
-	echo $"Status: This module version was INACTIVE for this kernel."
+        echo $""
+        echo $"Status: This module version was INACTIVE for this kernel."
     fi
 
     # Run the post_remove script
@@ -1617,22 +1737,21 @@ do_uninstall()
 
     # Do remake_initrd things (remake initrd)
     if [[ $remake_initrd && $was_active ]] && ! make_initrd "$1" "$2"; then
-	warn $"There was a problem remaking your initrd.  You must manually remake it" \
-	    $"before booting into this kernel."
+        warn $"There was a problem remaking your initrd.  You must manually remake it" \
+            $"before booting into this kernel."
     fi
 
     # Delete the original_module if nothing for this kernel is installed anymore
-    if [[ $was_active && -d $dkms_tree/$module/original_module/$1/$2 && \
-	! -d $dkms_tree/$module/original_module/$1/$2/collisions ]]; then
-	echo $""
-	echo $"Removing original_module from DKMS tree for kernel $1 ($2)"
-	rm -rf "$dkms_tree/$module/original_module/$1/$2" 2>/dev/null
-	[[ $(find $dkms_tree/$module/original_module/$1/* -maxdepth 0 -type d 2>/dev/null) ]] || rm -rf "$dkms_tree/$module/original_module/$1"
+    if [[ $was_active && -d $dkms_tree/$module/original_module/$1/$2 && ! -d $dkms_tree/$module/original_module/$1/$2/collisions ]]; then
+        echo $""
+        echo $"Removing original_module from DKMS tree for kernel $1 ($2)"
+        rm -rf "$dkms_tree/$module/original_module/$1/$2" 2>/dev/null
+        [[ $(find $dkms_tree/$module/original_module/$1/* -maxdepth 0 -type d 2>/dev/null) ]] || rm -rf "$dkms_tree/$module/original_module/$1"
     elif [[ $was_active && -d $dkms_tree/$module/original_module/$1/$2/collisions ]]; then
-	echo $""
-	echo $"Keeping directory $dkms_tree/$module/original_module/$1/$2/collisions/"
-	echo $"for your reference purposes.  Your kernel originally contained multiple"
-	echo $"same-named modules and this directory is now where these are located."
+        echo $""
+        echo $"Keeping directory $dkms_tree/$module/original_module/$1/$2/collisions/"
+        echo $"for your reference purposes.  Your kernel originally contained multiple"
+        echo $"same-named modules and this directory is now where these are located."
     fi
     [[ $(find $dkms_tree/$module/original_module/* -maxdepth 0 -type d 2>/dev/null) ]] || rm -rf "$dkms_tree/$module/original_module"
 
@@ -1652,13 +1771,13 @@ uninstall_module()
 
     # Check that $module is in the dkms tree
     [[ -d $dkms_tree/$module ]] || die 2 \
-	$"There are no instances of module: $module" \
-	$"located in the DKMS tree."
+        $"There are no instances of module: $module" \
+        $"located in the DKMS tree."
 
     # Make sure that its installed in the first place
     [[ -d $dkms_tree/$module/$module_version ]] || die 3 \
-	$"The module/version combo: $module-$module_version" \
-	$"is not located in the DKMS tree."
+        $"The module/version combo: $module-$module_version" \
+        $"is not located in the DKMS tree."
 
     # Read the conf file
     read_conf_or_die "$kernelver" "$arch"
@@ -1666,8 +1785,8 @@ uninstall_module()
     # Only do stuff if module/module version is currently installed
     local kernel_symlink=$(readlink -f "$dkms_tree/$module/kernel-$kernelver-$arch")
     [[ $kernel_symlink = $dkms_tree/$module/$module_version/$kernelver/$arch ]] || die 5 \
-	    $"The module $module $module_version is not currently installed." \
-	    $"This module is not currently ACTIVE for kernel $kernelver ($arch)."
+        $"The module $module $module_version is not currently installed." \
+        $"This module is not currently ACTIVE for kernel $kernelver ($arch)."
     do_uninstall "$kernelver" "$arch"
 }
 
@@ -1676,68 +1795,67 @@ remove_module()
 {
     # Check that the right arguments were passed
     if [[ ! ($module && $module_version) || $kernels_arches_default  ]]; then
-	die 1 $"Invalid number of parameters passed." \
-	    $"Usage: remove <module>/<module-version> --all" \
-	    $"   or: remove <module>/<module-version> -k <kernel-version>"
+        die 1 $"Invalid number of parameters passed." \
+            $"Usage: remove <module>/<module-version> --all" \
+            $"   or: remove <module>/<module-version> -k <kernel-version>"
     fi
 
     # Check that $module is in the dkms tree
     if ! [[ -d $dkms_tree/$module/$module_version ]]; then
-	die 3 $"There are no instances of module: $module" \
-	    $"$module_version located in the DKMS tree."
+        die 3 $"There are no instances of module: $module" \
+            $"$module_version located in the DKMS tree."
     fi
 
     local i
     for ((i=0; i < ${#kernelver[@]}; i++)); do
-	# make sure its there first before removing
-	if ! [[ -d $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]} ]]; then
-	    die 4 $"There is no instance of $module $module_version" \
-		$"for kernel ${kernelver[$i]} (${arch[$i]}) located in the DKMS tree."
-	fi
+        # Make sure its there first before removing
+        if ! [[ -d $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]} ]]; then
+            die 4 $"There is no instance of $module $module_version" \
+            $"for kernel ${kernelver[$i]} (${arch[$i]}) located in the DKMS tree."
+        fi
 
-	# Do --rpm_safe_upgrade check (exit out and don't do remove if inter-release RPM upgrade scenario occurs)
-	if [[ $rpm_safe_upgrade ]]; then
-	    local pppid=$(awk '/PPid:/ {print $2}' /proc/$PPID/status)
-	    local time_stamp=$(ps -o lstart --no-headers -p $pppid 2>/dev/null)
-	    for lock_file in $tmp_location/dkms_rpm_safe_upgrade_lock.$pppid.*; do
-		[[ -f $lock_file ]] || continue
-		lock_head=$(head -n 1 $lock_file 2>/dev/null)
-		lock_tail=$(tail -n 1 $lock_file 2>/dev/null)
-		[[ $lock_head = $module-$module_version && $time_stamp && $lock_tail = $time_stamp ]] || continue
-		rm -f $lock_file
-		die 0 $"DKMS: Remove cancelled because --rpm_safe_upgrade scenario detected."
-	    done
-	fi
+        # Do --rpm_safe_upgrade check (exit out and don't do remove if inter-release RPM upgrade scenario occurs)
+        if [[ $rpm_safe_upgrade ]]; then
+            local pppid=$(awk '/PPid:/ {print $2}' /proc/$PPID/status)
+            local time_stamp=$(ps -o lstart --no-headers -p $pppid 2>/dev/null)
+            for lock_file in $tmp_location/dkms_rpm_safe_upgrade_lock.$pppid.*; do
+                [[ -f $lock_file ]] || continue
+                lock_head=$(head -n 1 $lock_file 2>/dev/null)
+                lock_tail=$(tail -n 1 $lock_file 2>/dev/null)
+                [[ $lock_head = $module-$module_version && $time_stamp && $lock_tail = $time_stamp ]] || continue
+                rm -f $lock_file
+                die 0 $"DKMS: Remove cancelled because --rpm_safe_upgrade scenario detected."
+            done
+        fi
 
-	# Read the conf file
-	read_conf_or_die "${kernelver[$i]}" "${arch[$i]}"
+        # Read the conf file
+        read_conf_or_die "${kernelver[$i]}" "${arch[$i]}"
 
-	do_uninstall "${kernelver[$i]}" "${arch[$i]}"
+        do_uninstall "${kernelver[$i]}" "${arch[$i]}"
 
-	# Delete the $kernel_version/$arch_used part of the tree
-	rm -rf "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}"
-	[[ $(find $dkms_tree/$module/$module_version/${kernelver[$i]}/* \
-	    -maxdepth 0 -type d 2>/dev/null) ]] || \
-	    rm -rf "$dkms_tree/$module/$module_version/${kernelver[$i]}"
+        # Delete the $kernel_version/$arch_used part of the tree
+        rm -rf "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}"
+        [[ $(find $dkms_tree/$module/$module_version/${kernelver[$i]}/* -maxdepth 0 -type d 2>/dev/null) ]] || \
+            rm -rf "$dkms_tree/$module/$module_version/${kernelver[$i]}"
     done
 
     # Delete the $module_version part of the tree if no other $module_version/$kernel_version dirs exist
     if ! find $dkms_tree/$module/$module_version/* -maxdepth 0 -type d 2>/dev/null | egrep -qv "(build|tarball|driver_disk|rpm|deb|source)$"; then
-	echo $""
-	echo $"------------------------------"
-	echo $"Deleting module version: $module_version"
-	echo $"completely from the DKMS tree."
-	echo $"------------------------------"
-	rm -rf "$dkms_tree/$module/$module_version"
-	echo $"Done."
+        echo $""
+        echo $"------------------------------"
+        echo $"Deleting module version: $module_version"
+        echo $"completely from the DKMS tree."
+        echo $"------------------------------"
+        rm -rf "$dkms_tree/$module/$module_version"
+        echo $"Done."
     fi
 
     # Get rid of any remnant directories if necessary
     if (($(ls "$dkms_tree/$module" | wc -w | awk '{print $1}') == 0)); then
-	rm -rf "$dkms_tree/$module" 2>/dev/null
+        rm -rf "$dkms_tree/$module" 2>/dev/null
 
-	# Its now safe to completely remove references in /etc/sysconfig/kernel for SuSE
-	etc_sysconfig_kernel_modify "delete"
+        # Its now safe to completely remove references in /etc/sysconfig/kernel for SuSE
+        etc_sysconfig_kernel_modify "delete"
     fi
 }
 
@@ -1750,13 +1868,13 @@ find_module_from_ko()
     local kernellink
 
     for kernellink in "$dkms_tree"/*/kernel-*; do
-	[[ -L $kernellink ]] || continue
-	module=${kernellink#$dkms_tree/}
-	module=${module%/kernel-*}
-	diff "$kernellink/module/${basename_ko}" "${ko}" >/dev/null 2>&1 || continue
-	rest=$(readlink $kernellink)
-	echo "$module/$rest"
-	return 0
+        [[ -L $kernellink ]] || continue
+        module=${kernellink#$dkms_tree/}
+        module=${module%/kernel-*}
+        diff "$kernellink/module/${basename_ko}" "${ko}" >/dev/null 2>&1 || continue
+        rest=$(readlink $kernellink)
+        echo "$module/$rest"
+        return 0
     done
     return 1
 }
@@ -1768,24 +1886,23 @@ find_module_from_ko()
 module_status_weak() {
     # $1 = module, $2 = module version, $3 = kernel version weak installed to,
     # $4 = kernel arch, $5 = kernel version built for
+	[ -z "$NO_WEAK_MODULES" ] || return 1
     [[ $weak_modules ]] || return 1
-    local weak_ko mod installed_ko f ret=1 oifs=$IFS
+    local m v k a weak_ko mod installed_ko f ret=1 oifs=$IFS
     local -a already_found
     for weak_ko in "$install_tree/"*/weak-updates/*; do
-	[[ -e $weak_ko ]] || continue
-	[[ -L $weak_ko ]] && installed_ko="$(readlink -f "$weak_ko")" || continue
-	IFS=/ read m v k a < <(IFS=$oifs find_module_from_ko "$weak_ko") || continue
-	kern=${weak_ko#$install_tree/}
-	kern=${kern%/weak-updates/*}
-	[[ $m = ${1:-*} && $v = ${2:-*} && $k = ${5:-*} && \
-	    $a = ${4:-*} && $kern = ${3:-*} ]] || \
-	    continue
-	ret=0
-	for f in "${already_found[@]}"; do
-	    [[ $f = $m/$v/$kern/$a/$k ]] && continue 2
-	done
-	already_found[${#already_found[@]}]="$m/$v/$kern/$a/$k"
-	echo "installed-weak $m/$v/$kern/$a/$k"
+        [[ -e $weak_ko ]] || continue
+        [[ -L $weak_ko ]] && installed_ko="$(readlink -f "$weak_ko")" || continue
+        IFS=/ read m v k a < <(IFS=$oifs find_module_from_ko "$weak_ko") || continue
+        kern=${weak_ko#$install_tree/}
+        kern=${kern%/weak-updates/*}
+        [[ $m = ${1:-*} && $v = ${2:-*} && $k = ${5:-*} && $a = ${4:-*} && $kern = ${3:-*} ]] || continue
+        ret=0
+        for f in "${already_found[@]}"; do
+            [[ $f = $m/$v/$kern/$a/$k ]] && continue 2
+        done
+        already_found[${#already_found[@]}]="$m/$v/$kern/$a/$k"
+        echo "installed-weak $m/$v/$kern/$a/$k"
     done
     return $ret
 }
@@ -1795,8 +1912,8 @@ do_status_weak()
 {
     local mvka m v k a kern status
     while read status mvka; do
-	IFS=/ read m v k a kern <<< "$mvka"
-	echo "$m, $v, $k, $a: installed-weak from $kern"
+        IFS=/ read m v k a kern <<< "$mvka"
+        echo "$m, $v, $k, $a: installed-weak from $kern"
     done < <(module_status_weak "$@")
 }
 
@@ -1807,15 +1924,15 @@ module_status_built_extra() (
     read_conf "$3" "$4" "$dkms_tree/$1/$2/source/dkms.conf"
     [[ -d $dkms_tree/$1/original_module/$3/$4 ]] && echo -n " (original_module exists)"
     for ((count=0; count < ${#dest_module_name[@]}; count++)); do
-	tree_mod="$dkms_tree/$1/$2/$3/$4/module/${dest_module_name[$count]}$module_suffix"
-	if ! [[ -e $tree_mod ]]; then
-	    echo -n " (WARNING! Missing some built modules!)"
-	elif _is_module_installed "$@"; then
-	    real_dest="$(find_actual_dest_module_location "$1" $count "$3" "$4")"
-	    if ! diff -q "$tree_mod" "$install_tree/$3${real_dest}/${dest_module_name[$count]}$module_suffix" >/dev/null 2>&1; then
-		echo -n " (WARNING! Diff between built and installed module!)"
-	    fi
-	fi
+        tree_mod="$dkms_tree/$1/$2/$3/$4/module/${dest_module_name[$count]}$module_suffix"
+        if ! [[ -e $tree_mod ]]; then
+            echo -n " (WARNING! Missing some built modules!)"
+        elif _is_module_installed "$@"; then
+            real_dest="$(find_actual_dest_module_location "$1" $count "$3" "$4")"
+            if ! diff -q "$tree_mod" "$install_tree/$3${real_dest}/${dest_module_name[$count]}$module_suffix" >/dev/null 2>&1; then
+                echo -n " (WARNING! Diff between built and installed module!)"
+            fi
+        fi
     done
 )
 
@@ -1825,17 +1942,16 @@ module_status_built_extra() (
 module_status_built() {
     local ret=1 directory ka k a state oifs="$IFS" IFS=''
     for directory in "$dkms_tree/$1/$2/"${3:-[0-9].*}/${4:-*}; do
-	IFS="$oifs"
-	ka="${directory#$dkms_tree/$1/$2/}"
-	k="${ka%/*}"
-	a="${ka#*/}"
-	is_module_built "$1" "$2" "$k" "$a" || continue
-	ret=0
-	state="built"
-	_is_module_installed "$1" "$2" "$k" "$a" && \
-	    state="installed"
-	echo "$state $1/$2/$k/$a"
-	IFS=''
+        IFS="$oifs"
+        ka="${directory#$dkms_tree/$1/$2/}"
+        k="${ka%/*}"
+        a="${ka#*/}"
+        is_module_built "$1" "$2" "$k" "$a" || continue
+        ret=0
+        state="built"
+        _is_module_installed "$1" "$2" "$k" "$a" && state="installed"
+        echo "$state $1/$2/$k/$a"
+        IFS=''
     done
     IFS="$oifs"
     return $ret
@@ -1845,14 +1961,14 @@ module_status_built() {
 module_status() {
     local oifs="$IFS" IFS='' mv m v directory ret=1
     for directory in "$dkms_tree/"${1:-*}/${2:-*}; do
-	IFS="$oifs"
-	mv="${directory#$dkms_tree/}"
-	m="${mv%/*}"
-	v="${mv#*/}"
-	is_module_added "$m" "$v" || continue
-	ret=0
-	module_status_built "$m" "$v" "$3" "$4" || echo "added $m/$v"
-	IFS=''
+        IFS="$oifs"
+        mv="${directory#$dkms_tree/}"
+        m="${mv%/*}"
+        v="${mv#*/}"
+        is_module_added "$m" "$v" || continue
+        ret=0
+        module_status_built "$m" "$v" "$3" "$4" || echo "added $m/$v"
+        IFS=''
     done
     IFS="$oifs"
     return $ret
@@ -1864,13 +1980,17 @@ module_status() {
 do_status() {
     local status mvka m v k a
     while read status mvka; do
-	IFS=/ read m v k a <<< "$mvka"
-	case $status in
-	    added) echo "$m, $v: $status";;
-	    built|installed) echo -n "$m, $v, $k, $a: $status"
-		module_status_built_extra "$m" "$v" "$k" "$a"
-		echo;;
-	esac
+        IFS=/ read m v k a <<< "$mvka"
+        case $status in
+            added)
+                echo "$m, $v: $status"
+                ;;
+            built|installed)
+                echo -n "$m, $v, $k, $a: $status"
+                module_status_built_extra "$m" "$v" "$k" "$a"
+                echo
+                ;;
+        esac
     done < <(module_status "$@")
 }
 
@@ -1880,13 +2000,13 @@ show_status()
 {
     local j state_array
     if ((${#kernelver[@]} == 0)); then
-	do_status "$module" "$module_version" "$kernelver" "$arch"
-	do_status_weak "$module" "$module_version" "$kernelver" "$arch"
+        do_status "$module" "$module_version" "$kernelver" "$arch"
+        do_status_weak "$module" "$module_version" "$kernelver" "$arch"
     else
-	for ((j=0; j < ${#kernelver[@]}; j++)); do
-	    do_status "$module" "$module_version" "${kernelver[$j]}" "${arch[$j]}"
-	    do_status_weak "$module" "$module_version" "${kernelver[$j]}" "${arch[$j]}"
-	done
+    for ((j=0; j < ${#kernelver[@]}; j++)); do
+        do_status "$module" "$module_version" "${kernelver[$j]}" "${arch[$j]}"
+        do_status_weak "$module" "$module_version" "${kernelver[$j]}" "${arch[$j]}"
+    done
     fi
 }
 
@@ -1919,7 +2039,10 @@ delete_temporary_trees()
     temporary_trees_del_command=
 }
 
-in_temporary_trees() { [[ $temporary_trees_del_command ]] ;}
+in_temporary_trees()
+{
+    [[ $temporary_trees_del_command ]]
+}
 
 media_valid()
 {
@@ -1938,8 +2061,12 @@ make_driver_disk_floppy()
     rm -f "$image_name"
     invoke_command "dd if=/dev/zero of=$image_name bs=$(($size/20))k count=20" "making a blank floppy image" background
     case $fs in
-	vfat) invoke_command "mkdosfs $image_name" "mkdosfs" background;;
-	ext2) invoke_command "mke2fs -F $image_name" "mke2fs" background;;
+        vfat)
+            invoke_command "mkdosfs $image_name" "mkdosfs" background
+            ;;
+        ext2)
+            invoke_command "mke2fs -F $image_name" "mke2fs" background
+            ;;
     esac
 
     local mntdir=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
@@ -1957,8 +2084,12 @@ make_driver_disk_isotar()
     local source_dir="$3"
     local file
     case $type in
-	iso) invoke_command "mkisofs -v -r -J -pad -V $module -o $image_name ." "mkisofs" background;;
-	tar) invoke_command "tar cvf $image_name ." "tar" background;;
+        iso)
+            invoke_command "mkisofs -v -r -J -pad -V $module -o $image_name ." "mkisofs" background
+            ;;
+        tar)
+            invoke_command "tar cvf $image_name ." "tar" background
+            ;;
     esac
 }
 
@@ -1967,79 +2098,91 @@ make_driver_disk_media()
     echo "Copying files $2"
 
     case $media in
-	floppy*) make_driver_disk_floppy "$1" "$2";;
-	iso*) make_driver_disk_isotar "iso" "$1" "$2";;
-	tar*) make_driver_disk_isotar "tar" "$1" "$2";;
+        floppy*)
+            make_driver_disk_floppy "$1" "$2"
+            ;;
+        iso*)
+            make_driver_disk_isotar "iso" "$1" "$2"
+            ;;
+        tar*)
+            make_driver_disk_isotar "tar" "$1" "$2"
+            ;;
     esac
 }
 
 driver_disk_suffix()
 {
     case $media in
-	floppy*) echo "img";;
-	iso*) echo "iso";;
-	tar*) echo "tar";;
+    floppy*)
+        echo "img"
+        ;;
+    iso*)
+        echo "iso"
+        ;;
+    tar*)
+        echo "tar"
+        ;;
     esac
 }
 
 make_redhat_driver_disk()
 {
     local i count
-    # kludge to allow redhat1 driver disks with BOOT kernel modules (arch i386)
+    # Kludge to allow redhat1 driver disks with BOOT kernel modules (arch i386)
     if [[ $distro = redhat1 && $multi_arch = true ]]; then
-	local redhat1_okay="true"
-	local other_arch=""
-	for ((i=0; i < ${#kernelver[@]}; i++)); do
-	    if [[ ${arch[$i]} != i386 && $other_arch != ${arch[$i]} && $other_arch ]]; then
-		die 3 $"You have specified a Red Hat version 1 driver disk, but have also" \
-		    $"specified multiple architectures.  Version 1 does not support this." \
-		    $"Use 'redhat2' instead (only OSes >= RHEL3, FC1 support version 2)."
-	    elif [[ ${arch[$i]} != i386 && $other_arch != ${arch[$i]} && ! $other_arch ]]; then
-		other_arch="${arch[$i]}"
-	    fi
-	done
+        local redhat1_okay="true"
+        local other_arch=""
+        for ((i=0; i < ${#kernelver[@]}; i++)); do
+            if [[ ${arch[$i]} != i386 && $other_arch != ${arch[$i]} && $other_arch ]]; then
+                die 3 $"You have specified a Red Hat version 1 driver disk, but have also" \
+                    $"specified multiple architectures.  Version 1 does not support this." \
+                    $"Use 'redhat2' instead (only OSes >= RHEL3, FC1 support version 2)."
+            elif [[ ${arch[$i]} != i386 && $other_arch != ${arch[$i]} && ! $other_arch ]]; then
+                other_arch="${arch[$i]}"
+            fi
+        done
     fi
     if [ "$distro" == "redhat2" ]  && [ -z "$redhat1_okay" ]; then
-	echo $"Creating Red Hat v2 driver disk (arch support)."
-	echo $""
-	local rhdd_filename="rhdd"
+        echo $"Creating Red Hat v2 driver disk (arch support)."
+        echo $""
+        local rhdd_filename="rhdd"
     elif [ "$distro" == "redhat3" ] && [ -z "$redhat1_okay" ]; then
         echo $"Creating Red Hat v3 driver disk."
-	echo $""
-	make_redhat3_driver_disk
-	return
+        echo $""
+        make_redhat3_driver_disk
+        return
     else
-	echo $"Creating Red Hat v1 driver disk."
-	echo $""
-	local rhdd_filename="rhdd-6.1"
+        echo $"Creating Red Hat v1 driver disk."
+        echo $""
+        local rhdd_filename="rhdd-6.1"
     fi
 
     cpioarchive_dir_name=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
 
     for ((i=0; i < ${#kernelver[@]}; i++)); do
-	set_module_suffix "${kernelver[$i]}"
-
-	local dd_prefix="${kernelver[$i]}"
-	[[ $distro = redhat2 ]] && dd_prefix="${kernelver[$i]}/${arch[$i]}"
-	[[ $multi_arch = true && -z $redhat1_okay ]] && dd_prefix="${kernelver[$i]}/${arch[$i]}"
-	maybe_build_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}" || {
-	    rm -rf "$cpioarchive_dir_name"
-	    die 5 $"Cannot build $module/$module_version for redhat driver disk."
-	}
-	
-	# FIXME: add check for KMP binary RPMs to include in the driver disk
-	if [[ ! $kernel_version_list ]]; then
-	    kernel_version_list="kernel${kernelver[$i]}-${arch[$i]}"
-	else
-	    kernel_version_list="$kernel_version_list-kernel${kernelver[$i]}-${arch[$i]}"
-	fi
-	mkdir -p $cpioarchive_dir_name/$dd_prefix
-	for f in "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/"*"$module_suffix"; do
-	    [[ -f $f ]] || continue
-	    echo "Marking ${f#$dkms_tree/$module/$module_version/}..."
-	    cp "$f" "$cpioarchive_dir_name/$dd_prefix/"
-	    modules_cgz_list="$dd_prefix/${f##*/} ${modules_cgz_list}"
-	done
+        set_module_suffix "${kernelver[$i]}"
+
+        local dd_prefix="${kernelver[$i]}"
+        [[ $distro = redhat2 ]] && dd_prefix="${kernelver[$i]}/${arch[$i]}"
+        [[ $multi_arch = true && -z $redhat1_okay ]] && dd_prefix="${kernelver[$i]}/${arch[$i]}"
+        maybe_build_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}" || {
+            rm -rf "$cpioarchive_dir_name"
+            die 5 $"Cannot build $module/$module_version for redhat driver disk."
+        }
+
+        # FIXME: add check for KMP binary RPMs to include in the driver disk
+        if [[ ! $kernel_version_list ]]; then
+            kernel_version_list="kernel${kernelver[$i]}-${arch[$i]}"
+        else
+            kernel_version_list="$kernel_version_list-kernel${kernelver[$i]}-${arch[$i]}"
+        fi
+        mkdir -p $cpioarchive_dir_name/$dd_prefix
+        for f in "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/"*"$module_suffix"; do
+            [[ -f $f ]] || continue
+            echo "Marking ${f#$dkms_tree/$module/$module_version/}..."
+            cp "$f" "$cpioarchive_dir_name/$dd_prefix/"
+            modules_cgz_list="$dd_prefix/${f##*/} ${modules_cgz_list}"
+        done
 
     done
 
@@ -2054,18 +2197,18 @@ make_redhat_driver_disk()
 
     local files_into_driverdisk="modules.cgz $rhdd_filename modules.alias"
     for file in $files_for_driverdisk; do
-	if [[ -e $dkms_tree/$module/$module_version/source/redhat_driver_disk/$file ]]; then
-	    files_into_driverdisk="$file $files_into_driverdisk"
-	    cp -f "$dkms_tree/$module/$module_version/source/redhat_driver_disk/$file" "$driver_disk_dir/" 2>/dev/null
-	else
-	    warn $"File: $file not found in $dkms_tree/$module/$module_version/source/redhat_driver_disk/"
-	fi
+        if [[ -e $dkms_tree/$module/$module_version/source/redhat_driver_disk/$file ]]; then
+            files_into_driverdisk="$file $files_into_driverdisk"
+            cp -f "$dkms_tree/$module/$module_version/source/redhat_driver_disk/$file" "$driver_disk_dir/" 2>/dev/null
+        else
+            warn $"File: $file not found in $dkms_tree/$module/$module_version/source/redhat_driver_disk/"
+        fi
     done
     echo "$module-$module_version driver disk" > "$driver_disk_dir/$rhdd_filename"
 
     # Make sure the kernel_version_list is not too long
     if (( $(echo $kernel_version_list | wc -m | awk {'print $1'}) > 200 )); then
-	kernel_version_list="manykernels"
+        kernel_version_list="manykernels"
     fi
 
     local suffix="$(driver_disk_suffix)"
@@ -2077,17 +2220,17 @@ make_redhat_driver_disk()
     invoke_command "echo '$modules_cgz_list' | cpio -oH crc 2>/dev/null | gzip -9 > ./modules.cgz" "compressing modules.cgz" background
     cp -f ./modules.cgz "$driver_disk_dir/"
 
-    # generate modules.alias file
+    # Generate modules.alias file
     # On 2.4 kernels and kernels with no aliases. this won't yield anything.
     touch ./modules.alias
     for f in ${modules_cgz_list}; do
-	module_wo_suffix=$(basename ${f} ${module_suffix})
-	tmp_alias="./modules.alias.${module_wo_suffix}"
-	f="./${f}"
-	depmod -n ${f} 2>/dev/null | grep ^alias > ${tmp_alias}
-	if [[ -s ${tmp_alias} ]]; then
-	    cat "${tmp_alias}" >> ./modules.alias
-	fi
+        module_wo_suffix=$(basename ${f} ${module_suffix})
+        tmp_alias="./modules.alias.${module_wo_suffix}"
+        f="./${f}"
+        depmod -n ${f} 2>/dev/null | grep ^alias > ${tmp_alias}
+        if [[ -s ${tmp_alias} ]]; then
+            cat "${tmp_alias}" >> ./modules.alias
+        fi
     done
     [[ -e ./modules.alias ]] && cp -f ./modules.alias "$driver_disk_dir/"
     # FIXME: add rpms/ directory, copy in KMP RPMs, run createrepo --pretty
@@ -2113,15 +2256,15 @@ make_driver_disk()
 {
     # Check that the right arguments were passed
     if ! [[ $module && $module_version && $distro && $kernelver ]]; then
-	die 1 $"Invalid number of parameters passed." \
-	$"Usage: mkdriverdisk <module>/<module-version> -d <distro> -k <kernelver> [--media floppy|iso|tar]"
+        die 1 $"Invalid number of parameters passed." \
+        $"Usage: mkdriverdisk <module>/<module-version> -d <distro> -k <kernelver> [--media floppy|iso|tar]"
     fi
 
-    # default to floppy media
+    # Default to floppy media
     [[ $media ]] || media="floppy"
     if ! media_valid; then
-	die 1 $"Media $media is invalid." \
-	    $"Usage: mkdriverdisk <module>/<module-version> -d <distro> -k <kernelver> [--media floppy|iso|tar]"
+        die 1 $"Media $media is invalid." \
+            $"Usage: mkdriverdisk <module>/<module-version> -d <distro> -k <kernelver> [--media floppy|iso|tar]"
     fi
 
     # Check that source symlink works
@@ -2129,19 +2272,28 @@ make_driver_disk()
 
     # Confirm that distro is supported
     case $distro in
-	redhat | redhat[123] | suse | UnitedLinux | ubuntu) ;;
-	*) die 3 $"Invalid distro argument. Currently, the distros" \
-		$"supported are: redhat, redhat1, redhat2, redhat3, suse, UnitedLinux" \
-		$"               ubuntu";;
+        redhat | redhat[123] | suse | UnitedLinux | ubuntu)
+            ;;
+        *)
+            die 3 $"Invalid distro argument. Currently, the distros" \
+                $"supported are: redhat, redhat1, redhat2, redhat3, suse, UnitedLinux" \
+                $"               ubuntu"
+            ;;
     esac
 
     # Read the conf file
     read_conf_or_die "$kernelver" "$arch"
 
     case $distro in
-	redhat*) make_redhat_driver_disk;;
-	ubuntu) make_ubuntu_driver_disk;;
-	*) make_suse_driver_disk;;
+        redhat*)
+            make_redhat_driver_disk
+            ;;
+        ubuntu)
+            make_ubuntu_driver_disk
+            ;;
+        *)
+            make_suse_driver_disk
+            ;;
     esac
 }
 
@@ -2150,34 +2302,34 @@ find_external_dependencies()
     local mod count i
     local -a deps
 
-    # find all module dependencies
+    # Find all module dependencies
     for ((count=0; count < ${#dest_module_name[@]}; count++)); do
-	for ((i=0; i < ${#kernelver[@]}; i++)); do
-	    set_module_suffix "${kernelver[$i]}"
-	    mod="$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix"
-	    deps=(${deps[@]} $(modinfo "$mod" | sed -n 's/,/ /g; s/^depends: *//p'))
-	done
+        for ((i=0; i < ${#kernelver[@]}; i++)); do
+            set_module_suffix "${kernelver[$i]}"
+            mod="$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix"
+            deps=(${deps[@]} $(modinfo "$mod" | sed -n 's/,/ /g; s/^depends: *//p'))
+        done
     done
 
-    # prune internally satisfied dependencies
+    # Prune internally satisfied dependencies
 
     for ((i=0; i < ${#deps[@]}; i++)); do
-	for mod in ${dest_module_name[@]}; do
-	    [[ ${deps[i]} = $mod ]] && deps[i]=
-	done
+        for mod in ${dest_module_name[@]}; do
+            [[ ${deps[i]} = $mod ]] && deps[i]=
+        done
     done
 
     for dep in "${deps[@]}"; do
-	echo $dep
+        echo $dep
     done | sort -u
 }
 
 make_suse_driver_disk()
 {
     [[ $release ]] || die 3 \
-	$"Invalid number of parameters passed for suse/UnitedLinux driver disk." \
-	$"Usage: mkdriverdisk <module>/<module-version> -d <distro> -k <kernelver>" \
-	$"                    -r <release-number>"
+        $"Invalid number of parameters passed for suse/UnitedLinux driver disk." \
+        $"Usage: mkdriverdisk <module>/<module-version> -d <distro> -k <kernelver>" \
+        $"                    -r <release-number>"
 
     local driver_disk_dir=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
     local suffix="$(driver_disk_suffix)"
@@ -2195,95 +2347,96 @@ make_suse_driver_disk()
     
     local count
     for ((count=0; count < ${#dest_module_name[@]}; count++)); do
-	local i
-	local topdir=$(printf "%02d" $(($count+1+offset)))
-	for ((i=0; i < ${#kernelver[@]}; i++)); do
-	    set_module_suffix "${kernelver[$i]}"
-
-	    if ! [[ -e $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix ]]; then
-		rm -rf $temp_dir_name
-		die 5 \
-		    $"Cannot find module ${dest_module_name[$count]}$module_suffix for kernel ${kernelver[$i]} (${arch[$i]})." \
-		    $"Module/version must be in built state before making a driver disk."
-	    fi
-	    # FIXME: add check for KMP binary RPMs to include in the driver disk
-	    suse_arch=${arch[$i]}
-	    case $suse_arch in
-		i?86) suse_arch=i386;;
-	    esac
-
-	    echo "Marking ${kernelver[$i]}/${arch[$i]}/modules/${dest_module_name[$count]}$module_suffix..."
-	    mkdir -p "$driver_disk_dir/$topdir/$suse_arch-$release/install/lib/modules/${kernelver[$i]}${dest_module_location[$count]}"
-	    cp "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix" "$driver_disk_dir/$topdir/$suse_arch-$release/install/lib/modules/${kernelver[$i]}${dest_module_location[$count]}/"
-
-	    case ${kernelver[$i]} in
-		*-default)
-		    mkdir -p "$driver_disk_dir/$topdir/$suse_arch-$release/modules/"
-		    cp "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix" "$driver_disk_dir/$topdir/$suse_arch-$release/modules/"
-		    ;;
-	    esac
-
-	    # create directory for dependency information
-	    [[ ${deps[@]} ]] && mkdir -p "$driver_disk_dir/01/linux/$distro/$suse_arch-$release/modules"
-
-	done
-
-	# ---
-	for arch_release in $(find $driver_disk_dir/$topdir -maxdepth 1 -mindepth 1 -type d | sed "s#$driver_disk_dir\/$topdir\/##"); do
-	    cd "$driver_disk_dir/$topdir/$arch_release/install/"
-	    invoke_command "tar cvzf update.tar.gz lib/" "making update.tar.gz for $arch_release" background
-	    cd - >/dev/null
-
-	    mkdir -p "$driver_disk_dir/$topdir/linux/$distro/$arch_release/install"
-	    mkdir -p "$driver_disk_dir/$topdir/linux/$distro/$arch_release/modules"
-
-	    echo $"  copying update.tar.gz for $arch_release to disk image..."
-	    cp -f "$driver_disk_dir/$topdir/$arch_release/install/update.tar.gz" "$driver_disk_dir/$topdir/linux/$distro/$arch_release/install/"
-
-	    postkernels=
-	    archtest=${arch_release/-*}
-	    for ((i=0; i<${#kernelver[@]}; i++)); do
-		[[ ${arch[$i]} = ${archtest} ]] && \
-		    postkernels="${postkernels} ${kernelver[$i]}"
-	    done
-
-	    if [[ ${postkernels} ]]; then
-		dstfile="$driver_disk_dir/$topdir/linux/$distro/$arch_release/install/update.post"
-		echo $"  creating update.post for $arch_release..."
-		(cat << EOF
+    local i
+    local topdir=$(printf "%02d" $(($count+1+offset)))
+    for ((i=0; i < ${#kernelver[@]}; i++)); do
+        set_module_suffix "${kernelver[$i]}"
+
+        if ! [[ -e $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix ]]; then
+            rm -rf $temp_dir_name
+            die 5 \
+                $"Cannot find module ${dest_module_name[$count]}$module_suffix for kernel ${kernelver[$i]} (${arch[$i]})." \
+                $"Module/version must be in built state before making a driver disk."
+        fi
+        # FIXME: add check for KMP binary RPMs to include in the driver disk
+        suse_arch=${arch[$i]}
+        case $suse_arch in
+            i?86)
+                suse_arch=i386
+                ;;
+        esac
+
+        echo "Marking ${kernelver[$i]}/${arch[$i]}/modules/${dest_module_name[$count]}$module_suffix..."
+        mkdir -p "$driver_disk_dir/$topdir/$suse_arch-$release/install/lib/modules/${kernelver[$i]}${dest_module_location[$count]}"
+        cp "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix" "$driver_disk_dir/$topdir/$suse_arch-$release/install/lib/modules/${kernelver[$i]}${dest_module_location[$count]}/"
+
+        case ${kernelver[$i]} in
+        *-default)
+            mkdir -p "$driver_disk_dir/$topdir/$suse_arch-$release/modules/"
+            cp "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/${dest_module_name[$count]}$module_suffix" "$driver_disk_dir/$topdir/$suse_arch-$release/modules/"
+            ;;
+        esac
+
+        # Create directory for dependency information
+        [[ ${deps[@]} ]] && mkdir -p "$driver_disk_dir/01/linux/$distro/$suse_arch-$release/modules"
+
+    done
+
+    # ---
+    for arch_release in $(find $driver_disk_dir/$topdir -maxdepth 1 -mindepth 1 -type d | sed "s#$driver_disk_dir\/$topdir\/##"); do
+        cd "$driver_disk_dir/$topdir/$arch_release/install/"
+        invoke_command "tar cvzf update.tar.gz lib/" "making update.tar.gz for $arch_release" background
+        cd - >/dev/null
+
+        mkdir -p "$driver_disk_dir/$topdir/linux/$distro/$arch_release/install"
+        mkdir -p "$driver_disk_dir/$topdir/linux/$distro/$arch_release/modules"
+
+        echo $"  copying update.tar.gz for $arch_release to disk image..."
+        cp -f "$driver_disk_dir/$topdir/$arch_release/install/update.tar.gz" "$driver_disk_dir/$topdir/linux/$distro/$arch_release/install/"
+
+        postkernels=
+        archtest=${arch_release/-*}
+        for ((i=0; i<${#kernelver[@]}; i++)); do
+            [[ ${arch[$i]} = ${archtest} ]] && postkernels="${postkernels} ${kernelver[$i]}"
+        done
+
+        if [[ ${postkernels} ]]; then
+            dstfile="$driver_disk_dir/$topdir/linux/$distro/$arch_release/install/update.post"
+            echo $"  creating update.post for $arch_release..."
+            (cat << EOF
 #!/bin/sh
 
 kernlist="${postkernels}"
 
 for kernel in \${kernlist}; do
     if [ -e /boot/System.map-\${kernel} ]; then
-	depmod -a -F /boot/System.map-\${kernel} \${kernel}
+    depmod -a -F /boot/System.map-\${kernel} \${kernel}
     fi
 done
 
 EOF
-		) > ${dstfile}
-		chmod a+x ${dstfile}
-	    fi
-
-	    if [[ -d $driver_disk_dir/$topdir/$arch_release/modules/ ]]; then
-		echo $"  copying kernel modules for installation kernel to disk image..."
-		cp -f $driver_disk_dir/$topdir/$arch_release/modules/* $driver_disk_dir/$topdir/linux/$distro/$arch_release/modules/ 2>/dev/null
-	    else
-		warn $"No kernel modules found for -default kernel."
-	    fi
-
-	    rm -fr "$driver_disk_dir/$topdir/$arch_release"
-	done
+            ) > ${dstfile}
+            chmod a+x ${dstfile}
+            fi
+
+            if [[ -d $driver_disk_dir/$topdir/$arch_release/modules/ ]]; then
+                echo $"  copying kernel modules for installation kernel to disk image..."
+                cp -f $driver_disk_dir/$topdir/$arch_release/modules/* $driver_disk_dir/$topdir/linux/$distro/$arch_release/modules/ 2>/dev/null
+            else
+                warn $"No kernel modules found for -default kernel."
+            fi
+
+            rm -fr "$driver_disk_dir/$topdir/$arch_release"
+        done
     done
 
     local dir
     if [[ ${deps[@]} ]]; then
-	for dir in "$driver_disk_dir/01/linux/$distro/"*"/modules"; do
-	    for dep in "${deps[@]}"; do
-		echo $dep >> "$dir/module.order"
-	    done
-	done
+        for dir in "$driver_disk_dir/01/linux/$distro/"*"/modules"; do
+            for dep in "${deps[@]}"; do
+                echo $dep >> "$dir/module.order"
+            done
+        done
     fi
 
     # FIXME: add suse-equivalent rpms/ directory, copy in KMP RPMs, run createrepo --pretty
@@ -2309,33 +2462,33 @@ make_ubuntu_driver_disk()
 
     local tempdir=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
 
-   # Check that the dh_make command is present
-   if ! which dpkg-deb >/dev/null 2>&1 ; then
-	die 1 $"dpkg-deb not present." \
-	    $"Install the dpkg-dev package."
-   fi
-
-   local i
-   for ((i=0; i < ${#kernelver[@]}; i++)); do
-      set_module_suffix "${kernelver[$i]}"
-      # Driver disks only recognize i386 as package arch
-      local karch=${arch[$i]/i?86/i386}
-      local kvers=${kernelver[$i]/-/_}; kvers=${kvers%%_*}
-       # ubuntu-drivers/<kver>/*_<debarch>.deb
-      local dd_prefix="ubuntu-drivers/$kvers"
-      local dd_suffix="_${karch}.deb"
-      maybe_build_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}" || {
-	  rm -rf "$tempdir"
-	  die 5 $"Unable to build $module/$module_version for Ubuntu driver disk."
-      }
-      mkdir -p "$tempdir/$dd_prefix"
-      local deb_dir="$tempdir/$dd_prefix/debian"
-      local deb_lib_dir="$deb_dir/lib/modules/${kernelver[$i]}/updates/dkms"
-      mkdir -p "$deb_lib_dir"
-      cp "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/"*"$module_suffix" "$deb_lib_dir"
-      pushd "$deb_dir" > /dev/null 2>&1
-      mkdir DEBIAN
-      cat > DEBIAN/control <<EOF
+    # Check that the dh_make command is present
+    if ! which dpkg-deb >/dev/null 2>&1 ; then
+        die 1 $"dpkg-deb not present." \
+            $"Install the dpkg-dev package."
+    fi
+
+    local i
+    for ((i=0; i < ${#kernelver[@]}; i++)); do
+        set_module_suffix "${kernelver[$i]}"
+        # Driver disks only recognize i386 as package arch
+        local karch=${arch[$i]/i?86/i386}
+        local kvers=${kernelver[$i]/-/_}; kvers=${kvers%%_*}
+        # ubuntu-drivers/<kver>/*_<debarch>.deb
+        local dd_prefix="ubuntu-drivers/$kvers"
+        local dd_suffix="_${karch}.deb"
+        maybe_build_module "$module" "$module_version" "${kernelver[$i]}" "${arch[$i]}" || {
+            rm -rf "$tempdir"
+            die 5 $"Unable to build $module/$module_version for Ubuntu driver disk."
+        }
+        mkdir -p "$tempdir/$dd_prefix"
+        local deb_dir="$tempdir/$dd_prefix/debian"
+        local deb_lib_dir="$deb_dir/lib/modules/${kernelver[$i]}/updates/dkms"
+        mkdir -p "$deb_lib_dir"
+        cp "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}/module/"*"$module_suffix" "$deb_lib_dir"
+        pushd "$deb_dir" > /dev/null 2>&1
+        mkdir DEBIAN
+        cat > DEBIAN/control <<EOF
 Package: ${module}-modules-${kernelver[$i]}
 Version: ${module_version}-1
 Section: misc
@@ -2387,10 +2540,10 @@ make_tarball()
 
     # Check for dkms_dbversion
     if ! [[ -e $dkms_tree/dkms_dbversion ]]; then
-	echo $"" >&2
-	echo $"Could not find the file $dkms_tree/dkms_dbversion." >&2
-	echo $"Creating w/ default contents." >&2
-	echo "2.0.0" > $dkms_tree/dkms_dbversion
+        echo $"" >&2
+        echo $"Could not find the file $dkms_tree/dkms_dbversion." >&2
+        echo $"Creating w/ default contents." >&2
+        echo "2.0.0" > $dkms_tree/dkms_dbversion
     fi
 
     # Read the conf file
@@ -2400,26 +2553,26 @@ make_tarball()
     mkdir -p $temp_dir_name/dkms_main_tree
 
     if [[ $source_only ]]; then
-	kernel_version_list="source-only"
+    kernel_version_list="source-only"
     else
-	local i
-	for ((i=0; i<${#kernelver[@]}; i++)); do
-	    if ! [[ -d $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]} ]]; then
-		rm -rf "$temp_dir_name" 2>/dev/null
-		die 6  $"No modules built for ${kernelver[$i]} (${arch[$i]})." \
-		    $"Modules must already be in the built state before using mktarball."
-	    fi
-
-	    set_module_suffix "${kernelver[$i]}"
-
-	    echo "Marking modules for ${kernelver[$i]} (${arch[$i]}) for archiving..."
-	    if [[ ! $kernel_version_list ]]; then
-		kernel_version_list="kernel${kernelver[$i]}-${arch[$i]}"
-	    else
-		kernel_version_list="${kernel_version_list}-kernel${kernelver[$i]}-${arch[$i]}"
-	    fi
-	    mkdir -p "$temp_dir_name/dkms_main_tree/${kernelver[$i]}/${arch[$i]}"
-	    cp -rf "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}" "$temp_dir_name/dkms_main_tree/${kernelver[$i]}"
+    local i
+    for ((i=0; i<${#kernelver[@]}; i++)); do
+        if ! [[ -d $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]} ]]; then
+            rm -rf "$temp_dir_name" 2>/dev/null
+            die 6  $"No modules built for ${kernelver[$i]} (${arch[$i]})." \
+                $"Modules must already be in the built state before using mktarball."
+        fi
+
+        set_module_suffix "${kernelver[$i]}"
+
+        echo "Marking modules for ${kernelver[$i]} (${arch[$i]}) for archiving..."
+        if [[ ! $kernel_version_list ]]; then
+            kernel_version_list="kernel${kernelver[$i]}-${arch[$i]}"
+        else
+            kernel_version_list="${kernel_version_list}-kernel${kernelver[$i]}-${arch[$i]}"
+        fi
+        mkdir -p "$temp_dir_name/dkms_main_tree/${kernelver[$i]}/${arch[$i]}"
+        cp -rf "$dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]}" "$temp_dir_name/dkms_main_tree/${kernelver[$i]}"
     done
     fi
 
@@ -2428,22 +2581,22 @@ make_tarball()
 
     # Copy the source_tree or make special binaries-only structure
     if [[ $binaries_only ]]; then
-	echo $""
-	echo $"Creating tarball structure to specifically accomodate binaries."
-	mkdir $temp_dir_name/dkms_binaries_only
-	echo "$module" > $temp_dir_name/dkms_binaries_only/PACKAGE_NAME
-	echo "$module_version" > $temp_dir_name/dkms_binaries_only/PACKAGE_VERSION
-	[[ ! $conf ]] && conf="$dkms_tree/$module/$module_version/source/dkms.conf"
-	cp -f $conf $temp_dir_name/dkms_binaries_only/ 2>/dev/null
+        echo $""
+        echo $"Creating tarball structure to specifically accomodate binaries."
+        mkdir $temp_dir_name/dkms_binaries_only
+        echo "$module" > $temp_dir_name/dkms_binaries_only/PACKAGE_NAME
+        echo "$module_version" > $temp_dir_name/dkms_binaries_only/PACKAGE_VERSION
+        [[ ! $conf ]] && conf="$dkms_tree/$module/$module_version/source/dkms.conf"
+        cp -f $conf $temp_dir_name/dkms_binaries_only/ 2>/dev/null
     else
-	echo $""
-	echo $"Marking $dkms_tree/$module/$module_version/source for archiving..."
-	mkdir -p $temp_dir_name/dkms_source_tree
-	cp -rf $dkms_tree/$module/$module_version/source/* $temp_dir_name/dkms_source_tree
+        echo $""
+        echo $"Marking $dkms_tree/$module/$module_version/source for archiving..."
+        mkdir -p $temp_dir_name/dkms_source_tree
+        cp -rf $dkms_tree/$module/$module_version/source/* $temp_dir_name/dkms_source_tree
     fi
 
     if (( $(echo $kernel_version_list | wc -m | awk {'print $1'}) > 200 )); then
-	kernel_version_list="manykernels"
+        kernel_version_list="manykernels"
     fi
 
     local tarball_name="$module-$module_version-$kernel_version_list.dkms.tar.gz"
@@ -2451,16 +2604,16 @@ make_tarball()
 
     # Die if we will not be able to create the tarball due to permissions.
     if [[ $archive_location ]]; then
-	tarball_name="${archive_location##*/}"
+        tarball_name="${archive_location##*/}"
         if [[ ${archive_location%/*} != $archive_location && \
             -d ${archive_location%/*} && -w ${archive_location%/*} ]]; then
             tarball_dest="${archive_location%/*}"
         elif [[ ${archive_location%/*} != $archive_location ]] && ! mkdir -p $tarball_dest; then
-	    die 9 $"Will not be able to create $archive_location due to a permissions problem."
-	fi
+            die 9 $"Will not be able to create $archive_location due to a permissions problem."
+        fi
     fi
     if [ ! -d $tarball_dest ]; then
-	mkdir -p "$dkms_tree/$module/$module_version/tarball/"
+        mkdir -p "$dkms_tree/$module/$module_version/tarball/"
     fi
 
     echo $""
@@ -2472,19 +2625,25 @@ make_tarball()
     # Make the tarball
     cd $temp_dir_name
     if tar -cf $temp_dir_name/$tarball_name ./* 2>/dev/null; then
-	cd - >/dev/null
-	echo $""
-	mv -f "$temp_dir_name/$tarball_name" "$tarball_dest/$tarball_name"
-	rm -rf $temp_dir_name
+        cd - >/dev/null
+        echo $""
+        mv -f "$temp_dir_name/$tarball_name" "$tarball_dest/$tarball_name"
+        rm -rf $temp_dir_name
     else
-	cd - >/dev/null
-	rm -rf $temp_dir_name
-	die 6 $"Failed to make tarball."
+        cd - >/dev/null
+        rm -rf $temp_dir_name
+        die 6 $"Failed to make tarball."
     fi
     case $tarball_ext in
-	gz) gzip -9 "$tarball_dest/$tarball_name";;
-	bz2) bzip2 -9 "$tarball_dest/$tarball_name";;
-	xz) xz -9 "$tarball_dest/$tarball_name";;
+        gz)
+            gzip --force -9 "$tarball_dest/$tarball_name"
+            ;;
+        bz2)
+            bzip2 --force -9 "$tarball_dest/$tarball_name"
+            ;;
+        xz)
+            xz --force -9 "$tarball_dest/$tarball_name"
+            ;;
     esac
     echo $""
     echo $"DKMS: mktarball completed."
@@ -2504,7 +2663,7 @@ load_tarball()
 {
     # Error out if $archive_location does not exist
     if [[ ! -e $archive_location ]]; then
-	die 2 $"$archive_location does not exist."
+        die 2 $"$archive_location does not exist."
     fi
 
     # If it is an .rpm file. install it with rpm, run an autoinstall, and then exit.
@@ -2522,13 +2681,19 @@ load_tarball()
     # Note that this does not depend on the extensions being correct.
     local tar_options=""
     for xpand in gzip bzip xz; do
-	$xpand -t $archive_location 2>/dev/null || continue
-	case $xpand in
-	    gzip) tar_options=z;;
-	    bzip2) tar_options=j;;
-	    xz) tar_options=J;;
-	esac
-	break
+        $xpand -t $archive_location 2>/dev/null || continue
+        case $xpand in
+            gzip)
+                tar_options=z
+                ;;
+            bzip2)
+                tar_options=j
+                ;;
+            xz)
+                tar_options=J
+                ;;
+        esac
+        break
     done
 
     # Untar it into $tmp_location
@@ -2537,16 +2702,16 @@ load_tarball()
     tar -${tar_options}xf $archive_location -C $temp_dir_name
 
     if [[ ! $temp_dir_name/dkms_main_tree ]]; then
-	# Tarball was not generated from mktarball.
-	# Just find the dkms.conf file and load the source.
-	conf=$(find $temp_dir_name/ -name dkms.conf 2>/dev/null | head -n 1)
-	if [[ ! $conf ]]; then
-	    rm -rf $temp_dir_name
-	    die 3 $"Tarball does not appear to be a correctly formed" \
-		$"DKMS archive. No dkms.conf found within it."
-	fi
-	add_source_tree "${conf%dkms.conf}"
-	return
+    # Tarball was not generated from mktarball.
+    # Just find the dkms.conf file and load the source.
+    conf=$(find $temp_dir_name/ -name dkms.conf 2>/dev/null | head -n 1)
+    if [[ ! $conf ]]; then
+        rm -rf $temp_dir_name
+        die 3 $"Tarball does not appear to be a correctly formed" \
+            $"DKMS archive. No dkms.conf found within it."
+    fi
+    add_source_tree "${conf%dkms.conf}"
+    return
     fi
 
     # Check that dkms_dbversion is not a future version
@@ -2555,76 +2720,78 @@ load_tarball()
     # the structure of the tarball.
     db_from_tarball=$(cat $temp_dir_name/dkms_main_tree/dkms_dbversion 2>/dev/null)
     db_from_dkms=$(cat $dkms_tree/dkms_dbversion 2>/dev/null)
-    if [[ $db_from_tarball && $db_from_dkms && \
-	$(VER "$db_from_tarball") > $(VER "$db_from_dkms") ]]; then
-	die 9 \
-	    $"The tarball you are trying to load indicates it is database version" \
-	    $"$db_from_tarball.  This version of DKMS only supports $db_from_dkms or lower."
+    if [[ $db_from_tarball && $db_from_dkms && $(VER "$db_from_tarball") > $(VER "$db_from_dkms") ]]; then
+        die 9 \
+            $"The tarball you are trying to load indicates it is database version" \
+            $"$db_from_tarball.  This version of DKMS only supports $db_from_dkms or lower."
     fi
 
     # Make sure its a sane tarball. Sane ones will have one of the two
     # directories we test for.
     for loc in dkms_source_tree dkms_binaries_only ''; do
-	if [[ ! $loc ]]; then
-	    die 7 $"No valid dkms.conf in dkms_source_tree or dkms_binaries_only." \
-		$"$archive_location is not a valid DKMS tarball."
-	fi
-	local conf="$temp_dir_name/$loc/dkms.conf"
-	[[ -f $conf ]] || continue
-	if ! get_pkginfo_from_conf "$conf"; then
-	    echo >&2
-	    echo $"Malformed dkms.conf, refusing to load." >&2
-	    continue
-	fi
-	if is_module_added "$PACKAGE_NAME" "$PACKAGE_VERSION" && \
-	    [[ ! $force ]]; then
-	    die 8  $"$PACKAGE_NAME-$PACKAGE_VERSION is already added!" \
-		$"Aborting."
-	fi
-	module="$PACKAGE_NAME"; module_version="$PACKAGE_VERSION"
-	echo $""
-	echo $"Loading tarball for $module-$module_version"
-	case $loc in
-	    dkms_source_tree)
-		add_source_tree "$temp_dir_name/dkms_source_tree";;
-	    dkms_binaries_only)
-		#if there is a source tree on the system already, don't build a binaries stub
-		if [[ ! -d $source_tree/$module-$module_version ]]; then
-			echo $"Creating $dkms_tree/$module/$module_version/source"
-			mkdir -p "$dkms_tree/$module/$module_version/source"
-			echo $"Copying dkms.conf to $dkms_tree/$module/$module_version/source..."
-			cp -rf "$temp_dir_name/dkms_binaries_only/dkms.conf" "$dkms_tree/$module/$module_version/source"
-		fi;;
-	    *)  die 8 $"$FUNCNAME:$LINENO: Cannot happen." \
-		$"Report this error to dkms-devel at dell.com";;
-	esac
-	break
+    if [[ ! $loc ]]; then
+        die 7 $"No valid dkms.conf in dkms_source_tree or dkms_binaries_only." \
+            $"$archive_location is not a valid DKMS tarball."
+    fi
+    local conf="$temp_dir_name/$loc/dkms.conf"
+    [[ -f $conf ]] || continue
+    if ! get_pkginfo_from_conf "$conf"; then
+        echo >&2
+        echo $"Malformed dkms.conf, refusing to load." >&2
+        continue
+    fi
+    if is_module_added "$PACKAGE_NAME" "$PACKAGE_VERSION" && \
+        [[ ! $force ]]; then
+        die 8  $"$PACKAGE_NAME-$PACKAGE_VERSION is already added!" \
+        $"Aborting."
+    fi
+    module="$PACKAGE_NAME"; module_version="$PACKAGE_VERSION"
+    echo $""
+    echo $"Loading tarball for $module-$module_version"
+    case $loc in
+        dkms_source_tree)
+            add_source_tree "$temp_dir_name/dkms_source_tree"
+            ;;
+        dkms_binaries_only)
+            #if there is a source tree on the system already, don't build a binaries stub
+            if [[ ! -d $source_tree/$module-$module_version ]]; then
+                echo $"Creating $dkms_tree/$module/$module_version/source"
+                mkdir -p "$dkms_tree/$module/$module_version/source"
+                echo $"Copying dkms.conf to $dkms_tree/$module/$module_version/source..."
+                cp -rf "$temp_dir_name/dkms_binaries_only/dkms.conf" "$dkms_tree/$module/$module_version/source"
+            fi
+            ;;
+        *)
+            die 8 $"$FUNCNAME:$LINENO: Cannot happen." \
+                $"Report this error to dkms-devel at dell.com";;
+    esac
+    break
     done
 
-    # at this point, the source has been copied to the appropriate location
+    # At this point, the source has been copied to the appropriate location
     # and registered with dkms, or a binary-only config has been noted.
     # Now, add any included precompiled modules.
 
     # Is tarball from before DKMS 2.0 (prior to arch support)
     if [[ ! -e $temp_dir_name/dkms_main_tree/dkms_dbversion ]]; then
-	[[ $loc = dkms_binaries_only ]] && rm -rf "$dkms_tree/$module/$module_version/source"
-	die 10 $" This tarball was created with dkms < 2.0 and contains" \
-	    $"no arch info. DKMS is refusing to install precompiled modules."
+        [[ $loc = dkms_binaries_only ]] && rm -rf "$dkms_tree/$module/$module_version/source"
+        die 10 $" This tarball was created with dkms < 2.0 and contains" \
+            $"no arch info. DKMS is refusing to install precompiled modules."
     fi
 
     # Load precompiled modules.
     for directory in "$temp_dir_name/dkms_main_tree"/*/*; do
-	[[ -d $directory ]] || continue
-	kernel_arch_to_load=${directory/*dkms_main_tree\/}
-	dkms_dir_location="$dkms_tree/$module/$module_version/$kernel_arch_to_load"
-	if [[ -d $dkms_dir_location && ! $force ]]; then
-	    warn $"$dkms_dir_location already exists.  Skipping..."
-	else
-	    echo $"Loading $dkms_dir_location..."
-	    rm -rf $dkms_dir_location
-	    mkdir -p $dkms_dir_location
-	    cp -rf $directory/* $dkms_dir_location/
-	fi
+        [[ -d $directory ]] || continue
+        kernel_arch_to_load=${directory/*dkms_main_tree\/}
+        dkms_dir_location="$dkms_tree/$module/$module_version/$kernel_arch_to_load"
+        if [[ -d $dkms_dir_location && ! $force ]]; then
+            warn $"$dkms_dir_location already exists.  Skipping..."
+        else
+            echo $"Loading $dkms_dir_location..."
+            rm -rf $dkms_dir_location
+            mkdir -p $dkms_dir_location
+            cp -rf $directory/* $dkms_dir_location/
+        fi
     done
 
     echo $""
@@ -2638,14 +2805,14 @@ run_match()
 
     # Error if $template_kernel is unset
     if [[ ! $template_kernel ]]; then
-	die 1 $"Invalid number of parameters passed." \
-	    $"Usage: match --templatekernel=<kernel-version> -k <kernel-version>" \
-	    $"   or: match --templatekernel=<kernel-version> -k <kernel-version> <module>"
+        die 1 $"Invalid number of parameters passed." \
+            $"Usage: match --templatekernel=<kernel-version> -k <kernel-version>" \
+            $"   or: match --templatekernel=<kernel-version> -k <kernel-version> <module>"
     fi
 
     # Error out if $template_kernel = $kernel_version
     if [[ $template_kernel = $kernelver ]]; then
-	die 2 $"The templatekernel and the specified kernel version are the same."
+        die 2 $"The templatekernel and the specified kernel version are the same."
     fi
 
     # Read in the status of template_kernel
@@ -2653,11 +2820,11 @@ run_match()
 
     # If $module is set, grep the status only for that module
     if [[ $module ]]; then
-	# Make sure that its installed in the first place
-	if ! [[ -d $dkms_tree/$module/ ]]; then
-	    die 3 $"The module: $module is not located in the DKMS tree."
-	fi
-	template_kernel_status=$(echo "$template_kernel_status" | grep "^$module,")
+        # Make sure that its installed in the first place
+        if ! [[ -d $dkms_tree/$module/ ]]; then
+            die 3 $"The module: $module is not located in the DKMS tree."
+        fi
+        template_kernel_status=$(echo "$template_kernel_status" | grep "^$module,")
     fi
 
     echo $""
@@ -2666,56 +2833,53 @@ run_match()
 
     # Prepare the kernel just once but only if there is actual work to do
     if [[ ! $template_kernel_status ]]; then
-	echo $""
-	echo $"There is nothing to be done for this match."
+        echo $""
+        echo $"There is nothing to be done for this match."
     else
-	prepare_kernel "$kernelver" "$arch"
-
-	# Iterate over the kernel_status and match kernel to the template_kernel
-	while read template_line; do
-	    template_module=`echo "$template_line" | awk {'print $1'} | sed 's/,$//'`
-	    template_version=`echo "$template_line" | awk {'print $2'} | sed 's/,$//'`
-
-	    # Print out a match header
-	    echo $""
-	    echo $"---- Match Beginning ----"
-	    echo $"Module:  $template_module"
-	    echo $"Version: $template_version"
-	    echo $"-------------------------"
-
-	    # Figure out what to do from here
-	    if show_status "$template_module" "$template_version" "$kernelver" "$arch" 2>/dev/null | grep -q ": installed"; then
-		echo $""
-		echo $"This module/version combo is already installed.  Nothing to be done."
-	    elif show_status "$template_module" "$template_version" "$kernelver" "$arch" 2>/dev/null | grep -q ": built"; then
-		echo $""
-		echo $"This module/version combo is built.  Installing it:"
-		module="$template_module"
-		module_version="$template_version"
-		install_module
-	    else
-		echo $""
-		echo $"Building & Installing this module/version:"
-		module="$template_module"
-		module_version="$template_version"
-		build_module
-		install_module
-	    fi
-	done < <(echo "$template_kernel_status")
-
-	# Clean up the kernel tree
-	if [[ ! ( $(VER $kernelver) < $(VER 2.6.6) ) && \
-	    -d "$kernel_source_dir" && \
-	    ! -h "$kernel_source_dir" && \
-	    -z "$ksourcedir_fromcli" ]]; then
-	    echo $"Kernel cleanup unnecessary for this kernel.  Skipping..."
-	elif [[ ! $no_clean_kernel ]]; then
-	    cd "$kernel_source_dir"
-	    [[ $kerneldoth_contents ]] || invoke_command "make mrproper" "cleaning kernel tree (make mrproper)" background
-	    [[ $config_contents ]] && echo "$config_contents" > .config
-	    [[ $kerneldoth_contents ]] && echo "$kerneldoth_contents" > /boot/kernel.h
-	    cd - >/dev/null
-	fi
+    prepare_kernel "$kernelver" "$arch"
+
+    # Iterate over the kernel_status and match kernel to the template_kernel
+    while read template_line; do
+        template_module=`echo "$template_line" | awk {'print $1'} | sed 's/,$//'`
+        template_version=`echo "$template_line" | awk {'print $2'} | sed 's/,$//'`
+
+        # Print out a match header
+        echo $""
+        echo $"---- Match Beginning ----"
+        echo $"Module:  $template_module"
+        echo $"Version: $template_version"
+        echo $"-------------------------"
+
+        # Figure out what to do from here
+        if show_status "$template_module" "$template_version" "$kernelver" "$arch" 2>/dev/null | grep -q ": installed"; then
+            echo $""
+            echo $"This module/version combo is already installed.  Nothing to be done."
+        elif show_status "$template_module" "$template_version" "$kernelver" "$arch" 2>/dev/null | grep -q ": built"; then
+            echo $""
+            echo $"This module/version combo is built.  Installing it:"
+            module="$template_module"
+            module_version="$template_version"
+            install_module
+        else
+        echo $""
+        echo $"Building & Installing this module/version:"
+        module="$template_module"
+        module_version="$template_version"
+        build_module
+        install_module
+        fi
+    done < <(echo "$template_kernel_status")
+
+    # Clean up the kernel tree
+    if [[ ! ( $(VER $kernelver) < $(VER 2.6.6) ) && -d "$kernel_source_dir" && ! -h "$kernel_source_dir" && -z "$ksourcedir_fromcli" ]]; then
+        echo $"Kernel cleanup unnecessary for this kernel.  Skipping..."
+    elif [[ ! $no_clean_kernel ]]; then
+        cd "$kernel_source_dir"
+        [[ $kerneldoth_contents ]] || invoke_command "make mrproper" "cleaning kernel tree (make mrproper)" background
+        [[ $config_contents ]] && echo "$config_contents" > .config
+        [[ $kerneldoth_contents ]] && echo "$kerneldoth_contents" > /boot/kernel.h
+        cd - >/dev/null
+    fi
     fi
 
     # Done
@@ -2729,8 +2893,8 @@ make_rpm()
 
     # Check that the rpmbuild command is present
     if ! which rpmbuild >/dev/null 2>&1 ; then
-	die 1 $"rpmbuild not present." \
-	    $"Install the rpm-build package."
+        die 1 $"rpmbuild not present." \
+            $"Install the rpm-build package."
     fi
 
     # Read the conf file
@@ -2740,34 +2904,33 @@ make_rpm()
 
     echo $""
     local sp
-    for sp in "$dkms_tree/$module/$module_version/source/$module-dkms-mkrpm.spec" \
-	"/etc/dkms/template-dkms-mkrpm.spec"; do
-	[[ -e $sp ]] || continue
-	SPECFILE="$sp"
-	break
+    for sp in "$dkms_tree/$module/$module_version/source/$module-dkms-mkrpm.spec" "/etc/dkms/template-dkms-mkrpm.spec"; do
+        [[ -e $sp ]] || continue
+        SPECFILE="$sp"
+        break
     done
     if [[ ! $SPECFILE ]]; then
-	die 5 $"Cannot find $sp which is needed by" \
-	    $"DKMS in order use mkrpm."
+        die 5 $"Cannot find $sp which is needed by" \
+            $"DKMS in order use mkrpm."
     fi
 
     # Run a dkms mktarball for use in the rpm
     local mktarball_line
     if [[ ! $source_only || $binaries_only ]]; then
-	mktarball_line="--binaries-only"
-	local i
-	echo $""
-	for ((i=0; i<${#kernelver[@]}; i++)); do
-	    if ! [[ -d $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]} ]]; then
-	    die 5 $"You do not seem to have $module $module_version built for" \
-		$"${kernelver[$i]} (${arch[$i]}).  All modules must be in" \
-		$"the built state before you can use mkrpm."
-	    fi
-	    echo $"Marking ${kernelver[$i]} (${arch[$i]}) for RPM..."
-	    mktarball_line="-k ${kernelver[$i]} -a ${arch[$i]} $mktarball_line"
-	done
+        mktarball_line="--binaries-only"
+        local i
+        echo $""
+        for ((i=0; i<${#kernelver[@]}; i++)); do
+            if ! [[ -d $dkms_tree/$module/$module_version/${kernelver[$i]}/${arch[$i]} ]]; then
+                die 5 $"You do not seem to have $module $module_version built for" \
+                    $"${kernelver[$i]} (${arch[$i]}).  All modules must be in" \
+                    $"the built state before you can use mkrpm."
+            fi
+            echo $"Marking ${kernelver[$i]} (${arch[$i]}) for RPM..."
+            mktarball_line="-k ${kernelver[$i]} -a ${arch[$i]} $mktarball_line"
+        done
     else
-	mktarball_line="none"
+        mktarball_line="none"
     fi
 
     local temp_dir_name=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
@@ -2775,26 +2938,26 @@ make_rpm()
     mkdir -p ${temp_dir_name}/{BUILD,RPMS,SRPMS,SPECS,SOURCES}
     cp ${SPECFILE} ${temp_dir_name}/SPECS/dkms_mkrpm.spec
 
-    #if using legacy mode, install common postinst
+    # If using legacy mode, install common postinst
     if ((legacy_postinst != 0)); then
-	invoke_command "cp '$PREFIX/usr/lib/dkms/common.postinst' '${temp_dir_name}/SOURCES'" "copying legacy postinstall template"
+        invoke_command "cp '$PREFIX/usr/lib/dkms/common.postinst' '${temp_dir_name}/SOURCES'" "copying legacy postinstall template"
     fi
 
-    #Copy in the source tree
+    # Copy in the source tree
     if [[ ! $binaries_only ]]; then
-	invoke_command "cp -Lpr '$dkms_tree/$module/$module_version/source' '${temp_dir_name}/SOURCES/$module-$module_version'" "Copying source tree"
+        invoke_command "cp -Lpr '$dkms_tree/$module/$module_version/source' '${temp_dir_name}/SOURCES/$module-$module_version'" "Copying source tree"
     fi
 
     if invoke_command "LC_ALL=C rpmbuild --define \"_topdir ${temp_dir_name}\" --define \"version $module_version\" --define \"module_name $module\" --define \"kernel_versions ${kernelver[*]}\" --define \"mktarball_line $mktarball_line\" --define \"__find_provides  /usr/lib/dkms/find-provides\" --define \"_use_internal_dependency_generator 0\" -ba ${temp_dir_name}/SPECS/dkms_mkrpm.spec > ${temp_dir_name}/rpmbuild.log 2>&1" "rpmbuild"; then
-	mkdir -p ${rpm_basedir}
-	cp -a ${temp_dir_name}/SRPMS/* ${temp_dir_name}/RPMS/*/* ${rpm_basedir}/
-	echo $""
-	cat ${temp_dir_name}/rpmbuild.log | grep ^Wrote | sed -e "s:${temp_dir_name}/:${rpm_basedir}/:" -e 's:SRPMS/::' -e 's:RPMS/.*/::'
-	echo $""
-	echo $"DKMS: mkrpm completed."
+        mkdir -p ${rpm_basedir}
+        cp -a ${temp_dir_name}/SRPMS/* ${temp_dir_name}/RPMS/*/* ${rpm_basedir}/
+        echo $""
+        cat ${temp_dir_name}/rpmbuild.log | grep ^Wrote | sed -e "s:${temp_dir_name}/:${rpm_basedir}/:" -e 's:SRPMS/::' -e 's:RPMS/.*/::'
+        echo $""
+        echo $"DKMS: mkrpm completed."
     else
-	cat ${temp_dir_name}/rpmbuild.log >&2
-	die 7 $"There was a problem creating your rpm."
+        cat ${temp_dir_name}/rpmbuild.log >&2
+        die 7 $"There was a problem creating your rpm."
     fi
     rm -rf $temp_dir_name
     trap > /dev/null 2>&1
@@ -2805,9 +2968,9 @@ preproc_file()
     local date_str="$(date -R)"
     echo "modifying $1..."
     sed -e "s/DEBIAN_PACKAGE/$debian_package/g" \
-	-e "s/MODULE_NAME/$module/g" \
-	-e "s/MODULE_VERSION/$module_version/g" \
-	-e "s/DATE_STAMP/$date_str/" "$1" > "$1.dkms-pp"
+        -e "s/MODULE_NAME/$module/g" \
+        -e "s/MODULE_VERSION/$module_version/g" \
+        -e "s/DATE_STAMP/$date_str/" "$1" > "$1.dkms-pp"
     mv "$1.dkms-pp" "$1"
 }
 
@@ -2817,37 +2980,43 @@ debian_install()
     local getroot  tmpfile i
     local -a packages=("$@")
     for ((i=0; i < ${#packages[@]}; i++)); do
-	dpkg-query -s "${packages[$i]}"| egrep -q '^Status:.* installed$' || continue
-	unset package[$i]
+        dpkg-query -s "${packages[$i]}"| egrep -q '^Status:.* installed$' || continue
+        unset package[$i]
     done
     # if they are already installed, we are OK.
     [[ ${package[@]} ]] || return
     if ((UID != 0)); then
-	# figure out how to get root
-	for getroot in su-to-root gksudo kdesu sudo; do
-	    which $getroot >/dev/null 2>&1 || continue
-	    case $getroot in
-		su-to-root) getroot="$getroot -c";;
-		gksudo) [[ $DISPLAY ]] || continue
-		    getroot="$getroot --description 'DKMS Debian package builder' ";;
-		kdesu) [[ $DISPLAY ]] || continue;;
-	    esac
-	    break
-	done
+        # figure out how to get root
+        for getroot in su-to-root gksudo kdesu sudo; do
+            which $getroot >/dev/null 2>&1 || continue
+            case $getroot in
+                su-to-root)
+                    getroot="$getroot -c"
+                    ;;
+                gksudo)
+                    [[ $DISPLAY ]] || continue
+                    getroot="$getroot --description 'DKMS Debian package builder' "
+                    ;;
+                kdesu)
+                    [[ $DISPLAY ]] || continue
+                    ;;
+            esac
+            break
+        done
     fi
     if [[ -x /usr/sbin/synaptic && $DISPLAY ]] && tmpfile=$(mktemp_or_die); then
-	# Pretty GUI install.
-	trap 'rm -f "$tmpfile"' EXIT
-	for ((i=0; i=${#packages[@]}; i++)); do
-	    [[ ${packages[$i]} ]] && echo "install ${packages[$i]}" >>$tmpfile
-	done
-	$getroot "sh -c '/usr/sbin/synaptic --set-selections --non-interactive --hide-main-window < $tmpfile'"
+        # Pretty GUI install.
+        trap 'rm -f "$tmpfile"' EXIT
+        for ((i=0; i=${#packages[@]}; i++)); do
+            [[ ${packages[$i]} ]] && echo "install ${packages[$i]}" >>$tmpfile
+        done
+        $getroot "sh -c '/usr/sbin/synaptic --set-selections --non-interactive --hide-main-window < $tmpfile'"
     else
-	$getroot apt-get -y install "${packages[@]}"
+        $getroot apt-get -y install "${packages[@]}"
     fi
     if (( $? != 0)); then
-	die 4 $"Missing ${packages[@]}" \
-	    $"and unable to install.  Please ask an admin to install for you."
+        die 4 $"Missing ${packages[@]}" \
+            $"and unable to install.  Please ask an admin to install for you."
     fi
 }
 
@@ -2866,87 +3035,87 @@ make_debian()
     read_conf_or_die "$kernelver" "$arch"
     debian_install fakeroot dpkg-dev debhelper
 
-    #skeleton to load templates from
+    # Skeleton to load templates from
     local system_mk="$dkms_tree/$module/$module_version/source/$module-dkms-mk${create_type}"
     local local_mk="/etc/dkms/template-dkms-mk${create_type}"
     if [[ -e ${system_mk} ]]; then
-	echo $"Using ${system_mk}"
-	DEBDIR=${system_mk}
+        echo $"Using ${system_mk}"
+        DEBDIR=${system_mk}
     elif [[ -e ${local_mk} ]]; then
-	echo $"Using ${local_mk}"
-	DEBDIR=${local_mk}
+        echo $"Using ${local_mk}"
+        DEBDIR=${local_mk}
     else
-	die 5 $"Cannot find ${local_mk} which is needed by" \
-	    $"DKMS in order to use mk${create_type}."
+        die 5 $"Cannot find ${local_mk} which is needed by" \
+            $"DKMS in order to use mk${create_type}."
     fi
 
-    #prepare build directory and copy template
+    # Prepare build directory and copy template
     local temp_dir=$(mktemp_or_die -d $tmp_location/dkms.XXXXXX)
     trap "rm -rf $temp_dir; delete_temporary_trees" EXIT HUP TERM
     local temp_dir_debian="$temp_dir/$debian_package-dkms-$module_version"
     invoke_command "cp -ar '$DEBDIR/' '$temp_dir_debian'" "copying template"
     pushd "$temp_dir_debian" > /dev/null 2>&1
     for file in debian/*; do
-	preproc_file "$file"
-	chmod 755 "$file"
+        preproc_file "$file"
+        chmod 755 "$file"
     done
     popd > /dev/null 2>&1
 
-     #if using legacy mode, install common postinst
+    # If using legacy mode, install common postinst
     if ((legacy_postinst != 0)); then
-	invoke_command "cp '$PREFIX/usr/lib/dkms/common.postinst' '$temp_dir_debian'" "copying legacy postinstall template"
+        invoke_command "cp '$PREFIX/usr/lib/dkms/common.postinst' '$temp_dir_debian'" "copying legacy postinstall template"
     fi
 
-    #Copy in the source tree
+    # Copy in the source tree
     if [[ ! $binaries_only ]]; then
-	invoke_command "cp -Lpr '$dkms_tree/$module/$module_version/source' '$temp_dir_debian/$module-$module_version'" "Copying source tree"
+        invoke_command "cp -Lpr '$dkms_tree/$module/$module_version/source' '$temp_dir_debian/$module-$module_version'" "Copying source tree"
     fi
 
-    #Only if we are shipping binary modules, make a .tgz for the deb
+    # Only if we are shipping binary modules, make a .tgz for the deb
     local archive_location="$dkms_tree/$module/$module_version/tarball/$module-$module_version.dkms.tar.gz"
     if [[ ! $source_only ]]; then
-	binaries_only="binaries-only"
-	invoke_command "make_tarball" "Gathering binaries"
-	if [[ -f $archive_location ]]; then
-	    invoke_command "cp '$archive_location' '$temp_dir_debian'" "Copying DKMS tarball into DKMS tree"
-	else
-	    die 12 $"Unable to find created tarball."
-	fi
+        binaries_only="binaries-only"
+        invoke_command "make_tarball" "Gathering binaries"
+        if [[ -f $archive_location ]]; then
+            invoke_command "cp '$archive_location' '$temp_dir_debian'" "Copying DKMS tarball into DKMS tree"
+        else
+            die 12 $"Unable to find created tarball."
+        fi
     fi
 
-    #calculate destination directory
+    # Calculate destination directory
     deb_basedir=$dkms_tree/$module/$module_version/${create_type}
     mkdir -p ${deb_basedir} >/dev/null 2>&1
 
-    #create deb
+    # Create deb
     pushd "$temp_dir_debian" > /dev/null 2>&1
     case "$create_type" in
-	dsc)
-	    invoke_command "dpkg-buildpackage -S -us -uc 1>/dev/null" "Building source package" || \
-		die 7 $"There was a problem creating your ${create_type}."
-	    echo $""
-	    echo $"DKMS: mk${create_type} completed."
-	    invoke_command "mv '$temp_dir/${debian_package}-dkms_${module_version}_source.changes' '$temp_dir/${debian_package}-dkms_${module_version}.dsc' '$temp_dir/${debian_package}-dkms_${module_version}.tar.gz' '$deb_basedir'" "Moving built files to $deb_basedir"
-	    ;;
-	deb)
-	    invoke_command "dpkg-buildpackage -rfakeroot -d -b -us -uc 1>/dev/null" "Building binary package" || \
-		die 7 $"There was a problem creating your ${create_type}."
-	    echo $""
-	    echo $"DKMS: mk${create_type} completed."
-	    invoke_command "mv '$temp_dir/${debian_package}-dkms_${module_version}_all.deb' '$deb_basedir'" "Moving built files to $deb_basedir"
-	    ;;
+    dsc)
+        invoke_command "dpkg-buildpackage -S -us -uc 1>/dev/null" "Building source package" || \
+            die 7 $"There was a problem creating your ${create_type}."
+        echo $""
+        echo $"DKMS: mk${create_type} completed."
+        invoke_command "mv '$temp_dir/${debian_package}-dkms_${module_version}_source.changes' '$temp_dir/${debian_package}-dkms_${module_version}.dsc' '$temp_dir/${debian_package}-dkms_${module_version}.tar.gz' '$deb_basedir'" "Moving built files to $deb_basedir"
+        ;;
+    deb)
+        invoke_command "dpkg-buildpackage -rfakeroot -d -b -us -uc 1>/dev/null" "Building binary package" || \
+            die 7 $"There was a problem creating your ${create_type}."
+        echo $""
+        echo $"DKMS: mk${create_type} completed."
+        invoke_command "mv '$temp_dir/${debian_package}-dkms_${module_version}_all.deb' '$deb_basedir'" "Moving built files to $deb_basedir"
+        ;;
     esac
     popd > /dev/null 2>&1
 
     if in_temporary_trees; then
-	echo "Copying built files to "`pwd`"/.." >&2
-	cp "${deb_basedir}/"* ..
+        echo "Copying built files to "`pwd`"/.." >&2
+        cp "${deb_basedir}/"* ..
     fi
 
-    #cleanup
+    # Cleanup
     invoke_command "rm $temp_dir -fr" "Cleaning up temporary files"
     delete_temporary_trees || \
-	die 7 $"There was a problem cleaning up temporary files."
+        die 7 $"There was a problem cleaning up temporary files."
 }
 
 make_common_test()
@@ -2960,8 +3129,8 @@ make_common_test()
 
     # Make sure that its installed in the first place
     [[ -d $dkms_tree/$module/$module_version ]] ||
-	die 3 $"The module/version combo: $module-$module_version" \
-	    $"is not located in the DKMS tree."
+        die 3 $"The module/version combo: $module-$module_version" \
+        $"is not located in the DKMS tree."
 }
 
 make_kmp_srpm()
@@ -2970,8 +3139,7 @@ make_kmp_srpm()
     trap 'rm -rf $temp_dir_name' EXIT HUP TERM
     mkdir -p $temp_dir_name/{BUILD,RPMS,SRPMS,SPECS,SOURCES}
     pushd "$dkms_tree/$module/$module_version" > /dev/null 2>&1
-    # want to change name of the top-level of the tarball
-    # from build to $module-$module_version
+    # Want to change name of the top-level of the tarball from build to $module-$module_version
     cp -lr build ${module}-${module_version}
     tar cvjf $temp_dir_name/SOURCES/${module}-${module_version}.tar.bz2 ${module}-${module_version} > /dev/null 2>&1
     rm -rf ${module}-${module_version}
@@ -2981,12 +3149,12 @@ make_kmp_srpm()
     grep ^Wrote $temp_dir_name/rpmbuild.log > /dev/null 2>&1
     local RC="$?"
     if ((RC == 0)); then
-	local kmp_basedir="$dkms_tree/$module/$module_version/rpm"
-	mkdir -p $kmp_basedir
-	RPMS=$(LANG=C cp -va ${temp_dir_name}/SRPMS/* $kmp_basedir | awk '{print $NF}')
+        local kmp_basedir="$dkms_tree/$module/$module_version/rpm"
+        mkdir -p $kmp_basedir
+        RPMS=$(LANG=C cp -va ${temp_dir_name}/SRPMS/* $kmp_basedir | awk '{print $NF}')
     else
-	echo $"rpmbuild error log:"
-	cat $temp_dir_name/rpmbuild.log
+        echo $"rpmbuild error log:"
+        cat $temp_dir_name/rpmbuild.log
     fi
     popd > /dev/null 2>&1
     rm -rf $temp_dir_name
@@ -2996,9 +3164,9 @@ make_kmp_srpm()
 
 report_build_problem()
 {
-    #If apport is on the system, files a build problem
-    if [ -x /usr/share/apport/apport ] && which python>/dev/null; then
-	python /usr/share/apport/package-hooks/dkms_packages.py -m $module -v $module_version -k ${kernelver[0]}
+    # If apport is on the system, files a build problem
+    if [ -x /usr/share/apport/apport ] && which python3 >/dev/null; then
+        python3 /usr/share/apport/package-hooks/dkms_packages.py -m $module -v $module_version -k ${kernelver[0]}
     fi
     die "$@"
 }
@@ -3012,12 +3180,12 @@ read_arg() {
     # $3 = arg parameter
     local rematch='^[^=]*=(.*)$'
     if [[ $2 =~ $rematch ]]; then
-	read "$1" <<< "${BASH_REMATCH[1]}"
+        read "$1" <<< "${BASH_REMATCH[1]}"
     else
-	read "$1" <<< "$3"
-	# There is no way to shift our callers args, so
-	# return 1 to indicate they should do it instead.
-	return 1
+        read "$1" <<< "$3"
+        # There is no way to shift our callers args, so
+        # return 1 to indicate they should do it instead.
+        return 1
     fi
 }
 
@@ -3028,10 +3196,10 @@ read_arg() {
 # they are all passed at the same time.
 parse_kernelarch(){
     if [[ $1 =~ $mv_re ]]; then
-	kernelver[${#kernelver[@]}]="${BASH_REMATCH[1]}"
-	arch[${#arch[@]}]="${BASH_REMATCH[2]}"
+        kernelver[${#kernelver[@]}]="${BASH_REMATCH[1]}"
+        arch[${#arch[@]}]="${BASH_REMATCH[2]}"
     else
-	kernelver[${#kernelver[@]}]="$1"
+        kernelver[${#kernelver[@]}]="$1"
     fi
 }
 
@@ -3043,10 +3211,10 @@ parse_kernelarch(){
 # commands on the commandline.
 parse_moduleversion(){
     if [[ $1 =~ $mv_re ]]; then
-	module="${BASH_REMATCH[1]}"
-	module_version="${BASH_REMATCH[2]}"
+        module="${BASH_REMATCH[1]}"
+        module_version="${BASH_REMATCH[2]}"
     else
-	module="$1"
+        module="$1"
     fi
 }
 
@@ -3061,26 +3229,32 @@ check_root() {
 add_source_tree() {
     local from=$(readlink -f $1)
     if ! [[ $from && -f $from/dkms.conf ]]; then
-	die 9 $"$1 must contain a dkms.conf file!"
+        die 9 $"$1 must contain a dkms.conf file!"
     fi
     check_root
     setup_kernels_arches
     if ! get_pkginfo_from_conf "$from/dkms.conf" ; then
-	die 10 $"Malformed dkms.conf file. Cannot load source tree."
+        die 10 $"Malformed dkms.conf file. Cannot load source tree."
     fi
     module="$PACKAGE_NAME"
     module_version="$PACKAGE_VERSION"
     if [[ $force && -d $source_tree/$module-$module_version ]]; then
-	echo >&2
-	echo $"Forcing install of $module-$module_version"
-	rm -rf "$source_tree/$module-$module_version"
+        echo >&2
+        echo $"Forcing install of $module-$module_version"
+        rm -rf "$source_tree/$module-$module_version"
     fi
 
     # We are already installed, just return.
     case $from in
-	"$source_tree/$module-$module_version") return;;
-	"$dkms_tree/$module/$version/source") return;;
-	"$dkms_tree/$module/$version/build") return;;
+        "$source_tree/$module-$module_version")
+            return
+            ;;
+        "$dkms_tree/$module/$version/source")
+            return
+            ;;
+        "$dkms_tree/$module/$version/build")
+            return
+            ;;
     esac
     mkdir -p "$source_tree/$module-$module_version"
     cp -fr "$from"/* "$source_tree/$module-$module_version"
@@ -3095,14 +3269,14 @@ make_kmp()
 
     echo $""
     if [[ $specfile && -e $dkms_tree/$module/$module_version/source/$specfile ]]; then
-	echo $"Using $dkms_tree/$module/$module_version/source/$specfile"
-	SPECFILE="$dkms_tree/$module/$module_version/source/$specfile"
+        echo $"Using $dkms_tree/$module/$module_version/source/$specfile"
+        SPECFILE="$dkms_tree/$module/$module_version/source/$specfile"
     elif [[ -e $dkms_tree/$module/$module_version/source/$module-kmp.spec ]]; then
-	echo $"Using $dkms_tree/$module/$module_version/source/$module-kmp.spec"
-	SPECFILE="$dkms_tree/$module/$module_version/source/$module-kmp.spec"
+        echo $"Using $dkms_tree/$module/$module_version/source/$module-kmp.spec"
+        SPECFILE="$dkms_tree/$module/$module_version/source/$module-kmp.spec"
     else
-	die 5 $"Cannot find a suitable spec file which is needed by" \
-	    $"DKMS in order use mkkmp.  Please specify --spec=specfile."
+        die 5 $"Cannot find a suitable spec file which is needed by" \
+            $"DKMS in order use mkkmp.  Please specify --spec=specfile."
     fi
 
     prepare_build
@@ -3111,12 +3285,12 @@ make_kmp()
     clean_build
 
     if ((RC == 0)); then
-	echo $""
-	echo $"KMP SRPM location: $RPMS"
-	echo $""
-	echo $"DKMS: mkkmp completed."
+        echo $""
+        echo $"KMP SRPM location: $RPMS"
+        echo $""
+        echo $"DKMS: mkkmp completed."
     else
-	die 7 $"There was a problem creating your KMP source rpm."
+        die 7 $"There was a problem creating your KMP source rpm."
     fi
     # FIXME: hand SRPM to mock or build system to build
 }
@@ -3127,41 +3301,101 @@ make_kmp()
 # by hand if dkms_autoinstaller is not used.
 autoinstall() {
     local status mv mvka m v k a last_v last_m tenative
+    local install_count next_depends
     local -a to_install=()
+    local -a next_install=()
+    local -a installed_modules=()
+    local -A build_depends=()
+
     # Walk through our list of installed and built modules, and create
     # a list of modules that need to be reinstalled.
+    # Assuming all versions of same module to be parsed sequentially.
     while read status mvka; do
         IFS='/' read m v k a <<< "$mvka"
         [[ ! $last_m ]] && last_m="$m"
+        # autoinstall previous module's latest version after its deps.
+        if [[ $last_m != $m ]]; then
+            if [[ $tenative ]]; then
+                to_install[${#to_install[@]}]="$tenative"
+                build_depends["$last_m"]="${BUILD_DEPENDS[@]}"
+            fi
+            last_m="$m"
+            last_v='0'
+            tenative=''
+        fi
         # If the module is already installed or weak-installed, skip it.
-        _is_module_installed "$m" "$v" "$kernelver" "$arch" && continue
-        module_status_weak "$m" "$v" "$kernelver" "$arch" >/dev/null && continue
+        if _is_module_installed "$m" "$v" "$kernelver" "$arch"; then
+            installed_modules[${#installed_modules[@]}]="$m"
+            continue
+        fi
+        if module_status_weak "$m" "$v" "$kernelver" "$arch" >/dev/null; then
+            installed_modules[${#installed_modules[@]}]="$m"
+            continue
+        fi
         # if the module does not want to be autoinstalled, skip it.
         read_conf_or_die "$k" "$a" "$dkms_tree/$m/$v/source/dkms.conf"
         if [[ ! $AUTOINSTALL ]]; then
             continue
-        # otherwise, only autoinstall the latest version we have hanging around.
-        elif [[ $last_m != $m ]]; then
-            last_m="$m"
-            last_v='0'
-            [[ $tenative ]] && to_install[${#to_install[@]}]="$tenative"
-            tenative=''
         fi
+        # otherwise, only autoinstall the latest version we have hanging around.
         if [[ ($(VER $v) > $(VER $last_v)) ]]; then
             last_v="$v"
             tenative="$m/$v"
         fi
     done < <(module_status)
+
     # We may have exited the loop with $tenative set.  If it is,
     # it contains something that should be updated.
-    [[ $tenative ]] && to_install[${#to_install[@]}]="$tenative"
+    if [[ $tenative ]]; then
+        to_install[${#to_install[@]}]="$tenative"
+        build_depends["$m"]="${BUILD_DEPENDS[@]}"
+    fi
+
     [[ $to_install ]] || return 0
-    # Install modules that need to be updated in parallel.
+
+    while true; do
+        install_count=0
+        next_install=( )
+
+        # Step 1: Remove installed modules from all dependency lists.
+        for m in ${!build_depends[@]}; do
+            next_depends=
+            for d in ${build_depends[$m]}; do
+                for i in ${installed_modules[@]}; do
+                    [[ "$d" = "$i" ]] && continue 2
+                done
+                next_depends+="$d "
+            done
+            build_depends[$m]="${next_depends%% }"
+        done
+
+        # Step 2: Install modules that have an empty dependency list.
+        for mv in "${to_install[@]}"; do
+            IFS=/ read m v <<< "$mv"
+            if [[ -z "${build_depends[$m]}" ]]; then
+                (module="$m"; module_version="$v"; install_module)
+                installed_modules[${#installed_modules[@]}]="$m"
+                install_count=$(($install_count +1))
+            else
+                next_install[${#next_install[@]}]="$mv"
+            fi
+        done
+
+        wait
+
+        # Step 3: Keep going if at least one module was installed during
+        # this iteration.
+        [[ "$install_count" -gt 0 ]] || break;
+
+        # Step 4: Remove modules that were installed during Step 2 from
+        # the job queue.
+        to_install=( "${next_install[@]}" )
+
+    done
     for mv in "${to_install[@]}"; do
         IFS=/ read m v <<< "$mv"
-        (module="$m"; module_version="$v"; install_module) &
+        echo "$m/$v autoinstall failed due to missing dependencies: ${build_depends[$m]}"
     done
-    wait
 }
 
 function make_redhat3_driver_disk ()
@@ -3205,7 +3439,7 @@ function make_redhat3_driver_disk ()
     fi
     # Set up temporary build directory for build
     rm -rf "$dkms_tree/$module/$module_version/build"
-    cp -rf "$dkms_tree/$module/$module_version/source/" "$dkms_tree/$module/$module_version/build"
+    cp -a "$dkms_tree/$module/$module_version/source/" "$dkms_tree/$module/$module_version/build"
 
     cd "$dkms_tree/$module/$module_version/build"
 
@@ -3242,11 +3476,11 @@ function make_redhat3_driver_disk ()
     cp ${SPECFILE} ${temp_dir_name}/SPECS/$module.spec
     cp -rax $dkms_tree/$module/$module_version/build/ $temp_dir_name/SOURCES/$module-$module_version/
     # Clean the build directory
-    rm -rf "$dkms_tree/$module/$module_version/build/*"
+    rm -rf "$dkms_tree/$module/$module_version/build"
     cd $temp_dir_name/SOURCES
     invoke_command "tar -jcvf $temp_dir_name/SOURCES/$module-$module_version.tar.bz2 $module-$module_version/" "creating source tarball"
     local i=0
-    #Build RPMS
+    # Build RPMS
     while [ $i -lt ${#kernelver[@]} ]; do
         invoke_command "LC_ALL=C rpmbuild --define \"_topdir ${temp_dir_name}\" --define \"version $module_version\" --define \"module_name $module\" --define \"kernel_version ${kernelver[$i]}\" -bb --target ${arch[$i]} ${temp_dir_name}/SPECS/$module.spec > ${temp_dir_name}/rpmbuild.log 2>&1" "rpmbuild"
         if [ "$?" -ne 0 ]; then
@@ -3349,9 +3583,10 @@ source_tree="/usr/src"
 install_tree="/lib/modules"
 tmp_location=${TMPDIR:-/tmp}
 verbose=""
+symlink_modules=""
 dkms_frameworkconf="/etc/dkms/framework.conf"
 
-# these can come from the environment or the config file
+# These can come from the environment or the config file
 [[ ! ${ADDON_MODULES_DIR} && -e /etc/sysconfig/module-init-tools ]] && . /etc/sysconfig/module-init-tools
 addon_modules_dir="${ADDON_MODULES_DIR}"
 [[ ! ${addon_modules_dir} ]] && running_distribution="$(distro_version)"
@@ -3392,70 +3627,146 @@ try_source_tree=''
 die_is_fatal="yes"
 [ -x /sbin/weak-modules ] && weak_modules='/sbin/weak-modules'
 [ -x /usr/lib/module-init-tools/weak-modules ] && weak_modules='/usr/lib/module-init-tools/weak-modules'
+no_depmod=""
 
 action_re='^(remove|(auto|un)?install|match|mk(driverdisk|tarball|rpm|deb|dsc|kmp)|build|add|status|ldtarball)$'
 
 # Parse command line arguments
 while (($# > 0)); do
     case $1 in
-	--dkmsframework*)    read_arg dkms_frameworkconf "$1" "$2" || shift
-			     #immediately load this config
-			     . $dkms_frameworkconf 2> /dev/null;;
-	--module*|-m)        read_arg _mv "$1" "$2" || shift
-			     parse_moduleversion "$_mv";;
-	-v)                  read_arg module_version "$1" "$2" || shift;;
-	--kernelver*|-k)     read_arg _ka "$1" "$2" || shift
-			     parse_kernelarch "$_ka";;
-	--distro*|-d)        read_arg distro "$1" "$2" || shift;;
-	--media*)            read_arg media "$1" "$2" ||shift;;
-	--release*|-r)       read_arg release "$1" "$2" || shift;;
-	--templatekernel*)   read_arg template_kernel "$1" "$2" || shift;;
-	-c)                  read_arg conf "$1" "$2" || shift;;
-	--quiet|-q)          exec >/dev/null 2>&1;;
-	--version|-V)        echo $"dkms: 2.2.0.3"
-			     exit 0;;
-	--no-prepare-kernel) no_prepare_kernel="no-prepare-kernel";;
-	--no-clean-kernel)   no_clean_kernel="no-clean-kernel";;
-	--no-initrd)         no_initrd="no-initrd";;
-	--binaries-only)     binaries_only="binaries-only";;
-	--source-only)       source_only="source-only";;
-	--force)             force="true";;
-	--all)               all="true";;
-	--verbose)           verbose="true";;
-	--rpm_safe_upgrade)  rpm_safe_upgrade="true";;
-	--dkmstree*)         read_arg dkms_tree "$1" "$2" || shift;;
-	--sourcetree*)       read_arg source_tree "$1" "$2" || shift;;
-	--installtree*)      read_arg install_tree "$1" "$2" || shift;;
-	--config*)           read_arg kernel_config "$1" "$2" || shift;;
-	--archive*)          read_arg archive_location "$1" "$2" || shift;;
-	--legacy-postinst*)  read_arg legacy_postinst "$1" "$2" || shift;;
-	--arch*|-a)          read_arg _aa "$1" "$2" || shift
-			     arch[${#arch[@]}]="$_aa";;
-	--size*)             read_arg size "$1" "$2" || shift;;
-	--kernelsourcedir*)  read_arg kernel_source_dir "$1" "$2" || shift
-			     ksourcedir_fromcli="true";;
-	--directive*)        read_arg _da "$1" "$2" || shift
-			     directive_array[${#directive_array[@]}]="$_da";;
-	--spec*)             read_arg specfile "$1" "$2" || shift;;
-	--debug)
-	    export PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): '
-	    set -x;;
-	-*|--*)              error $" Unknown option: $1"
-			     show_usage
-			     exit 2;;
-	*) if [[ $1 =~ $action_re ]]; then
-	    action="$action $1" # Add actions to the action list
-	    elif [[ -f $1 && $1 = *dkms.conf ]]; then
-	    try_source_tree="${1%dkms.conf}./" # Flag as a source tree
-	    elif [[ -d $1 && -f $1/dkms.conf ]]; then
-	    try_source_tree="$1" # ditto
-	    elif [[ -f $1 ]]; then
-	    archive_location="$1" # It is a file, assume it is an archive.
-	    elif [[ ! $module ]]; then
-	    parse_moduleversion "$1" # Assume it is a module/version pair.
-	    else
-	    warn $"I do not know how to handle $1."
-	    fi;;
+        --dkmsframework*)
+            read_arg dkms_frameworkconf "$1" "$2" || shift
+            #immediately load this config
+            . $dkms_frameworkconf 2> /dev/null
+            ;;
+        --module*|-m)
+            read_arg _mv "$1" "$2" || shift
+            parse_moduleversion "$_mv"
+            ;;
+        -v)
+            read_arg module_version "$1" "$2" || shift
+            ;;
+        --kernelver*|-k)
+            read_arg _ka "$1" "$2" || shift
+            parse_kernelarch "$_ka"
+            ;;
+        --distro*|-d)
+            read_arg distro "$1" "$2" || shift
+            ;;
+        --media*)
+            read_arg media "$1" "$2" ||shift
+            ;;
+        --release*|-r)
+            read_arg release "$1" "$2" || shift
+            ;;
+        --templatekernel*)
+            read_arg template_kernel "$1" "$2" || shift
+            ;;
+        -c)
+            read_arg conf "$1" "$2" || shift
+            ;;
+        --quiet|-q)
+            exec >/dev/null 2>&1
+            ;;
+        --version|-V)
+            echo $"dkms: [INSERT_VERSION_HERE]"
+            exit 0
+            ;;
+        --no-prepare-kernel)
+            no_prepare_kernel="no-prepare-kernel"
+            ;;
+        --no-clean-kernel)
+            no_clean_kernel="no-clean-kernel"
+            ;;
+        --no-initrd)
+            no_initrd="no-initrd"
+            ;;
+        --binaries-only)
+            binaries_only="binaries-only"
+            ;;
+        --source-only)
+            source_only="source-only"
+            ;;
+        --force)
+            force="true"
+            ;;
+        --all)
+            all="true"
+            ;;
+        --verbose)
+            verbose="true"
+            ;;
+        --rpm_safe_upgrade)
+            rpm_safe_upgrade="true"
+            ;;
+        --dkmstree*)
+            read_arg dkms_tree "$1" "$2" || shift
+            ;;
+        --sourcetree*)
+            read_arg source_tree "$1" "$2" || shift
+            ;;
+        --installtree*)
+            read_arg install_tree "$1" "$2" || shift
+            ;;
+        --symlink-modules)
+            symlink_module="true"
+            ;;
+        --config*)
+            read_arg kernel_config "$1" "$2" || shift
+            ;;
+        --archive*)
+            read_arg archive_location "$1" "$2" || shift
+            ;;
+        --legacy-postinst*)
+            read_arg legacy_postinst "$1" "$2" || shift
+            ;;
+        --arch*|-a)
+            read_arg _aa "$1" "$2" || shift
+            arch[${#arch[@]}]="$_aa"
+            ;;
+        --size*)
+            read_arg size "$1" "$2" || shift
+            ;;
+        --kernelsourcedir*)
+            read_arg kernel_source_dir "$1" "$2" || shift
+            ksourcedir_fromcli="true"
+            ;;
+        --directive*)
+            read_arg _da "$1" "$2" || shift
+            directive_array[${#directive_array[@]}]="$_da"
+            ;;
+        --spec*)
+            read_arg specfile "$1" "$2" || shift
+            ;;
+        --no-depmod)
+            no_depmod="true"
+            ;;
+        --debug)
+            export PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): '
+            set -x
+            ;;
+        -j)
+            read_arg parallel_jobs "$1" "$2" || shift;;
+        -*|--*)
+            error $" Unknown option: $1"
+            show_usage
+            exit 2
+            ;;
+        *)
+            if [[ $1 =~ $action_re ]]; then
+                action="$action $1" # Add actions to the action list
+            elif [[ -f $1 && $1 = *dkms.conf ]]; then
+                try_source_tree="${1%dkms.conf}./" # Flag as a source tree
+            elif [[ -d $1 && -f $1/dkms.conf ]]; then
+                try_source_tree="$1" # ditto
+            elif [[ -f $1 ]]; then
+                archive_location="$1" # It is a file, assume it is an archive.
+            elif [[ ! $module ]]; then
+                parse_moduleversion "$1" # Assume it is a module/version pair.
+            else
+                warn $"I do not know how to handle $1."
+            fi
+            ;;
     esac
     shift
 done
@@ -3465,54 +3776,107 @@ done
 # Error out if binaries-only is set and source-only is set
 if [[ $binaries_only && $source_only ]]; then
     die 8 $" You have specified both --binaries-only and --source-only." \
-	$"You cannot do this."
+        $"You cannot do this."
 fi
 
 # Error if # of arches doesn't match # of kernels
 if (( ${#kernelver[@]} != ${#arch[@]} && \
     ${#arch[@]} > 1 )); then
     die 1 $" If more than one arch is specified on the command line, then there" \
-	$"must be an equal number of kernel versions also specified (1:1 relationship)."
+        $"must be an equal number of kernel versions also specified (1:1 relationship)."
 fi
 
 # Check that kernel version and all aren't both set simultaneously
 if [[ $kernelver && $all ]]; then
     die 2 $" You cannot specify a kernel version and also specify" \
-	$"--all on the command line."
+        $"--all on the command line."
 fi
 
 # Check that arch and all aren't both set simultaneously
 if [[ $arch && $all ]]; then
     die 3 $" You cannot specify an arch and also specify" \
-	$"--all on the command line."
+        $"--all on the command line."
+fi
+
+# If initramfs/initrd rebuild is not requested, skip it with Redhat's weak-modules
+if [[ $no_initrd && $weak_modules ]]; then
+    if [[ $running_distribution == el5 ]]; then
+        weak_modules_no_initrd="--no-initrd"
+    else
+        weak_modules_no_initrd="--no-initramfs"
+    fi
 fi
 
+# Default to -j<number of CPUs>
+parallel_jobs=${parallel_jobs:-$(get_num_cpus)}
+
+# Make sure we're not passing -j0 to make; treat -j0 as just "-j"
+[[ "$parallel_jobs" = 0 ]] && parallel_jobs=""
+
 # Run the specified action
+if [ -z "$action" ]; then
+    show_usage
+    die 4 $"No action was specified."
+fi
+
 for action_to_run in $action; do
     setup_kernels_arches "$action_to_run"
     case "$action_to_run" in
-	remove)       check_root && remove_module;;
-	install)      check_root && install_modules;;
-	autoinstall)  check_root && autoinstall;;
-	match)        check_root && have_one_kernel && run_match;;
-	uninstall)    check_root && have_one_kernel && uninstall_module;;
-	mkdriverdisk) check_root && make_driver_disk;;
-	build)        build_modules;;
-	add)          add_module;;
-	mktarball)    make_tarball;;
-	mkrpm)        make_rpm;;
-	mkdeb)        make_debian "deb";;
-	mkdsc)        make_debian "dsc";;
-	mkkmp)        have_one_kernel && make_kmp;;
-	status)       show_status;;
-	ldtarball) # Make sure they're root if we're using --force
-	    if ((UID != 0)) && [[ $force = true ]]; then
-		die 1 $"You must be root to use this command with the --force option."
-	    fi
-	    load_tarball && add_module;;
-	'') error $"No action was specified."
-	    show_usage;;
-	*)  error $"Unknown action specified: $action_to_run"
-	    show_usage;;
+    remove)
+        check_root && remove_module
+        ;;
+    install)
+        check_root && install_modules
+        ;;
+    autoinstall)
+        check_root && autoinstall
+        ;;
+    match)
+        check_root && have_one_kernel && run_match
+        ;;
+    uninstall)
+        check_root && have_one_kernel && uninstall_module
+        ;;
+    mkdriverdisk)
+        check_root && make_driver_disk
+        ;;
+    build)
+        build_modules
+        ;;
+    add)
+        add_module
+        ;;
+    mktarball)
+        make_tarball
+        ;;
+    mkrpm)
+        make_rpm
+        ;;
+    mkdeb)
+        make_debian "deb"
+        ;;
+    mkdsc)
+        make_debian "dsc"
+        ;;
+    mkkmp)
+        have_one_kernel && make_kmp
+        ;;
+    status)
+        show_status
+        ;;
+    ldtarball) # Make sure they're root if we're using --force
+        if ((UID != 0)) && [[ $force = true ]]; then
+            die 1 $"You must be root to use this command with the --force option."
+        fi
+        load_tarball && add_module
+        ;;
+    '')
+        error $"No action was specified."
+        show_usage
+        ;;
+    *)
+        error $"Unknown action specified: $action_to_run"
+        show_usage
+        ;;
     esac
 done
diff --git a/dkms.8 b/dkms.8
index 908d9db..6b7b5ec 100644
--- a/dkms.8
+++ b/dkms.8
@@ -1,4 +1,42 @@
 .\" -*- nroff -*-
+.\"
+.\" .SY, .YS, .OP macros from /usr/share/groff/1.21/tmac/an-ext.tmac
+.\"
+.\" Declare start of command synopsis.  Sets up hanging indentation.
+.de SY
+.  ie !\\n(mS \{\
+.    nh
+.    nr mS 1
+.    nr mA \\n(.j
+.    ad l
+.    nr mI \\n(.i
+.  \}
+.  el \{\
+.    br
+.    ns
+.  \}
+.
+.  HP \w'\fB\\$1\fP\ 'u
+.  B "\\$1"
+..
+.
+.
+.\" End of command synopsis.  Restores adjustment.
+.de YS
+.  in \\n(mIu
+.  ad \\n(mA
+.  hy \\n(HY
+.  nr mS 0
+..
+.
+.
+.\" Declare optional option.
+.de OP
+.  ie \\n(.$-1 \
+.    RI "[\fB\\$1\fP" "\ \\$2" "]"
+.  el \
+.    RB "[" "\\$1" "]"
+..
 .TH DKMS 8 "June 2008" "Version 2.0.20"
 .SH NAME
 dkms \- Dynamic Kernel Module Support
@@ -243,7 +281,6 @@ load this tarball, build and install modules on the end user's system.  If you d
 not want your RPM to contain any prebuilt binaries, be sure to specify
 .B \-\-source\-only
 in the mkrpm command.
-.TP
 .SY mkdeb
 .OP module/module\-version
 .OP -k kernel/arch
@@ -464,6 +501,13 @@ ensure that modules are compiled correctly.
 This option keeps DKMS from cleaning your kernel source tree after a
 build.
 .TP
+.B \-\-no\-depmod
+This option prevents DKMS from running the depmod command during
+.B install
+and
+.B uninstall
+which will avoid (re)calculating module dependencies and thereby save time.
+.TP
 .B \-\-kernelsourcedir <kernel\-source\-directory\-location>
 Using this option you can specify the location of your kernel source
 directory.  Most likely you will not need to set this if your kernel
@@ -516,6 +560,15 @@ prior than DKMS 2.1.  This option currently defaults to 1.
 A supplemental configuration file to the system-wide dkms framework, typically located
 in /etc/dkms/framework.conf.  All option that are normally provided on a command line
 can be provided in this file.
+.TP
+.B \-j number
+Run no more than
+.I number
+jobs in parallel; see the -j option of
+.I make(1).
+Defaults to the number of CPUs in the system, detected by
+.I nproc(1).
+Specify 0 to impose no limit on the number of parallel jobs.
 .SH ORIGINAL MODULES
 During the first install of a module for a <kernelversion>,
 .B dkms
@@ -720,6 +773,7 @@ array directive.
 .B STRIP[#]=
 By default strip is considered to be "yes".  If set to "no", DKMS will not
 run strip \-g against your built module to remove debug symbols from it.
+STRIP[0] is used as the default for any unset entries in the STRIP array.
 .TP
 .B PACKAGE_NAME=
 This directive is used to give the name associated with the entire package of modules.  This is the same
@@ -825,6 +879,14 @@ on
 .B dkms_autoinstaller
 for more information.
 .TP
+.B BUILD_DEPENDS[#]=
+This optional directive is an array that allows you to specify other modules as
+dependencies for your module. Each array element should be the
+.B PACKAGE_NAME
+of another module that is managed by dkms. Do not specify a version or
+architecture in the dependency. Note that this directive is only advisory;
+missing or broken dependencies cause non-fatal warnings.
+.TP
 .B BUILD_EXCLUSIVE_KERNEL=
 This optional directive allows you to specify a regular expression which defines
 the subset of kernels which DKMS is allowed to build your module for.  If the kernel
@@ -924,9 +986,18 @@ default values for the variables.
 .B $source_tree
 and
 .B $install_tree
-which control where DKMS looks for its framework.  Note that these variables can also
-be manipulated on the command line with \-\-dkmstree, \-\-sourcetree
-and \-\-installtree options.
+which control where DKMS looks for its framework.  The 
+.B $symlink_modules
+variable controls wheter binary modules are copied to /lib/modules or if only symlinks are
+created there. Note that these variables can also
+be manipulated on the command line with \-\-dkmstree, \-\-sourcetree, \-\-installtree 
+and \-\-symlink-modules options.
+
+The
+.B $autoinstall_all_kernels
+variable is used by the common postinst for DKMS modules. It controls if the build should be done
+for all installed kernels or only for the current and latest installed kernel. It has no command 
+line equivalent.
 .SH dkms_autoinstaller
 This boot\-time service automatically installs any module which has
 .B AUTOINSTALL="yes"
@@ -1064,7 +1135,7 @@ works within the DKMS framework.
 .SH AUTHOR
 Gary Lerhaupt
 .SH WEBPAGE
-.I http://linux.dell.com/dkms
+.I https://github.com/dell-oss/dkms
 .SH WHITE\-PAPERS
 .I http://linux.dell.com/dkms/dkms\-ols2004.pdf
 
diff --git a/dkms.service b/dkms.service
new file mode 100644
index 0000000..b212702
--- /dev/null
+++ b/dkms.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Builds and install new kernel modules through DKMS
+Documentation=man:dkms(8)
+
+[Service]
+Type=oneshot
+RemainAfterExit=true
+ExecStart=/bin/sh -c 'dkms autoinstall --verbose --kernelver $(uname -r)'
+
+[Install]
+WantedBy=multi-user.target
diff --git a/dkms.spec b/dkms.spec
index 959d496..8e85d85 100644
--- a/dkms.spec
+++ b/dkms.spec
@@ -1,30 +1,63 @@
+%if 0%{?rhel} == 5
+%define _sharedstatedir /var/lib
+%endif
+
 Summary: Dynamic Kernel Module Support Framework
 Name: dkms
-Version: 2.2.0.3
+Version: [INSERT_VERSION_HERE]
 Release: 1%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 BuildArch: noarch
-Requires: sed gawk findutils modutils tar cpio gzip grep mktemp
-Requires: bash > 1.99
-# because Mandriva calls this package dkms-minimal
-Provides: dkms-minimal = %{version}
 URL: http://linux.dell.com/dkms
-Source0: http://linux.dell.com/dkms/permalink/dkms-%{version}.tar.gz
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Source0: http://linux.dell.com/dkms/permalink/dkms-%{version}.tar.gz
+# because Mandriva calls this package dkms-minimal
+Provides: dkms-minimal = %{version}
+
+Requires: coreutils
+Requires: cpio
+Requires: findutils
+Requires: gawk
+Requires: gcc
+Requires: grep
+Requires: gzip
+Requires: kernel-devel
+Requires: sed
+Requires: tar 
+Requires: which
+Requires: bash > 1.99
+
+%if 0%{?fedora} || 0%{?rhel} >= 7
+Requires:       kmod
+%else
+Requires:       module-init-tools
+%endif
+
+%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7
+BuildRequires:          systemd
+Requires(post):         systemd
+Requires(preun):        systemd
+Requires(postun):       systemd
+%else
+Requires(post):         /sbin/chkconfig
+Requires(preun):        /sbin/chkconfig
+Requires(preun):        /sbin/service
+Requires(postun):       /sbin/service
+%endif
 
 %if 0%{?fedora}
 Requires: kernel-devel
 %endif
 
 %description
-This package contains the framework for the Dynamic
-Kernel Module Support (DKMS) method for installing
-module RPMS as originally developed by Dell.
+This package contains the framework for the Dynamic Kernel Module Support (DKMS)
+method for installing module RPMS as originally developed by Dell.
 
 %prep
 
 %setup -q
+
 %build
 
 %triggerpostun -- %{name} < 1.90.00-1
@@ -76,33 +109,78 @@ echo ""
 
 %install
 rm -rf $RPM_BUILD_ROOT
-make install-redhat DESTDIR=$RPM_BUILD_ROOT \
+
+%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7
+make install-redhat-systemd DESTDIR=$RPM_BUILD_ROOT \
+    SBIN=$RPM_BUILD_ROOT%{_sbindir} \
+    VAR=$RPM_BUILD_ROOT%{_localstatedir}/lib/%{name} \
+    MAN=$RPM_BUILD_ROOT%{_mandir}/man8 \
+    ETC=$RPM_BUILD_ROOT%{_sysconfdir}/%{name} \
+    BASHDIR=$RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d \
+    LIBDIR=$RPM_BUILD_ROOT%{_prefix}/lib/%{name}
+%else
+make install-redhat-sysv DESTDIR=$RPM_BUILD_ROOT \
     SBIN=$RPM_BUILD_ROOT%{_sbindir} \
     VAR=$RPM_BUILD_ROOT%{_localstatedir}/lib/%{name} \
     MAN=$RPM_BUILD_ROOT%{_mandir}/man8 \
     ETC=$RPM_BUILD_ROOT%{_sysconfdir}/%{name} \
     BASHDIR=$RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d \
     LIBDIR=$RPM_BUILD_ROOT%{_prefix}/lib/%{name}
+%endif
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
+%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7
+
+%post
+%systemd_post %{name}.service
+
+%preun
+if [ $1 -eq 0 ]; then
+    # Package removal, not upgrade
+    /bin/systemctl --no-reload disable %{name}.service >/dev/null 2>&1 || :
+fi
+
+%systemd_preun %{name}.service
+
+%postun
+%systemd_postun %{name}.service
+
+%else
+
+%post
+# enable on initial install
+[ $1 -lt 2 ] && /sbin/chkconfig --add dkms_autoinstaller >/dev/null 2>&1 ||:
+[ $1 -lt 2 ] && /sbin/chkconfig dkms_autoinstaller on >/dev/null 2>&1 ||:
+
+%preun
+# remove on uninstall
+[ $1 -lt 1 ] && /sbin/chkconfig dkms_autoinstaller off >/dev/null 2>&1 ||:
+[ $1 -lt 1 ] && /sbin/chkconfig --del dkms_autoinstaller >/dev/null 2>&1 ||:
+
+%endif
+
 %files
 %defattr(-,root,root)
-%{_sbindir}/%{name}
-%{_localstatedir}/lib/%{name}
+%doc sample.spec sample.conf AUTHORS COPYING README.dkms
+%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7
+%{_unitdir}/%{name}.service
+%else
+%{_initrddir}/%{name}_autoinstaller
+%endif
 %{_prefix}/lib/%{name}
 %{_mandir}/*/*
+%{_sbindir}/%{name}
+%{_localstatedir}/lib/%{name}
 %config(noreplace) %{_sysconfdir}/%{name}
-%doc sample.spec sample.conf AUTHORS COPYING README.dkms
-%doc sample-suse-9-mkkmp.spec sample-suse-10-mkkmp.spec
 # these dirs are for plugins - owned by other packages
-%{_initddir}/dkms_autoinstaller
 %{_sysconfdir}/kernel/postinst.d/%{name}
 %{_sysconfdir}/kernel/prerm.d/%{name}
 %{_sysconfdir}/bash_completion.d/%{name}
 
 %if 0%{?suse_version}
+%doc sample-suse-9-mkkmp.spec sample-suse-10-mkkmp.spec
 # suse doesnt yet support /etc/kernel/{prerm.d,postinst.d}, but will fail build
 # with unowned dirs if we dont own them ourselves
 # when opensuse *does* add this support, we will need to BuildRequires kernel
@@ -111,17 +189,10 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{_sysconfdir}/kernel/prerm.d
 %endif
 
-
-%post
-[ -e /sbin/dkms ] && mv -f /sbin/dkms /sbin/dkms.old 2>/dev/null
-# enable on initial install
-[ $1 -lt 2 ] && /sbin/chkconfig dkms_autoinstaller on ||:
-
-%preun
-# remove on uninstall
-[ $1 -lt 1 ] && /sbin/chkconfig dkms_autoinstaller off ||:
-
 %changelog
+* Mon Sep 22 2014 Mario Limonciello <Mario_Limonciello at dell.com>
+- Merge with the spec file that has been adopted for RHEL/Fedora/CentOS.
+
 * Sat Aug 22 2009 Matt Domsch <Matt_Domsch at dell.com> - 2.1.0.0-1
 - update to latest upstream
 - drop Requires: lsb.  avoid calling rpm (recursively) if possible.
diff --git a/dkms_apport.py b/dkms_apport.py
index 8b2ca84..ebf87fd 100755
--- a/dkms_apport.py
+++ b/dkms_apport.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 #
 #  Dynamic Kernel Module Support (DKMS) <dkms-devel at dell.com>
 #  Copyright (C) 2009 Dell, Inc.
@@ -36,24 +36,28 @@ optparser.add_option('-k', help="Specify the kernel version",
 options=optparser.parse_args()[0]
 
 if not options.module or not options.version:
-    print >> sys.stderr, 'ERROR (dkms apport): both -m and -v are required'
+    sys.stderr.write('ERROR (dkms apport): both -m and -v are required\n')
     sys.exit(2)
 
 package=packaging.get_file_package('/usr/src/' + options.module + '-' + options.version)
 if package is None:
-    print >> sys.stderr, 'ERROR (dkms apport): binary package for %s: %s not found' % (options.module,options.version)
+    sys.stderr.write('ERROR (dkms apport): binary package for %s: %s not found\n' % (options.module,options.version))
     sys.exit(1)
 
 if options.kernel:
     # TODO: Ubuntu specific
     kernel_package = "linux-headers-" + options.kernel
 
+    supported_kernel = True
     try:
-        apport.packaging.is_distro_package(kernel_package)
-    except ValueError, e:
-        if e == 'package does not exist':
-            print >> sys.stderr, 'ERROR (dkms apport): kernel package %s is not supported' % (kernel_package)
-            sys.exit(1)
+        supported_kernel = apport.packaging.is_distro_package(kernel_package)
+    except ValueError as e:
+        if str(e) == 'package does not exist':
+            supported_kernel = False
+
+    if not supported_kernel:
+        sys.stderr.write('ERROR (dkms apport): kernel package %s is not supported\n' % (kernel_package))
+        sys.exit(1)
 
 make_log=os.path.join('/var','lib','dkms',options.module,options.version,'build','make.log')
 
@@ -62,7 +66,7 @@ report['Package'] = package
 try:
     report['SourcePackage'] = apport.packaging.get_source(package)
 except ValueError:
-    print >> sys.stderr, 'ERROR (dkms apport): unable to determine source package for %s' % package
+    sys.stderr.write('ERROR (dkms apport): unable to determine source package for %s\n' % package)
     sys.exit(3)
 try:
     version = packaging.get_version(package)
@@ -81,15 +85,14 @@ attach_file_if_exists(report, make_log, 'DKMSBuildLog')
 if 'DKMSBuildLog' in report:
     this_year = str(datetime.today().year)
     if 'Segmentation fault' in report['DKMSBuildLog']:
-        print >> sys.stderr, 'ERROR (dkms apport): There was a segmentation fault when trying to build the module'
+        sys.stderr.write('ERROR (dkms apport): There was a segmentation fault when trying to build the module\n')
         sys.exit(1)
-    dupe_sig = ''
     for line in report['DKMSBuildLog'].split('\n'):
-        if line.endswith(this_year):
-            continue
-        dupe_sig += line + '\n'
-    report['DuplicateSignature'] = dupe_sig
+        if ': error:' in line:
+            report['DuplicateSignature'] = 'dkms:%s:%s:%s' % (package, version, line.strip())
+            break
 
 if options.kernel:
     report['DKMSKernelVersion'] = options.kernel
-report.write(open(apport.fileutils.make_report_path(report), 'w'))
+with open(apport.fileutils.make_report_path(report), 'wb') as f:
+    report.write(f)
diff --git a/dkms_autoinstaller b/dkms_autoinstaller
index 798e796..0e7f070 100755
--- a/dkms_autoinstaller
+++ b/dkms_autoinstaller
@@ -1,25 +1,27 @@
 #!/bin/sh
 #
-# dkms_autoinstaller        A service to automatically install DKMS modules
-#                           for new kernels.
-# chkconfig: 345 04 04
-# description: An autoinstaller bootup service for DKMS
+# dkms_autoinstaller - A service to automatically install DKMS modules for new kernels.
 #
+# chkconfig: 345 04 04
+# description: Compiles and install kernel modules automatically for new \
+#              kernels at boot.
+
 ### BEGIN INIT INFO
 # Provides: dkms_autoinstaller dkms
-# Default-Start: 2 3 4 5
-# Default-Stop:
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
 # Required-Start: $local_fs
-# Required-Stop: $null
-# Short-Description: Automatically install DKMS modules for new kernels
+# Short-Description: DKMS kernel modules installer service
 # Description: A service to automatically install DKMS modules for new kernels.
 ### END INIT INFO
 
-test -f /usr/sbin/dkms || exit 0
 
 if [ -f /lib/lsb/init-functions ]; then
     . /lib/lsb/init-functions
+elif [ -f /etc/rc.d/init.d/functions ]; then 
+    . /etc/rc.d/init.d/functions
 fi
+
 #We only have these functions on debian/ubuntu
 # so on other distros just stub them out
 if [ ! -f /etc/debian_version ]; then
@@ -29,24 +31,30 @@ if [ ! -f /etc/debian_version ]; then
     alias log_action_end_msg=log_end_msg
 fi
 
-if [ -n "$2" ]; then
-    kernel="$2"
-else
-    kernel=`uname -r`
-fi
+exec="/usr/sbin/dkms"
+prog=${exec##*/}
+
+test -f $exec || exit 0
+
+[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
-# See how we were called.
 case "$1" in
-  start)
-    log_daemon_msg "dkms: running auto installation service for kernel $kernel"
-    dkms autoinstall --kernelver $kernel
-    log_end_msg $?
-    ;;
-  stop|restart|force-reload|status|reload)
-    # ignore
-    ;;
-  *)
-    echo "Usage: $0 {start}"
+    start)
+		if [ -n "$2" ]; then
+			kernel="$2"
+		else
+			kernel=`uname -r`
+		fi
+		log_daemon_msg "$prog: running auto installation service for kernel $kernel"
+		dkms autoinstall --kernelver $kernel
+		log_end_msg $?
+		;;
+	stop|restart|force-reload|status|reload)
+		# There is no stop action, this and the 04 priority during stop is
+		# added to make RHEL chkconfig happy.
+		# Ignore others on debian/ubuntu too
+        ;;
+    *)
+        echo $"Usage: $0 {start}"
+        exit 2
 esac
-
-exit 0
diff --git a/dkms_common.postinst b/dkms_common.postinst
index d8cf3a7..d3d2829 100644
--- a/dkms_common.postinst
+++ b/dkms_common.postinst
@@ -146,7 +146,12 @@ if [ -z "$NAME" ] || [ -z "$VERSION" ]; then
     exit 1
 fi
 
-KERNELS=$(ls /lib/modules/)
+# read framework configuration options
+if [ -r /etc/dkms/framework.conf ]; then
+    . /etc/dkms/framework.conf
+fi
+
+KERNELS=$(ls /lib/modules/ 2>/dev/null || true)
 CURRENT_KERNEL=$(uname -r)
 
 #We never want to keep an older version side by side to prevent conflicts
@@ -189,45 +194,36 @@ fi
 #
 # NOTE: if the headers are not installed then the
 #       module won't be built, as usual
-if [ -z "$UPGRADE" ]; then
-    echo "First Installation: checking all kernels..."
-    for KERNEL in $KERNELS; do
-        if [ ${KERNEL} = ${CURRENT_KERNEL} ]; then
-            # Kernel found
-            KERNELS=$CURRENT_KERNEL
-            break
-        fi
-    done
-else
-    KERNELS=$CURRENT_KERNEL
-fi
 
 # Here we look for the most recent kernel so that we can
 # build the module for it (in addition to doing it for the
 # current kernel.
 NEWEST_KERNEL=$(get_newest_kernel "$KERNELS")
 
-# If the current kernel doesn't come from the host of a chroot
-if [ `_is_kernel_name_correct $CURRENT_KERNEL` = "yes" ]; then
-    # See if it's worth building the module for both the newest kernel
-    # and for the current kernel
-    if [ -n "$NEWEST_KERNEL" ] && [ ${CURRENT_KERNEL} != ${NEWEST_KERNEL} ]; then
-        echo "Building for $CURRENT_KERNEL and $NEWEST_KERNEL"
-        KERNELS="$CURRENT_KERNEL $NEWEST_KERNEL"
+if [ -z "$autoinstall_all_kernels" ]; then
+    # If the current kernel is installed on the system or chroot
+    if [ `_is_kernel_name_correct $CURRENT_KERNEL` = "yes" ]; then
+        if [ -n "$NEWEST_KERNEL" ] && [ ${CURRENT_KERNEL} != ${NEWEST_KERNEL} ]; then
+            KERNELS="$CURRENT_KERNEL $NEWEST_KERNEL"
+        else
+            KERNELS=$CURRENT_KERNEL
+        fi
+    # The current kernel is not useful as it's not installed
     else
-        echo "Building only for $CURRENT_KERNEL"
-    fi
-# The current kernel is not useful as it's the host's
-else
-    echo "It is likely that $CURRENT_KERNEL belongs to a chroot's host"
-
-    # Let's use only the newest kernel
-    if [ -n "$NEWEST_KERNEL" ]; then
-        KERNELS="$NEWEST_KERNEL"
-        echo "Building only for $NEWEST_KERNEL"
+        echo "It is likely that $CURRENT_KERNEL belongs to a chroot's host"
+
+        # Let's use only the newest kernel if this is not a first installation
+        # otherwise build for all kernels
+        if [ -n "$NEWEST_KERNEL" -a -n "$UPGRADE" ]; then
+            KERNELS="$NEWEST_KERNEL"
+        fi
     fi
 fi
 
+# Take care of displaying newline separated list
+echo "Building for $KERNELS" | tr '\n' ',' \
+    | sed -e 's/,/, /g; s/, $/\n/; s/, \([^,]\+\)$/ and \1/'
+
 if [ -n "$ARCH" ]; then
     if which lsb_release >/dev/null && [ $(lsb_release -s -i) = "Ubuntu" ]; then
         case $ARCH in
@@ -281,8 +277,8 @@ for KERNEL in $KERNELS; do
             esac
             dkms_status=`dkms status -m $NAME -v $VERSION -k $KERNEL $ARCH`
         else
-            echo "Module build for the currently running kernel was skipped since the"
-            echo "kernel source for this kernel does not seem to be installed."
+            echo "Module build for kernel $KERNEL was skipped since the"
+            echo "kernel headers for this kernel does not seem to be installed."
         fi
     fi
 
diff --git a/dkms_framework.conf b/dkms_framework.conf
index fd2cf57..852f3b7 100644
--- a/dkms_framework.conf
+++ b/dkms_framework.conf
@@ -16,3 +16,13 @@
 
 ## verbosity setting (verbose will be active if you set it to a non-null value)
 # verbose=""
+
+## symlink kernel modules (will be active if you set it to a non-null value)
+## This creates symlinks from the install_tree into the dkms_tree instead of
+## copying the modules. This preserves some space on the costs of being less
+## safe.
+# symlink_modules=""
+
+## Automatic installation and upgrade for all installed kernels (if set to a
+## non-null value)
+# autoinstall_all_kernels=""
diff --git a/sample.spec b/sample.spec
index ff8421f..3abdf07 100644
--- a/sample.spec
+++ b/sample.spec
@@ -93,7 +93,7 @@ if [ -z "$loaded_tarballs" ]; then
 	else
 		echo -e ""
 		echo -e "Module build for the currently running kernel was skipped since the"
-		echo -e "kernel source for this kernel does not seem to be installed."
+		echo -e "kernel headers for this kernel do not seem to be installed."
 	fi
 fi
 exit 0
diff --git a/template-dkms-mkrpm.spec b/template-dkms-mkrpm.spec
index f38a8eb..a5f1f8b 100644
--- a/template-dkms-mkrpm.spec
+++ b/template-dkms-mkrpm.spec
@@ -52,7 +52,7 @@ if [ "$RPM_BUILD_ROOT" != "/" ]; then
 fi
 
 %post
-for POSTINST in %{_libdir}/dkms/common.postinst %{_datarootdir}/%{module_name}/postinst; do
+for POSTINST in %{_prefix}/lib/dkms/common.postinst %{_datarootdir}/%{module_name}/postinst; do
         if [ -f $POSTINST ]; then
                 $POSTINST %{module_name} %{version} %{_datarootdir}/%{module_name}
                 exit $?
diff --git a/test/README b/test/README
new file mode 100644
index 0000000..6b02d40
--- /dev/null
+++ b/test/README
@@ -0,0 +1 @@
+A sample module to test dkms.
diff --git a/test/dkms_test-1.0/Makefile b/test/dkms_test-1.0/Makefile
new file mode 100644
index 0000000..c6c2d32
--- /dev/null
+++ b/test/dkms_test-1.0/Makefile
@@ -0,0 +1,7 @@
+obj-m += dkms_test.o
+
+all:
+	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
+
+clean:
+	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
diff --git a/test/dkms_test-1.0/dkms.conf b/test/dkms_test-1.0/dkms.conf
new file mode 100644
index 0000000..cb5fa65
--- /dev/null
+++ b/test/dkms_test-1.0/dkms.conf
@@ -0,0 +1,13 @@
+
+PACKAGE_NAME="dkms_test"
+PACKAGE_VERSION="1.0"
+BUILT_MODULE_NAME="dkms_test"
+
+MAKE="make -C /lib/modules/${kernelver}/build SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build modules"
+
+CLEAN="make -C /lib/modules/${kernelver}/build SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build  M=$PWD clean"
+
+REMAKE_INITRD="yes"
+
+DEST_MODULE_LOCATION="/kernel/extra"
+
diff --git a/test/dkms_test-1.0/dkms_test.c b/test/dkms_test-1.0/dkms_test.c
new file mode 100644
index 0000000..7533a16
--- /dev/null
+++ b/test/dkms_test-1.0/dkms_test.c
@@ -0,0 +1,23 @@
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#define  DKMS_TEST_VER "1.0"
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("A Simple dkms test module");
+
+static int __init dkms_test_init(void)
+{
+    printk(KERN_INFO "DKMS Test Module -%s Loaded\n",DKMS_TEST_VER);
+    return 0;    
+}
+
+static void __exit dkms_test_cleanup(void)
+{
+    printk(KERN_INFO "Cleaning up after dkms test module.\n");
+}
+
+module_init(dkms_test_init);
+module_exit(dkms_test_cleanup);
+MODULE_VERSION(DKMS_TEST_VER);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-dkms/dkms.git



More information about the Pkg-dkms-commits mailing list