#!/bin/sh

set -e
set -u

os="$1"
net="$2"
rc_libexecdir="$3"
sysconfdir="$4"

init_d_dir="${sysconfdir}/init.d"
leveldir="${sysconfdir}/runlevels"
sysinitdir="${leveldir}/sysinit"
bootdir="${leveldir}/boot"
defaultdir="${leveldir}/default"
nonetworkdir="${leveldir}/nonetwork"
shutdowndir="${leveldir}/shutdown"

sysinit=
case "${os}" in
	Linux)
		sysinit="${sysinit} cgroups devfs dmesg sysfs"
		;;
esac

boot="bootmisc fsck hostname localmount loopback root swap sysctl"
if [ "${net}" = yes ]; then
	boot="${boot} network staticroute"
fi
boot_BSD="hostid newsyslog savecore syslogd urandom"

case "${os}" in
	DragonFly)
		boot="${boot} ${boot_BSD}"
		;;
	FreeBSD|GNU-kFreeBSD)
		boot="${boot} ${boot_BSD} adjkerntz dumpon modules syscons"
		;;
	Linux)
		boot="${boot} binfmt hwclock keymaps modules mtab procfs
		save-keymaps save-termencoding seedrng termencoding"
		;;
	NetBSD)
		boot="${boot} ${boot_BSD} devdb swap-blk tys wscons"
		;;
esac

default="local netmount"

nonetwork="local"

shutdown="savecache"
case "${os}" in
	Linux)
		shutdown="${shutdown} killprocs mount-ro"
		;;
esac

if ! test -d "${DESTDIR}${sysinitdir}"; then
	install -d "${DESTDIR}${sysinitdir}"
	for x in ${sysinit}; do
		ln -snf "${init_d_dir}/$x" "${DESTDIR}${sysinitdir}/$x"
	done
fi

if ! test -d "${DESTDIR}${bootdir}"; then
	install -d "${DESTDIR}${bootdir}"
	for x in ${boot}; do
		ln -snf "${init_d_dir}/$x" "${DESTDIR}${bootdir}/$x"
	done
fi

if ! test -d "${DESTDIR}${defaultdir}"; then
	install -d "${DESTDIR}${defaultdir}"
	for x in ${default}; do
		ln -snf "${init_d_dir}/$x" "${DESTDIR}${defaultdir}/$x"
	done
fi

if ! test -d "${DESTDIR}${nonetworkdir}"; then
	install -d "${DESTDIR}${nonetworkdir}"
	for x in ${nonetwork}; do
		ln -snf "${init_d_dir}/$x" "${DESTDIR}${nonetworkdir}/$x"
	done
fi

if ! test -d "${DESTDIR}${shutdowndir}"; then
	install -d "${DESTDIR}${shutdowndir}"
	for x in ${shutdown}; do
		ln -snf "${init_d_dir}/$x" "${DESTDIR}${shutdowndir}/$x"
	done
fi

ln -snf "${rc_libexecdir}"/sh/functions.sh "${DESTDIR}/${init_d_dir}"
