#!/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"
