Jeremy Katz 95521be
#! /bin/sh
Jeremy Katz 95521be
Jeremy Katz 95521be
# heavily based upon find-suggests.ksyms by Andreas Gruenbacher <agruen@suse.de>.
Jeremy Katz 95521be
# with modifications by Michael Brown <Michael_E_Brown@dell.com>
Jeremy Katz 95521be
#
Jeremy Katz 95521be
# -- added module versioning info to modalias() symbols
Jeremy Katz 95521be
# -- removed code which inspects spec files.
Jeremy Katz 95521be
Jeremy Katz 95521be
IFS=$'\n'
Jeremy Katz 95521be
20a4569
#
Jeremy Katz 95521be
# Initially, dont generate modalias() lines for kernel package. This needs
20a4569
# additional discussion. Would like to eventually add them for
20a4569
# completeness, so that we can determine when drivers are folded into
Jeremy Katz 95521be
# mainline kernel.
20a4569
#
Jeremy Katz 95521be
case "$1" in
Jeremy Katz 95521be
kernel-module-*)    ;; # Fedora kernel module package names start with
Jeremy Katz 95521be
		       # kernel-module.
Jeremy Katz 95521be
kernel*)	   is_kernel_package=1 ;;
Jeremy Katz 95521be
esac
Jeremy Katz 95521be
Jeremy Katz 95521be
if ! [ -z "$is_kernel_package" ]; then
Jeremy Katz 95521be
    cat > /dev/null
Jeremy Katz 95521be
    exit 0
Jeremy Katz 95521be
fi
Jeremy Katz 95521be
Jeremy Katz 95521be
print_modaliases() {
Jeremy Katz 95521be
    declare class=$1 variants=$2 pos=$3
Jeremy Katz 95521be
    if [ -n "$variants" ]; then
Jeremy Katz 95521be
	echo "${class:0:pos}[$variants]${class:pos+1}"
Jeremy Katz 95521be
    else
Jeremy Katz 95521be
	[ -z "$class" ] || echo "$class"
Jeremy Katz 95521be
    fi
Jeremy Katz 95521be
}
Jeremy Katz 95521be
Jeremy Katz 95521be
combine_modaliases() {
Jeremy Katz 95521be
    declare tag class variants pos n
Jeremy Katz 95521be
    read class
Jeremy Katz 95521be
    while read tag; do
Jeremy Katz 95521be
	for ((n=0; n<${#class}; n++)); do
Jeremy Katz 95521be
	    if [ "*" != "${class:n:1}" -a \
Jeremy Katz 95521be
		 "${class:0:n}" = "${tag:0:n}" -a \
Jeremy Katz 95521be
		 "${class:n+1}" = "${tag:n+1}" ] &&
Jeremy Katz 95521be
	       ( [ -z "$pos" ] || [ $n = $pos ] ); then
Jeremy Katz 95521be
		variants="${variants:-${class:n:1}}${tag:n:1}"
Jeremy Katz 95521be
		pos=$n
Jeremy Katz 95521be
		break
Jeremy Katz 95521be
	    fi
Jeremy Katz 95521be
	done
Jeremy Katz 95521be
	if [ $n -eq ${#class} ]; then
Jeremy Katz 95521be
	    print_modaliases "$class" "$variants" "$pos"
Jeremy Katz 95521be
	    variants=
Jeremy Katz 95521be
	    pos=
Jeremy Katz 95521be
	    class=$tag
Jeremy Katz 95521be
	fi
Jeremy Katz 95521be
    done
Jeremy Katz 95521be
    print_modaliases "$class" "$variants" "$pos"
Jeremy Katz 95521be
}
Jeremy Katz 95521be
Jeremy Katz 95521be
for module in $(grep -E '/lib/modules/.+\.ko$') $*; do
Jeremy Katz 95521be
    # | head -n1 because some modules have *two* version tags. *cough*b44*cough*
Jeremy Katz 95521be
    modver=$(/sbin/modinfo -F version "$module"| head -n1)
Jeremy Katz 95521be
    modver=${modver// /_}
Jeremy Katz 95521be
Jeremy Katz 95521be
    # only add version tag if it has a version
Jeremy Katz 95521be
    if [ -n "$modver" ]; then
Jeremy Katz 95521be
        /sbin/modinfo -F alias "$module" \
Jeremy Katz 95521be
        | sed -nre "s,(.+),modalias(\\1) = $modver,p"
Jeremy Katz 95521be
    else
Jeremy Katz 95521be
        /sbin/modinfo -F alias "$module" \
Jeremy Katz 95521be
        | sed -nre "s,(.+),modalias(\\1),p"
Jeremy Katz 95521be
    fi
Jeremy Katz 95521be
done \
Jeremy Katz 95521be
| sort -u \
Jeremy Katz 95521be
| combine_modaliases