Declaring _modpaths as an associative array allows us to forego the printf|sort -u|xargs cp pipeline as we can guarantee that the array is already prepared.
Signed-off-by: Dave Reisner dreisner@archlinux.org --- functions | 2 +- mkinitcpio | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/functions b/functions index 491fc6c..e79d057 100644 --- a/functions +++ b/functions @@ -331,7 +331,7 @@ add_module() {
# aggregate modules and add them all at once to save some forks quiet "adding module: %s" "$1" - _modpaths+=("$path") + _modpaths["$path"]=1 _addedmodules["${module//-/_}"]=1
# handle module quirks diff --git a/mkinitcpio b/mkinitcpio index beb5022..5303f2d 100755 --- a/mkinitcpio +++ b/mkinitcpio @@ -21,8 +21,8 @@ _optmoduleroot= _optkver= _optgenimg= _optpreset= _optcompress= _optshowautomods=0 _optsavetree=0 _optshowmods=0 _optquiet=1 _optcolor=1 -_optskiphooks=() _optaddhooks=() _modpaths=() _hooks=() -declare -A _runhooks=() _addedmodules=() _autodetect_cache=() +_optskiphooks=() _optaddhooks=() _hooks=() +declare -A _runhooks _addedmodules _modpaths _autodetect_cache
# export a sane PATH export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' @@ -224,25 +224,26 @@ install_modules() { return 0 fi
- printf '%s\0' "$@" | sort -zu | - xargs -0 cp -t "$BUILDROOT/usr/lib/modules/$KERNELVERSION/kernel" + cp "$@" "$BUILDROOT/lib/modules/$KERNELVERSION/kernel"
# unzip modules prior to recompression - gzip -dr "$BUILDROOT/usr/lib/modules/$KERNELVERSION/kernel" + gzip -dr "$BUILDROOT/lib/modules/$KERNELVERSION/kernel"
msg "Generating module dependencies" - install -m644 -t "$BUILDROOT/usr/lib/modules/$KERNELVERSION" \ + install -m644 -t "$BUILDROOT/lib/modules/$KERNELVERSION" \ "$_d_kmoduledir"/modules.builtin
- # we install all modules into kernel/, making the .order file incorrect - # for the module tree. munge it, so that we have an accurate index. + # we install all modules into kernel/, making the .order file incorrect for + # the module tree. munge it, so that we have an accurate index. This avoids + # some rare and subtle issues with module loading choices when an alias + # resolves to multiple modules, only one of which can claim a device. awk -F'/' '{ print "kernel/" $NF }' \ "$_d_kmoduledir"/modules.order >"$BUILDROOT/lib/modules/$KERNELVERSION/modules.order"
depmod -b "$BUILDROOT" "$KERNELVERSION"
# remove all non-binary module.* files (except devname for on-demand module loading) - rm "$BUILDROOT/usr/lib/modules/$KERNELVERSION"/modules.!(*.bin|devname) + rm "$BUILDROOT/lib/modules/$KERNELVERSION"/modules.!(*.bin|devname) }
. "$_f_functions" @@ -434,7 +435,7 @@ parse_config "$_f_config" trap -- RETURN trap '(( ++_builderrors ))' ERR
-install_modules "${_modpaths[@]}" +install_modules "${!_modpaths[@]}"
# unset errtrace and trap set +o functrace