]> TLD Linux GIT Repositories - packages/rpm-tld-macros.git/blob - kmod-deps.sh
- merged 2.029 from PLD
[packages/rpm-tld-macros.git] / kmod-deps.sh
1 #!/bin/sh
2
3 # Kernel module dependency extractor.
4 #
5 # Author(s):    Danny Tholen <obiwan@mandriva.org>
6 #               Olivier Blin <blino@mandriva.org>
7 #               Per Ã˜yvind Karlsen <peroyvind@mandriva.org>
8
9
10 provides=0
11 requires=0
12 modinfo=/sbin/modinfo
13
14 while [ "$#" -ne 0 ]; do
15     case $1 in
16         -P|--provides)
17             provides=1
18             ;;
19         -R|--requires)
20             requires=1
21             ;;
22         --modinfo)
23             shift
24             modinfo=$1
25             ;;
26     esac
27     shift
28 done
29
30 if [ $requires -eq 1 ]; then
31     echo "--requires not implemented!" 1>&2
32     exit 1
33 fi
34
35 if [ $provides -eq 1 ]; then
36     provideslist=`sed "s/['\"]/\\\&/g"`
37     modulelist=$(echo "$provideslist" | egrep '^.*(/lib/modules/|/var/lib/dkms/).*\.ko(\.gz|\.xz)?$')
38     echo $modulelist | xargs -r $modinfo | \
39         perl -lne '
40     $name = $1 if m!^filename:\s*(?:.*/)?([^/]+)\.k?o!;
41     $ver = $1 if /^version:\s*[a-zA-Z]{0,6}\-?(\d+[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*-?[a-zA-Z]{0,6}\d?).*/;
42     $ver =~ s/(\:|-)/_/;
43     if (/^vermagic:/) {
44         print "kmod\($name\)" . ($ver ? " = $ver" : "") if $name;
45         undef $name; undef $ver;
46     }
47     '
48     dkmslist=$(echo "$provideslist" | egrep '(/var/lib/dkms-binary/[^/]+/[^/]+|/usr/src)/[^/]+/dkms.conf$')
49     [ -n "$dkmslist" ] && for d in $dkmslist; do
50         VERSION=`sed -rne 's/^PACKAGE_VERSION="?([^"]+)"?$/\1/;T;p' $d`
51         [ -z "$VERSION" ] && continue
52         PACKAGE_NAME=`sed -rne 's/^PACKAGE_NAME="?([^"]+)"?$/\1/;T;p' $d`
53         MODULES=`sed -rne 's/^DEST_MODULE_NAME\[[0-9]+\]="?([^"]+)"?$/\1/;T;p' $d`
54         [ -z "$MODULES" ] && MODULES=`sed -rne 's/^BUILT_MODULE_NAME\[[0-9]+\]="?([^"]+)"?$/\1/;T;p' $d`
55         # default on PACKAGE_NAME if no BUILT_MODULE_NAME is specified
56         [ -z "$MODULES" ] && MODULES=$PACKAGE_NAME
57         echo "$MODULES" | sed -re "s/\\\$PACKAGE_NAME/$PACKAGE_NAME/" | while read m; do
58             echo "kmod($m) = $VERSION"
59         done
60     done
61 fi