#! /bin/sh -e
#
# This is the update-modules script for Debian GNU/Linux.
# Written by Wichert Akkerman <wakkerma@debian.org>
# Copyright (C) 1998, 1999 Software in the Public Interest
#

CFGFILE=/etc/conf.modules
ARCHDIR=/etc/modutils/arch
HEADER="### This file is automatically generated by update-modules"

arch() {
	local model=`uname -m`
	case $model in
		i[0-9]86) model=i386; ;;
		sun4u) model=sparc64; ;;
		arm*) model=arm; ;;
		ppc) model=powerpc; ;;
	esac
	echo $model
}

archmodel() {
	local arch=`arch`
	local model=""
	if [ $arch = "m68k" ]; then
		if [ -f /proc/hardware ]; then
			model=`cat /proc/hardware | sed -ne 's/^Model:[[:space:]]*//p'`
			case $model in
				Atari*) model="atari"; ;;
				Amiga*) model="amiga"; ;;
				Macintosh*) model="mac"; ;;
				Motorola*) model="MVME"; ;;
				*) model="generic"; ;;
			esac
			model=".${model}"
		else
			echo "/proc/hardware does not exist, assuming general m68k system"
		fi
	fi
	echo "${arch}${model}"
}


if [ -f $CFGFILE ]; then
	if ! head -1 $CFGFILE | grep -q "^$HEADER" ; then
		echo "Error: the current $CFGFILE is not automatically generated."
		if [ "$1" != "force" ]; then
			echo "Use \"`basename $0` force\" to force (re)generation."
			exit 1
		else
			echo "force specified, (re)gerating file anyway."
		fi
	fi
fi

if [ `id -u` != "0" ]; then
	echo "You have to be root to do this."
	exit 2
fi

model=`archmodel`
oldmodel=$model

while [ ! -f ${ARCHDIR}/${model} ]; do
	oldmodel=$model
	model=`echo $oldmodel | sed -e 's/\.[^.]\+//'`
	if [ "$model" = "$oldmodel" ]; then
		break
	fi
	echo "Configuration for $oldmodel not found, trying $model"
done

CONF="${ARCHDIR}/${model}"

if [ ! -f $CONF ]; then
	echo "Architecture-specific modutils configuration not found, using defaults"
	CONF="${ARCHDIR}/generic"
fi

if [ -e $CFGFILE ]; then
  mv $CFGFILE ${CFGFILE}.old
fi

echo $HEADER > $CFGFILE
cat <<EOF >> $CFGFILE
#
# Please do not edit this file directly. If you want to change or add
# anything please take a look at the files in /etc/modutils and read
# the manpage for update-modules.
#
EOF

for cfg in /etc/modutils/* $CONF ; do
	if [ -f $cfg ]; then # this check is necesarry to skip /etc/modutils/archs
		if ! echo $cfg | grep -q '\(\.dpkg-orig\|\.dpkg-dist\|~\)$' ; then
			if [ -x $cfg ]; then
				$cfg >> $CFGFILE
			else
				cat $cfg >> $CFGFILE
			fi
		fi
	fi
done

