home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / usr / lib / rpm / find-supplements.ksyms < prev    next >
Text File  |  2006-11-29  |  2KB  |  90 lines

  1. #! /bin/sh
  2.  
  3. RPM_SOURCE_DIR=/usr/src/packages/SOURCES
  4. IFS=$'\n'
  5.  
  6. case "$1" in
  7. kernel-module-*)    ;; # Fedora kernel module package names start with
  8.                # kernel-module.
  9. kernel*)       is_kernel_package=1 ;;
  10. esac
  11.  
  12. if ! [ -z "$is_kernel_package" ]; then
  13.     cat > /dev/null
  14.     exit 0
  15. fi
  16.  
  17. print_modaliases() {
  18.     declare class=$1 variants=$2 pos=$3
  19.     if [ -n "$variants" ]; then
  20.     echo "${class:0:pos}[$variants]${class:pos+1}"
  21.     else
  22.     [ -z "$class" ] || echo "$class"
  23.     fi
  24. }
  25.  
  26. combine_modaliases() {
  27.     declare tag class variants pos n
  28.     read class
  29.     while read tag; do
  30.     for ((n=0; n<${#class}; n++)); do
  31.         if [ "*" != "${class:n:1}" -a \
  32.          "${class:0:n}" = "${tag:0:n}" -a \
  33.          "${class:n+1}" = "${tag:n+1}" ] &&
  34.            ( [ -z "$pos" ] || [ $n = $pos ] ); then
  35.         variants="${variants:-${class:n:1}}${tag:n:1}"
  36.         pos=$n
  37.         break
  38.         fi
  39.     done
  40.     if [ $n -eq ${#class} ]; then
  41.         print_modaliases "$class" "$variants" "$pos"
  42.         variants=
  43.         pos=
  44.         class=$tag
  45.     fi
  46.     done
  47.     print_modaliases "$class" "$variants" "$pos"
  48. }
  49.  
  50. aliases_of_filelist() {
  51.     for module in $(grep -E '/lib/modules/.+\.ko$'); do
  52.     vermagic=$(/sbin/modinfo -F vermagic "$module")
  53.     krel=${vermagic%% *}
  54.     /sbin/modinfo -F alias "$module" \
  55.     | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
  56.     done
  57. }
  58.  
  59. aliases_of_specfile_macro() {
  60.     declare regex
  61.  
  62.     regex=$(
  63.     set -o noglob
  64.     set -- $(sed -ne 's:^%supplements_kernel_module[ \t]::p' \
  65.              $RPM_SOURCE_DIR/$1.spec)
  66.     while [ $# -ge 1 ]; do
  67.         regex=$(echo "$1" \
  68.             | sed -e 's:[.]:\\.:g' \
  69.               -e 's:?:.:g' \
  70.               -e 's:\*:.*:g' \
  71.               -e 's:\\:\\\\:g')
  72.         echo -n "^$regex\$"
  73.         [ $# -ge 2 ] && echo -n "|"
  74.         shift
  75.     done
  76.     )
  77.  
  78.     if [ -n "$regex" ]; then
  79.     awk '
  80.     $1 == "alias" && $3 ~ regex { print $2 }
  81.     ' regex="$regex" /lib/modules/*/modules.alias
  82.     fi
  83. }
  84.  
  85. (   aliases_of_filelist
  86.     aliases_of_specfile_macro "$1"
  87. ) \
  88. | sort -u \
  89. | combine_modaliases
  90.