#! /bin/sh -e

# Naive shell script to translate modules.conf + defaults to modprobe.conf
# Normal caveats apply, as with any machine translation.
usage() {
	cat <<-EOF
		Usage: $0 [--assume-kernel=n.n.n] [--stdin] [modprobe.conf]
		   Converts your current modules setup to modprobe.conf.
		   Don't trust it too much.
		 Version 0.1
	EOF
	exit ${1:-1}
}

KV=$(uname -r)
STDIN=
while [ -n "$1" ] ; do
	case $1 in
	--assume-kernel)   KV=$2; shift;;
	--assume-kernel=*) KV=${1#*=};;
	--stdin)           STDIN=1;;
	-h|--help)         usage 0;;
	*)                 break;;
	esac
	shift
done

# Set up output if specified.
if [ $# -eq 1 ] ; then
	exec > $1
else
	usage 1
fi

MODPROBECONF=`mktemp /tmp/modprobe.XXXXXX || tempfile || echo /tmp/modprobe.$$`
trap "rm -f $MODPROBECONF" 0

modprobe_abort()
{
    echo Failed to to run modprobe.  Giving up. 1>&2
    exit 1
}

if [ x"$TESTING_MODPROBE_CONF" != x ]; then
    cp $TESTING_MODPROBE_CONF $MODPROBECONF
elif [ "$STDIN" = "1" ]; then
    cat > $MODPROBECONF
elif [ -x /sbin/modprobe.old ]; then
    # In sbin.
    /sbin/modprobe.old -c > $MODPROBECONF || modprobe_abort
elif modprobe.old -c >/dev/null 2>&1; then
    # Somewhere in path.
    modprobe.old -c > $MODPROBECONF || modprobe_abort
elif /sbin/modprobe -V 2>/dev/null | grep -q 'modprobe version'; then
    # Running /sbin/modprobe gives old version.
    /sbin/modprobe -c > $MODPROBECONF || modprobe_abort
elif modprobe -V 2>/dev/null | grep -q 'modprobe version'; then
    # Running modprobe gives old version.
    modprobe -c > $MODPROBECONF || modprobe_abort
else
    echo Cannot find old version of modprobe.  Giving up. 2>&1
    exit 1
fi

# Resolve (possibly recursive) alias: args filename alias
resolve_alias()
{
    RA_RESOLVE=`grep "^alias[ 	][ 	]*$2[ 	]" -- $1 | awk '{ print $3 }'`
    if [ x"$RA_RESOLVE" = x ]; then
	echo $2
	return
    fi
    # Recurse.
    (resolve_alias $1 "$RA_RESOLVE")
}

# Parse alias: args filename modulename aliasto.
parse_alias()
{
    PA_ALIAS=`resolve_alias $1 $3`
    NAME=`echo $2|sed -e 's/\(block\|char\)-major-\([0-9]\+\)$/\1-major-\2-*/'`

    echo "alias $NAME $PA_ALIAS"
}

# Parse options: args modulename aliasto.
parse_options()
{
    # Second arg can be null if grab_noninstall options returns empty.
    [ x"$2" = x ] || echo "options $1 $2"
}

# Separate out the modprobe options from the module options
grab_install_options()
{
    GRAB_OPTS=""
    GRAB_NEXT=0
    for grab_i; do
	case "$grab_i" in
	-o) GRAB_OPTS="$GRAB_OPTS -o"; GRAB_NEXT=1;;
	-*) echo Warning: Ignoring unknown alias option "$grab_i" >&2;;
	*)
	    [ $GRAB_NEXT = 0 ] || GRAB_OPTS="$GRAB_OPTS $grab_i"
	    GRAB_NEXT=0
	    ;;
	esac
    done
    echo "$GRAB_OPTS"
}

