mirror of
https://github.com/sheumann/hush.git
synced 2024-11-13 14:06:21 +00:00
58 lines
1.2 KiB
Bash
58 lines
1.2 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Simple depmod, use to generate modprobe.conf
|
|
#
|
|
# Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
|
|
#
|
|
# Licensed under GPLv2
|
|
#
|
|
|
|
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"
|