File all-modules of Package kernel-default-image

#! /bin/bash

KREL=$1
mapfile -t  REQUEST < <(tr ' ' '\n')
[[ ${#REQUEST[@]} > 0 && ${REQUEST[0]} ]] || exit 0

declare -A ALLDEPS
while read l ; do
	MOD=${l%%:*}
	moddeps=(${l#*:})
	[[ ${#moddeps[@]} > 0 ]] || continue

	MOD=${MOD##*/}
	MOD=${MOD%.ko*}
	moddeps=(${moddeps[@]##*/})
	moddeps=(${moddeps[@]%.ko*})
	if [[ ${ALLDEPS[$MOD]} ]]; then
	    ALLDEPS[$MOD]="${ALLDEPS[$MOD]} ${moddeps[@]}"
	else
	    ALLDEPS[$MOD]="${moddeps[@]}"
	fi
done < <( \
    cat /lib/modules/$KREL/modules.dep ;
    cat /lib/modules/$KREL/modules.softdep | grep : | sed -e 's/^softdep //' -e 's/ \(pre\|post\):/:/')

declare -A MODULES

add_mod() {
    local mm=$1 mf

    if [[ $mm =~ ^[a-z0-9][-_a-zA-Z0-9]*$ ]]; then
	mf=$mm
    else
	# modules.softdep may contain aliases like platform:foo
	mf=$(/sbin/modinfo -F filename "$mm")
	mf=${mf##*/}
	mf=${mf%.ko*}
    fi
    [[ ! $mf || ${MODULES["$mf"]} ]] || MODULES["$mf"]="1"
}

for m in "${REQUEST[@]}"; do
    # the spec file allows regexps in request list
    for mm in ${!ALLDEPS[@]}; do
	if [[ $mm =~ ^$m$ ]]; then
	    add_mod "$mm"
	fi
    done
done

n=0
while [[ $n != ${#MODULES[@]} ]]; do
    n=${#MODULES[@]}
    for m in "${!MODULES[@]}"; do
	for d in ${ALLDEPS[$m]}; do
	    add_mod "$d"
	done
    done
done

echo "${!MODULES[@]}"
openSUSE Build Service is sponsored by