#!/bin/sh
# Try and be like autotools configure, but without autotools

# Ensure that we do not inherit these from env
OS=
BUILD=
HOST=
TARGET=
RESTARTCMD=
RCDIR=

for x do
	opt=${x%%=*}
	var=${x#*=}
	case "$opt" in
	--os|OS) OS=$var;;
	--with-cc|CC) CC=$var;;
	--debug) DEBUG=$var;;
	--disable-debug) DEBUG=no;;
	--enable-debug) DEBUG=yes;;
	--prefix) PREFIX=$var;;
	--sysconfdir) SYSCONFDIR=$var;;
	--bindir|--sbindir) SBINDIR=$var;;
	--libexecdir) LIBEXECDIR=$var;;
	--statedir|--localstatedir) STATEDIR=$var;;
	--dbdir) DBDIR=$var;;
	--rundir) RUNDIR=$var;;
	--mandir) MANDIR=$var;;
	--with-ccopts|CFLAGS) CFLAGS=$var;;
	CPPFLAGS) CPPFLAGS=$var;;
	--build) BUILD=$var;;
	--host) HOST=$var;;
	--target) TARGET=$var;;
	--libdir) LIBDIR=$var;;
	--restartcmd) RESTARTCMD=$var;;
	--includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";;
	--datadir|--infodir) ;; # ignore autotools
	--disable-maintainer-mode|--disable-dependency-tracking) ;;
	--help) echo "See the README file for available options"; exit 0;;
	*) echo "$0: WARNING: unknown option $opt" >&2;;
	esac
done

if [ -z "$LIBEXECDIR" ]; then
	printf "Checking for directory /libexec ... "
	if [ -d /libexec ]; then
		echo "yes"
		LIBEXECDIR=$PREFIX/libexec/resolvconf
	else
		echo "no"
		LIBEXECDIR=$PREFIX/lib/resolvconf
	fi
fi
if [ -z "$RUNDIR" ]; then
	printf "Checking for directory /run ... "
	if [ -d /run ]; then
		echo "yes"
		RUNDIR=/run
	else
		echo "no"
		RUNDIR=/var/run
	fi
fi	

: ${SED:=sed}

: ${SYSCONFDIR:=$PREFIX/etc}
: ${SBINDIR:=$PREFIX/sbin}
: ${LIBEXECDIR:=$PREFIX/libexec/resolvconf}
: ${STATEDIR:=/var}
: ${RUNDIR:=$STATEDIR/run}
: ${MANDIR:=${PREFIX:-/usr}/share/man}

eval SYSCONFDIR="$SYSCONFDIR"
eval SBINDIR="$SBINDIR"
eval LIBEXECDIR="$LIBEXECDIR"
eval VARDIR="$RUNDIR/resolvconf"
eval MANDIR="$MANDIR"

CONFIG_MK=config.mk

if [ -z "$BUILD" ]; then
	# autoconf target triplet: cpu-vendor-os
	BUILD=$(uname -m)-unknown-$(uname -s | tr '[:upper:]' '[:lower:]')
fi
: ${HOST:=$BUILD}

if [ -z "$OS" ]; then
	echo "Deriving operating system from ... $HOST"
	# Derive OS from cpu-vendor-[kernel-]os
	CPU=${HOST%%-*}
	REST=${HOST#*-}
	if [ "$CPU" != "$REST" ]; then
		VENDOR=${REST%%-*}
		REST=${REST#*-}
		if [ "$VENDOR" != "$REST" ]; then
			# Use kernel if given, otherwise os
			OS=${REST%%-*}
		else
			# 2 tupple
			OS=$VENDOR
			VENDOR=
		fi
	fi

        # Work with cpu-kernel-os, ie Debian
	case "$VENDOR" in
	linux*|kfreebsd*) OS=$VENDOR; VENDOR= ;;
	esac
	# Special case
	case "$OS" in
	gnu*) OS=hurd;; # No HURD support as yet
	esac
fi

