#!/bin/sh
### BEGIN INIT INFO
# Provides:          distcc
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: simple distributed compiler client and server
### END INIT INFO
#
# distccd Debian init.d script contributed by Jason Thomas.  (Debian #161136)
#
# skeleton	example file to build /etc/init.d/ scripts.
#		This file should be used to construct scripts for /etc/init.d.
#
#		Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#		Modified for Debian GNU/Linux
#		by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Version:	@(#)skeleton  1.9.1  08-Apr-2002  miquels@cistron.nl
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/distccd
NAME=distcc
DESC="Distributed Compiler Daemon"
DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --daemon"
# please change those variables by overriding them in /etc/defaults/distcc
ALLOWEDNETS="127.0.0.1"

# Reads config file (will override defaults above)
[ -r /etc/default/distcc ] && . /etc/default/distcc

test -x $DAEMON || exit 0

set -e

# Source function library.
. /etc/init.d/functions

# construct access list
ALLOW=""
for net in $ALLOWEDNETS
do
	ALLOW="$ALLOW --allow $net"
done

should_start() {
	if [ "$STARTDISTCC" != "true" ] && [ "$STARTDISTCC" != "YES" ]; then
		echo "STARTDISTCC is set to false in /etc/default/distcc"
		echo "$DAEMON not starting"
		exit 0
	fi
	# we need permission to write to the pid file
	touch /var/run/$NAME.pid
	chown distcc /var/run/$NAME.pid
}

case "$1" in
  start)
	should_start
	echo -n "Starting $DESC: $NAME"
	start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
	--exec $DAEMON -- $DAEMON_ARGS $ALLOW ||
	{
	    code=$?
	    echo "$0: start failed with error code $code" >&2
	    exit $code
	}
	echo "."
	;;
  stop)
	echo -n "Stopping $DESC: $NAME"
	start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
		--exec $DAEMON ||
	{
	    code=$?
	    echo "$0: stop failed with error code $code" >&2
	    exit $code
	}
	rm -f /var/run/$NAME.pid >/dev/null 2>&1
	echo "."
	;;
  restart|force-reload)
	#
	#	If the "reload" option is implemented, move the "force-reload"
	#	option to the "reload" entry above. If not, "force-reload" is
	#	just the same as "restart".
	#
	echo -n "Restarting $DESC: $NAME"
	start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
		--exec $DAEMON
	sleep 1
	should_start
	start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
		--exec $DAEMON -- $DAEMON_ARGS $ALLOW ||
	{
	    code=$?
	    rm -f /var/run/$NAME.pid >/dev/null 2>&1
	    echo "$0: restart failed with error code $code" >&2
	    exit $code
	}
	echo "."
	;;

   status)
	status $DAEMON
	exit $?
	;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
	exit 1
	;;
esac

exit 0