grab_noninstall_options()
{
    GRAB_OPTS=""
    GRAB_NEXT=0
    for grab_i; do
	case "$grab_i" in
	-o) GRAB_NEXT=1;;
	-*) ;;
	*)
	    [ $GRAB_NEXT = 1 ] || GRAB_OPTS="$GRAB_OPTS $grab_i"
	    GRAB_NEXT=0
	    ;;
	esac
    done
    echo "$GRAB_OPTS"
}

# Produce a multiple install/remove commands. Args: list, command, separator.
multi()
{
    mp_res=""
    for mp_arg in $1; do
	if [ x"$mp_res" = x ]; then mp_res="/sbin/$2 $mp_arg";
	else mp_res="$mp_res${3}/sbin/$2 $mp_arg";
	fi
    done
    echo "$mp_res"
}

# Install and remove commands frequently refer to insmod and rmmod.
# Use "modprobe --ignore-install " and "modprobe -r --ignore-remove" since 
# our versions of rmmod and insmod are deliberately stupid.
convert_command()
{
    echo "$@" | sed -e 's,insmod,/sbin/modprobe --ignore-install,' -e 's,rmmod,/sbin/modprobe -r --ignore-remove,'
}

while read ADD NAME MODULE REST; do
    # Ignore a spurious add, otherwise move them down.
    if [ x"$ADD" = x"add" ]; then :; else
	REST="`echo $MODULE $REST | sed 's/ *$//'`"
	MODULE="$NAME"
	NAME="$ADD";
    fi
    #echo "NAME=$NAME MODULE=$MODULE REST=$REST" >&2

    # MODNAME is the converted name for use in variables.
    MODNAME=`echo $MODULE | tr -c A-Za-z_0-9 _`
    case "$NAME" in
    '#'*) : ;; # Comment 
    '') : ;;   # Blank line

    keep) # Do nothing.
	;;

    alias)
	if [ x"$REST" = xoff ] || [ x"$REST" = xnull ]; then
	    INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	    eval install_$MODNAME=\"/bin/true\"
	else
	    parse_alias $MODPROBECONF "$MODULE" $REST
	fi
	;;

    options) 
	# Options used to be able to contain extra args to insmod
	# (eg. -o foo).  Not any more.
	case " $REST" in
	*' '-[-a-z]*)
	    parse_options $MODULE `grab_noninstall_options $REST`
	    INSTALL_OPTIONS=`grab_install_options $REST`
	    INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	    eval install_$MODNAME=\"/sbin/modprobe $INSTALL_OPTIONS --ignore-install `resolve_alias $MODPROBECONF $MODULE`\"
	    ;;
	*)
	    parse_options $MODULE "$REST"
	    ;;
	esac
	;;

    above)
	# Pull in these modules after me.
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval post_install_$MODNAME=\"`multi "$REST" 'modprobe' '; '`\; /bin/true\"
	REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
	eval pre_remove_$MODNAME=\"`multi "$REST" 'modprobe -r' '; '`\"
	;;
    below)
	# Pull in these modules before me.
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval pre_install_$MODNAME=\"`multi "$REST" 'modprobe' '; '`\"
	REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
	eval post_remove_$MODNAME=\"`multi "$REST" 'modprobe -r' '; '`\; /bin/true\"
	;;
    probe) 
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval install_$MODNAME=\"`multi "$REST" 'modprobe' ' || '`\"
	;;
    probeall)
	# Not quite correct.  If they all fail, we should fail.
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval install_$MODNAME=\"`multi "$REST" 'modprobe' '; '`\; /bin/true\"
	;;
    post-install)
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval post_install_$MODNAME=\"`convert_command "$REST"`\"
	;;
    pre-install)
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval pre_install_$MODNAME=\"`convert_command "$REST"`\"
	;;
    install)
	INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
	eval install_$MODNAME=\"`convert_command "$REST"`\"
	;;
    post-remove)
	REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
	eval post_remove_$MODNAME=\"`convert_command "$REST"`\"
	;;
    pre-remove)
	REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
	eval pre_remove_$MODNAME=\"`convert_command "$REST"`\"
	;;
    remove)
	REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
	eval remove_$MODNAME=\"`convert_command "$REST"`\"
	;;
    include)
	# Recurse.
	($0 $MODULE)
	;;
    # Ignore default lines which are not required any more.
    "path[boot]=/lib/modules/boot"|"path[toplevel]=/lib/modules/$KV"|"path[toplevel]=/lib/modules/2.4"|"path[kernel]=/lib/modules/kernel"|"path[fs]=/lib/modules/fs"|"path[net]=/lib/modules/net"|"path[scsi]=/lib/modules/scsi"|"path[block]=/lib/modules/block"|"path[cdrom]=/lib/modules/cdrom"|"path[ipv4]=/lib/modules/ipv4"|"path[ipv6]=/lib/modules/ipv6"|"path[sound]=/lib/modules/sound"|"path[fc4]=/lib/modules/fc4"|"path[video]=/lib/modules/video"|"path[misc]=/lib/modules/misc"|"path[pcmcia]=/lib/modules/pcmcia"|"path[atm]=/lib/modules/atm"|"path[usb]=/lib/modules/usb"|"path[ide]=/lib/modules/ide"|"path[ieee1394]=/lib/modules/ieee1394"|"path[mtd]=/lib/modules/mtd"|"generic_stringfile=/lib/modules/$KV/modules.generic_string"|"pcimapfile=/lib/modules/$KV/modules.pcimap"|"isapnpmapfile=/lib/modules/$KV/modules.isapnpmap"|"usbmapfile=/lib/modules/$KV/modules.usbmap"|"parportmapfile=/lib/modules/$KV/modules.parportmap"|"ieee1394mapfile=/lib/modules/$KV/modules.ieee1394map"|"pnpbiosmapfile=/lib/modules/$KV/modules.pnpbiosmap"|"depfile=/lib/modules/$KV/modules.dep"|"persistdir=/var/lib/modules/persist")
	;;

    # Ignore prune lines unless they end in .o or .ko, which would
    # have an effect.
    prune)
	case "$MODULE" in
	*.ko|*.o)
	    echo "Warning: not translating $NAME $MODULE $REST" >&2
	    ;;
	esac
	;;
    *)
	echo "Warning: not translating $NAME $MODULE $REST" >&2
	;;
    esac