echo "Configuring openresolv for ... $OS"
rm -rf $CONFIG_MK
echo "# $OS" >$CONFIG_MK

for x in SYSCONFDIR SBINDIR LIBEXECDIR VARDIR MANDIR; do
	eval v=\$$x
	# Make files look nice for import
	l=$((10 - ${#x}))
	unset t
	[ $l -gt 3 ] && t="	"
	echo "$x=$t	$v" >>$CONFIG_MK
done

if [ -z "$RESTARTCMD" ]; then
	printf "Checking for systemd ... "
	if [ -x /bin/systemctl ]; then
		RESTARTCMD="/bin/systemctl try-restart \1"
		echo "yes"
	elif [ -x /usr/bin/systemctl ]; then
		RESTARTCMD="/usr/bin/systemctl try-restart \1"
		echo "yes"
	else
		echo "no"
	fi
fi

# Arch upgraded to systemd, so this check has to be just after systemd
# but higher than the others
if [ -z "$RESTARTCMD" ]; then
	printf "Checking for Arch ... "
	if [ -e /etc/arch-release -a -d /etc/rc.d ]; then
		RCDIR=/etc/rc.d
		RESTARTCMD="[ -e /var/run/daemons/\1 ] \&\& /etc/rc.d/\1 restart"
		echo "yes"
	else
		echo "no"
	fi
fi

if [ -z "$RESTARTCMD" ]; then
	printf "Checking for OpenRC ... "
	if [ -x /sbin/rc-service ]; then
		RESTARTCMD="if /sbin/rc-service -e \1; then /sbin/rc-service \1 -- -Ds restart; fi"
		echo "yes"
	else
		echo "no"
	fi
fi
if [ -z "$RESTARTCMD" ]; then
	printf "Checking for invoke-rc.d ... "
	if [ -x /usr/sbin/invoke-rc.d ]; then
		RCDIR=/etc/init.d
		RESTARTCMD="if /usr/sbin/invoke-rc.d --quiet \1 status >/dev/null 2>\&1; then /usr/sbin/invoke-rc.d \1 restart; fi"
		echo "yes"
	else
		echo "no"
	fi
fi
if [ -z "$RESTARTCMD" ]; then
	printf "Checking for service ... "
	if [ -x /sbin/service ]; then
		RCDIR=/etc/init.d
		RESTARTCMD="if /sbin/service \1; then /sbin/service \1 restart; fi"
		echo "yes"
	else
		echo "no"
	fi
fi
if [ -z "$RESTARTCMD" ]; then
	printf "Checking for runit... "
	if [ -x /bin/sv ]; then
		RESTARTCMD="/bin/sv try-restart \1"
		echo "yes"
	elif [ -x /usr/bin/sv ]; then
		RESTARTCMD="/usr/bin/sv try-restart \1"
		echo "yes"
	else
		echo "no"
	fi
fi
if [ -z "$RESTARTCMD" ]; then
	for x in /etc/init.d/rc.d /etc/rc.d /etc/init.d; do
		printf "Checking for $x ... "
		if [ -d $x ]; then
			RCDIR=$x
			RESTARTCMD="if $x/\1 status >/dev/null 2>\&1; then $x/\1 restart; fi"
			echo "yes"
			break
		else
			echo "no"
		fi
	done
fi

if [ -z "$RESTARTCMD" ]; then
	echo "$0: WARNING: No means of interacting with system services detected!"
	exit 1
fi

echo "RCDIR=		$RCDIR" >>$CONFIG_MK
# Work around bug in the dash shell as "echo 'foo \1'" does bad things
printf "%s\n" "RESTARTCMD=	$RESTARTCMD" >>$CONFIG_MK

echo
echo "   SYSCONFDIR =		$SYSCONFDIR"
echo "   SBINDIR =		$SBINDIR"
echo "   LIBEXECDIR =		$LIBEXECDIR"
echo "   VARDIR =		$RUNDIR"
echo "   MANDIR =		$MANDIR"
echo
