From 95521bebac1aaca719bd99dbf055e5c4e67b3932 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Jun 19 2007 15:23:29 +0000 Subject: add support for find-provides.d dir; use for modalias tracking (from jcm) --- diff --git a/find-provides b/find-provides index 9aac576..c2f200c 100755 --- a/find-provides +++ b/find-provides @@ -71,6 +71,14 @@ done | sort -u echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/redhat/find-provides.libtool | sort -u # +# --- any other extra find-provides scripts +for i in /usr/lib/rpm/redhat/find-provides.d/*.prov +do + [ -x $i ] && + (echo $filelist | tr '[:blank:]' \\n | $i | sort -u) +done + +# # --- pkgconfig [ -x /usr/lib/rpm/redhat/find-provides.pkgconfig ] && echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/redhat/find-provides.pkgconfig | sort -u diff --git a/find-provides.d/modalias.prov b/find-provides.d/modalias.prov new file mode 100644 index 0000000..e6e4bd6 --- /dev/null +++ b/find-provides.d/modalias.prov @@ -0,0 +1,76 @@ +#! /bin/sh + +# heavily based upon find-suggests.ksyms by Andreas Gruenbacher . +# with modifications by Michael Brown +# +# -- added module versioning info to modalias() symbols +# -- removed code which inspects spec files. + +IFS=$'\n' + +# +# Initially, dont generate modalias() lines for kernel package. This needs +# additional discussion. Would like to eventually add them for +# completeness, so that we can determine when drivers are folded into +# mainline kernel. +# +case "$1" in +kernel-module-*) ;; # Fedora kernel module package names start with + # kernel-module. +kernel*) is_kernel_package=1 ;; +esac + +if ! [ -z "$is_kernel_package" ]; then + cat > /dev/null + exit 0 +fi + +print_modaliases() { + declare class=$1 variants=$2 pos=$3 + if [ -n "$variants" ]; then + echo "${class:0:pos}[$variants]${class:pos+1}" + else + [ -z "$class" ] || echo "$class" + fi +} + +combine_modaliases() { + declare tag class variants pos n + read class + while read tag; do + for ((n=0; n<${#class}; n++)); do + if [ "*" != "${class:n:1}" -a \ + "${class:0:n}" = "${tag:0:n}" -a \ + "${class:n+1}" = "${tag:n+1}" ] && + ( [ -z "$pos" ] || [ $n = $pos ] ); then + variants="${variants:-${class:n:1}}${tag:n:1}" + pos=$n + break + fi + done + if [ $n -eq ${#class} ]; then + print_modaliases "$class" "$variants" "$pos" + variants= + pos= + class=$tag + fi + done + print_modaliases "$class" "$variants" "$pos" +} + +for module in $(grep -E '/lib/modules/.+\.ko$') $*; do + # | head -n1 because some modules have *two* version tags. *cough*b44*cough* + modver=$(/sbin/modinfo -F version "$module"| head -n1) + modver=${modver// /_} + + # only add version tag if it has a version + if [ -n "$modver" ]; then + /sbin/modinfo -F alias "$module" \ + | sed -nre "s,(.+),modalias(\\1) = $modver,p" + else + /sbin/modinfo -F alias "$module" \ + | sed -nre "s,(.+),modalias(\\1),p" + fi +done \ +| sort -u \ +| combine_modaliases