X-Git-Url: https://git.tld-linux.org/?p=packages%2Frpm-tld-macros.git;a=blobdiff_plain;f=kmod-deps.sh;fp=kmod-deps.sh;h=a78598b41df9ab8d18bc48e4fcdd71097a6e6856;hp=0000000000000000000000000000000000000000;hb=208adebc7b42418e7fea34d3a573e0e8b03e36bd;hpb=04aa83ed7a5c08323cec49e49f5972dca66352d3 diff --git a/kmod-deps.sh b/kmod-deps.sh new file mode 100755 index 0000000..a78598b --- /dev/null +++ b/kmod-deps.sh @@ -0,0 +1,61 @@ +#!/bin/sh + +# Kernel module dependency extractor. +# +# Author(s): Danny Tholen +# Olivier Blin +# Per Øyvind Karlsen +# + +provides=0 +requires=0 +modinfo=/sbin/modinfo + +while [ "$#" -ne 0 ]; do + case $1 in + -P|--provides) + provides=1 + ;; + -R|--requires) + requires=1 + ;; + --modinfo) + shift + modinfo=$1 + ;; + esac + shift +done + +if [ $requires -eq 1 ]; then + echo "--requires not implemented!" 1>&2 + exit 1 +fi + +if [ $provides -eq 1 ]; then + provideslist=`sed "s/['\"]/\\\&/g"` + modulelist=$(echo "$provideslist" | egrep '^.*(/lib/modules/|/var/lib/dkms/).*\.ko(\.gz|\.xz)?$') + echo $modulelist | xargs -r $modinfo | \ + perl -lne ' + $name = $1 if m!^filename:\s*(?:.*/)?([^/]+)\.k?o!; + $ver = $1 if /^version:\s*[a-zA-Z]{0,6}\-?(\d+[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*[\.\:\-\[\]]?\d*-?[a-zA-Z]{0,6}\d?).*/; + $ver =~ s/(\:|-)/_/; + if (/^vermagic:/) { + print "kmod\($name\)" . ($ver ? " = $ver" : "") if $name; + undef $name; undef $ver; + } + ' + dkmslist=$(echo "$provideslist" | egrep '(/var/lib/dkms-binary/[^/]+/[^/]+|/usr/src)/[^/]+/dkms.conf$') + [ -n "$dkmslist" ] && for d in $dkmslist; do + VERSION=`sed -rne 's/^PACKAGE_VERSION="?([^"]+)"?$/\1/;T;p' $d` + [ -z "$VERSION" ] && continue + PACKAGE_NAME=`sed -rne 's/^PACKAGE_NAME="?([^"]+)"?$/\1/;T;p' $d` + MODULES=`sed -rne 's/^DEST_MODULE_NAME\[[0-9]+\]="?([^"]+)"?$/\1/;T;p' $d` + [ -z "$MODULES" ] && MODULES=`sed -rne 's/^BUILT_MODULE_NAME\[[0-9]+\]="?([^"]+)"?$/\1/;T;p' $d` + # default on PACKAGE_NAME if no BUILT_MODULE_NAME is specified + [ -z "$MODULES" ] && MODULES=$PACKAGE_NAME + echo "$MODULES" | sed -re "s/\\\$PACKAGE_NAME/$PACKAGE_NAME/" | while read m; do + echo "kmod($m) = $VERSION" + done + done +fi