Force tarball creation
Fix prefix in emplate-dkms-mkrpm.spec file
Make man page compatible with old man commands (RHEL 5)
remove the directory where the module was installed after removing a module try to remove the path (below /lib/modules/KVERS) were the module was installed to cleanup any remaining empty directories
do not fail if /lib/modules does not exist
Add POST_BUILD to the dkms_conf_variables list.

The POST_BUILD directive is ignored by the read_conf() function
because it not in dkms_conf_variables list.
Use STRIP[0] as the default for the STRIP array.

If STRIP[0]='no' is set for the first module in a dkms.conf file,
then all other modules are usually built the same way. Producing
stripped and unstripped modules in the same build is rarely useful.

Thus, if STRIP[0] is explicitly set, then use it as the default
value for all other unset entries in the STRIP array.
Add dependency logic for automatic builds.

Implement a BUILD_DEPENDS directive that instructs `dkms autoinstall`
to build Linux modules in a specific order. The motivating case is

  lustre -> zfs -> spl

Where ZFS fails to build if SPL is not already installed.
Fix zfs autoinstall failures for kernel upgrades.

The module dependency logic has a faulty assumption that fails if the dependee
is built before the dependent during separate `dkms autoinstall` invocations.

For example, if zfs-dkms is built after spl-dkms, and if `dkms autoinstall` is
run separately for each, then it no-ops like the BUILD_DEPENDS is unsatisfied.

Generate the installed_modules list early and move the dependency reduction
logic to the top of the installation loop.
Reset build dependencies

For each iteration we need to rebuild ithe list of uninstalled
build dependencies.  To do this next_depends must be reset for
each pass so it can be recalculated.  Otherwise, we can hit the
install_count early return and not install all the requested
packages.

The code should also use 'continue 2' instead of 'break 2' to
ensure the full list of build_depends is checked.
Bash 4.3 syntax changes.

According to man pages, ${arr[@]} expands the array into separate words (analogous to the expansion of $@). Quoting the man page: 'That is, "$@" is equivalent to "$1" "$2" ...' So what it basically becomes in your example is <value-of-arr0><separator><value-of-arr1>.

Substituting the relevant piece of code with [[ \"${arr[@]}\\" ]] demonstrates this well.

There are minor distinctions in expanding using * and @.
The man page states:
"If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS special  variable".
Parallel depmod failure
If I invoke dkms with --no-initrd, I EXPECT it to not destroy my existing initrds as PROMISED by the --help option... and I also EXPECT it not to waste time (quite lengthy, within say a fully virtualized VM) rebuilding the initrd that I did NOT want to have rebuilt.