#!/bin/sh
#
# Install Start/Stop Scripts
#
# Copyright (c) 2006 Avira GmbH
#

usage_exit()
{
	echo "usage: $0 <install|remove> rcscript [priority]"
	exit 1
}

add_sh_to_linkname()
{
	echo $LINKNAME | grep sh$ > /dev/null 2>&1
	if [ $? -ne 0 ]
	then
		LINKNAME=$LINKNAME.sh
	fi
}

identify_rcd()
{
	case $SYSTEM in
		freebsd)
			RCDIR="/usr/local/etc"
			if [ ! -d "$RCDIR/rc.d" ]
			then
				RCDIR=""
			fi
			;;

		gentoo|debian|suse)
			RCDIR="/etc"
			if [ ! -d "$RCDIR/init.d" ]
			then
				RCDIR=""
			fi
			;;
		darwin)
			RCDIR="/Library/StartupItems"
			if [ ! -d "$RCDIR" ]
			then
				RCDIR="/System/Library/StartupItems"
				if [ ! -d "$RCDIR" ]
				then
					SYSTEM="generic"
					RCDIR=""
				fi
			fi
			;;
	esac

	if [ -z "$RCDIR" ]
	then
		RCDIR="/etc"
		if [ ! -d "$RCDIR/rc0.d" ]
		then
			RCDIR="/etc/rc.d"
			if [ ! -d "$RCDIR/rc0.d" ]
			then
				RCDIR="/etc/init.d"
				if [ ! -d "$RCDIR/rc0.d" ]
				then
					RCDIR=""
				fi
			fi
		fi
	fi
}

