#! /bin/sh

me=`basename $0`

usage() {
    >&2 echo usage: "$me [ --version ] [ -n, --print ] [ -f, --force ] [ filename ... ]"
    exit 1
}

nm=`which nm`

modulename() {
    pguess=0
    force=0

    while [ $# -gt 1 ]
    do
	case "$1" in
	    -n)
		pguess=1
		;;
	    -f)
		force=1
		;;
	esac
	shift
    done

    file="$1"

    if [ ! -z "$nm" ]
    then
        name=`2>/dev/null $nm $file | grep 'D [a-zA-Z_][a-zA-Z_]*module$' |
	    awk '{ print $NF }'`
    fi                                                            

    if [ -z "$name" ]
    then
    	name=`2>/dev/null sed -n 's/^module[ ]*\([^ ]*\)[ ]*=.*/\1/p' $file`
    	: ${name:=`2>/dev/null sed -n 's/^module[ ]*\([^ ]*\)[ ]*;/\1/p' $file`}
    fi

    if [ -z "$name" ]
    then
	name=`echo $file | sed -e 's,^.*/\([^/]*\),\1,' -e 's,\.[^.]*$,,'`
	if echo $name | grep -q '^mod_'
	then
	    guess=`echo $name | sed -e 's,^mod_,,' \
	    	-e 's,\([^_]*\)_\([^_]*\),\2_\1,'`

	    if [ "$name" != "$guess" ]
	    then
	    	name=${guess}_module
	    fi
	else
	    if ! echo $name | grep -q '_mod[^_]*$'
	    then
		if [ $force -eq 0 ]
		then
		    name=
		else
		    name=${name}_module
		fi
	    fi
	fi

	if [ $pguess -eq 1 -a "$name" != "" ]
	then
	    name="guessed: $name"
	fi
    fi

    echo $name
}

print=0

while [ $# -ne 0 ]
do
    case "$1" in
	--version)
	    echo $me version 0.1 by Yves Arrouye "<arrouye@debian.org>"
	    exit 0
	    ;;

	-n|--print)
	    print=1
	    amnargs="$amnargs -n"
	    ;;

	-f|--force)
	    amnargs="$amnargs -f"
	    ;;

	-*)
	    usage
	    ;;

	*)
	    if [ -e "$1" ]
	    then
		mod=`modulename $amnargs "$1"`
		if [ ! -z "$mod" ]
		then
		    if [ $print -eq 1 ]
		    then
		        echo "$1: $mod"
		    else
		        echo "$mod"
		    fi
		fi
	    fi
	    ;;
    esac
    shift
done

