hush/examples/depmod
Denys Vlasenko 0ef64bdb40 *: make GNU licensing statement forms more regular
This change retains "or later" state! No licensing _changes_ here,
only form is adjusted (article, space between "GPL" and "v2" and so on).

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2010-08-16 20:14:46 +02:00

58 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
#
# Simple depmod, use to generate modprobe.conf
#
# Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
#
# Licensed under GPLv2, see file LICENSE in this source tree.
#
local BASE="${1:-/usr/lib/modules}"
find "$BASE" -name '*.ko.gz' | while read I ; do
N=`basename "$I" '.ko.gz'`
echo -n "@$N"
zcat "$I" | strings | grep '^depends=' | sed -e 's/^depends=$//' -e 's/^depends=/,/' -e 's/,/ @/g'
done | awk '
{
# modules which has no dependencies are resolved
if ( NF == 1 ) { res[$1] = ""; next }
# others have to be resolved based on those which already resolved
i = $1; $1 = ""; deps[i] = $0; ++ndeps
}
END {
# resolve implicit dependencies
while ( ndeps ) for (mod in deps) {
if ( index(deps[mod], "@") > 0 ) {
$0 = deps[mod]
for ( i=1; i<=NF; ++i ) {
if ( substr($i,1,1) == "@" ) {
if ( $i in res ) {
$i = res[$i] " " substr($i,2)
}
}
}
deps[mod] = $0
} else {
res[mod] = deps[mod]
delete deps[mod]
--ndeps
}
}
# output dependencies in modules.dep format
for ( mod in res ) {
$0 = res[mod]
s = ""
delete a
for ( i=1; i<=NF; ++i ) {
if ( ! ($i in a) ) {
a[$i] = $i
s = " ," $i s
}
}
print "," substr(mod,2) ":" s
}
}
' | sort | sed -r -e "s!,([^,: ]*)!/usr/lib/modules/\\1.ko.gz!g"