remove_startup_links()
{
	case $SYSTEM in
		freebsd)
			add_sh_to_linkname
			rm -f $RCDIR/rc.d/$LINKNAME
			rm -f $RCDIR/rc.d/$LINKNAMEWITHOUTSH
			;;

		gentoo)
			add_sh_to_linkname
			/sbin/rc-update del $LINKNAME default > /dev/null 2>&1
			rm -f $RCDIR/init.d/$LINKNAME
			/sbin/rc-update del $LINKNAMEWITHOUTSH default > /dev/null 2>&1
			rm -f $RCDIR/init.d/$LINKNAMEWITHOUTSH
			;;

		debian)
			add_sh_to_linkname
			rm -f $RCDIR/init.d/$LINKNAME
			/usr/sbin/update-rc.d $LINKNAME remove > /dev/null 2>&1
			rm -f $RCDIR/init.d/$LINKNAMEWITHOUTSH
			/usr/sbin/update-rc.d $LINKNAMEWITHOUTSH remove > /dev/null 2>&1
			;;

		suse)
			add_sh_to_linkname
			/sbin/insserv -r $LINKNAME > /dev/null 2>&1
			rm -f $RCDIR/init.d/$LINKNAME
			/sbin/insserv -r $LINKNAMEWITHOUTSH > /dev/null 2>&1
			rm -f $RCDIR/init.d/$LINKNAMEWITHOUTSH
			;;

		sunos)
			rm -f $RCDIR/rc3.d/S*$LINKNAME > /dev/null 2>&1
			rm -f $RCDIR/rc0.d/K*$LINKNAME > /dev/null 2>&1
			rm -f $RCDIR/rc3.d/S*$LINKNAMEWITHOUTSH > /dev/null 2>&1
			rm -f $RCDIR/rc0.d/K*$LINKNAMEWITHOUTSH > /dev/null 2>&1
			;;

		darwin)
			rm -f $RCDIR/$LINKNAMEWITHOUTSH/* > /dev/null 2>&1
			rmdir $RCDIR/$LINKNAMEWITHOUTSH > /dev/null 2>&1
			;;
	esac

	if [ ! -z "$RCDIR" ]
	then
		for LEVEL in 0 1 2 3 4 5 6
		do
			if [ -d "$RCDIR/rc$LEVEL.d" ]
			then
				rm -f $RCDIR/rc$LEVEL.d/S??$LINKNAME > /dev/null 2>&1
				rm -f $RCDIR/rc$LEVEL.d/K??$LINKNAME > /dev/null 2>&1
				rm -f $RCDIR/rc$LEVEL.d/S??$LINKNAMEWITHOUTSH > /dev/null 2>&1
				rm -f $RCDIR/rc$LEVEL.d/K??$LINKNAMEWITHOUTSH > /dev/null 2>&1
			fi
		done
	fi
}

install_startup_links()
{
	remove_startup_links

	case $SYSTEM in
		freebsd)
			add_sh_to_linkname
			ln -sf $SRCNAME $RCDIR/rc.d/$LINKNAME
			;;

		gentoo)
			add_sh_to_linkname
			GENTOOSCRIPT="$RCDIR/init.d/$LINKNAMEWITHOUTSH"
			echo "\
#!/sbin/runscript

depend() {
	need net
	use logger dns
}

checkconfig() {
	if [ ! -f \"/etc/${LINKNAMEWITHOUTSH}.conf\" ] ; then
		return 1
	fi
	return 0
}

start() {
	ebegin \"Starting $LINKNAMEWITHOUTSH\"
	$SRCNAME start
	eend \$?
}

stop() {
	ebegin \"Stopping $LINKNAMEWITHOUTSH\"
	$SRCNAME stop
	eend \$?
}" > $GENTOOSCRIPT
			chmod 755 $GENTOOSCRIPT
			ERROR=`/sbin/rc-update add $LINKNAMEWITHOUTSH default 2>&1`
			if [ $? -ne 0 ]
			then
				echo "$ERROR" >&2
			fi
			;;

		debian)
			add_sh_to_linkname
			ln -sf $SRCNAME $RCDIR/init.d/$LINKNAMEWITHOUTSH
			ERROR=`/usr/sbin/update-rc.d $LINKNAMEWITHOUTSH defaults 2>&1`
			if [ $? -ne 0 ]
			then
				echo "$ERROR" >&2
			fi
			;;

		suse)
			add_sh_to_linkname
			ln -sf $SRCNAME $RCDIR/init.d/$LINKNAMEWITHOUTSH
			ERROR=`/sbin/insserv $LINKNAMEWITHOUTSH 2>&1`
			if [ $? -ne 0 ]
			then
				echo "$ERROR" >&2
			fi
			;;

		sunos)
			ln -sf $SRCNAME $RCDIR/rc3.d/S99zzz$LINKNAMEWITHOUTSH
			ln -sf $SRCNAME $RCDIR/rc0.d/K01aaa$LINKNAMEWITHOUTSH
			;;

		darwin)
			mkdir -p $RCDIR/$LINKNAMEWITHOUTSH > /dev/null 2>&1
			echo "\
{
  Description     = \"$LINKNAMEWITHOUTSH\";
  Provides        = (\"$LINKNAMEWITHOUTSH\");
  Requires        = (\"Network\");
  OrderPreference = \"Last\";
  Messages =
  {
    start = \"Starting $LINKNAMEWITHOUTSH\";
    stop  = \"Stopping $LINKNAMEWITHOUTSH\";
  };
}" > $RCDIR/$LINKNAMEWITHOUTSH/StartupParameters.plist
			DARWINSCRIPT="$RCDIR/$LINKNAMEWITHOUTSH/$LINKNAMEWITHOUTSH"
			echo "\
#!/bin/sh

##
# Start $SRCNAME
##

. /etc/rc.common

StartService ()
{
	if [ -f "$SRCNAME" ]
	then
		$SRCNAME start
	fi
}
StopService ()
{
	if [ -f "$SRCNAME" ]
	then
		$SRCNAME stop
	fi
}
RestartService ()
{
	if [ -f "$SRCNAME" ]
	then
		$SRCNAME restart
	fi
}

## Puma compatible way to start up...

if typeset -f RunService > /dev/null; then
        RunService \"\$1\"
else
        StartService
fi" > $DARWINSCRIPT
			chmod 755 $DARWINSCRIPT
			;;

		*)
			for LEVEL in 2 3 4 5
			do
				if [ -d "$RCDIR/rc$LEVEL.d" ]
				then
					ln -sf $SRCNAME $RCDIR/rc$LEVEL.d/S$SPRIO$LINKNAMEWITHOUTSH
				fi
			done

			for LEVEL in 0 1 6
			do
				if [ -d "$RCDIR/rc$LEVEL.d" ]
				then
					ln -sf $SRCNAME $RCDIR/rc$LEVEL.d/K$KPRIO$LINKNAMEWITHOUTSH
				fi
			done
			;;
	esac
}

if [ $# -ne 2 -a $# -ne 3 ]
then
	usage_exit
fi

if [ $# -eq 3 ]
then
	SPRIO=$3
else
	SPRIO="20"
fi
KPRIO=`expr 100 - $SPRIO`

SRCNAME=$2
LINKNAME=`echo $SRCNAME | sed -e 's/.*\///'`
LINKNAMEWITHOUTSH=`echo $LINKNAME | sed -e "s/\.sh$//"`

if [ -z "$LINKNAME" -o -z "$LINKNAMEWITHOUTSH" ]
then
	usage_exit
fi

SYSTEM=`uname | env LANG=C LC_ALL=C LC_CTYPE=C tr '[:upper:]' '[:lower:]'`

if [ "$SYSTEM" = "linux" ]
then
	if [ -f "/etc/gentoo-release" -a -x "/sbin/rc-update" ]
	then
		SYSTEM="gentoo"

	elif [ -f "/etc/debian_version" -a -x "/usr/sbin/update-rc.d" ]
	then
		SYSTEM="debian"

	elif [ -f "/etc/SuSE-release" -a -x "/sbin/insserv" ]
	then
		SYSTEM="suse"
	fi
fi

identify_rcd

if [ -z "$RCDIR" ]
then
	exit 1
fi

case $1 in
	install)
		if [ ! -f $2 ]
		then
			usage_exit
		fi

		install_startup_links
		;;

	remove)
		remove_startup_links
		;;

	*)
		exit 1
		;;
esac

exit 0