done < $MODPROBECONF

for mod in `echo $INSTALL_COMMANDS | tr ' ' '\n' | sort -u`; do
    # MODNAME is the converted name for use in variables.
    MODNAME=`echo $mod | tr -c A-Za-z_0-9 _`
    eval PREINSTALL=\"\$pre_install_$MODNAME\"
    eval POSTINSTALL=\"\$post_install_$MODNAME\"
    eval INSTALL=\"\$\{install_$MODNAME:-/sbin/modprobe --first-time --ignore-install $mod}\"
    if [ -n "$PREINSTALL" ]; then PREINSTALL="{ $PREINSTALL; } ; "; fi
    if [ -n "$POSTINSTALL" ]; then POSTINSTALL="&& { $POSTINSTALL; }"; fi
    echo install $mod $PREINSTALL $INSTALL $POSTINSTALL
done

for mod in `echo $REMOVE_COMMANDS | tr ' ' '\n' | sort -u`; do
    # MODNAME is the converted name for use in variables.
    MODNAME=`echo $mod | tr -c A-Za-z_0-9 _`
    eval PREREMOVE=\"\$pre_remove_$MODNAME\"
    eval POSTREMOVE=\"\$post_remove_$MODNAME\"
    eval REMOVE=\"\$\{remove_$MODNAME:-/sbin/modprobe -r --first-time --ignore-remove $mod}\"
    if [ -n "$PREREMOVE" ]; then PREREMOVE="{ $PREREMOVE; } ; "; fi
    if [ -n "$POSTREMOVE" ]; then POSTREMOVE="&& { $POSTREMOVE; }"; fi
    echo remove $mod $PREREMOVE $REMOVE $POSTREMOVE
done
