#!/bin/sh

# Find and set DESTDIR
if [ ! -n ${DESTDIR} ]; then
    export DESTDIR="$1"
    if [ ! -n ${DESTDIR} ] || [ "${DESTDIR}" = "overwrite" ]; then
       export DESTDIR=""
       #if unset, it will do $DESTDIR/wherever, resulting in /
    fi
fi
mkdir -p "${DESTDIR}/etc/initng"

#echo "DESTDIR: ${DESTDIR}"


check_and_add() {
    TARGET=""
    ls /etc/rc2.d/S*$1* >/dev/null 2>&1
    if [ "$?" = "0" ] ; then
        TARGET="$2"
    fi
    
    ls /etc/runlevels/*/*$1* >/dev/null 2>&1
    if [ "$?" = "0" ] ; then
        TARGET="$2"
    fi
    
    if [ ! -z "$TARGET" ]; then
        echo "Adding $2 to $3.runlevel"
        echo "$2" >> "${DESTDIR}/etc/initng/$3.runlevel"
	return 1
    fi
    return 0
}


gen_system() {
echo "system/initial
system/mountroot
system/mountfs
system/bootmisc
system/clock
system/hostname
system/modules
system/static-modules
system/hdparm
system/keymaps
system/urandom
system/consolefont
system/swap
system/coldplug
net/lo" > ${DESTDIR}/etc/initng/system.runlevel

if [ -x /usr/sbin/readahead ] || [ -x /sbin/readahead ]; then
  if [ -e /etc/readahead ]; then
      echo "Adding readahead, NOTE, if you have /usr mounted on another partition:"
      echo "  cp /usr/sbin/readahead /sbin/readahead"
      echo "system/readahead" >> ${DESTDIR}/etc/initng/system.runlevel
  fi
fi

if [ -e /etc/raidtab ]; then
    echo "system/sraid" >> ${DESTDIR}/etc/initng/system.runlevel
fi

## Getty:
if [ -x /sbin/agetty ]; then
  echo "daemon/agetty" >> ${DESTDIR}/etc/initng/system.runlevel
elif [ -x /sbin/getty ]; then
  echo "daemon/getty" >> ${DESTDIR}/etc/initng/system.runlevel
elif [ -x /sbin/mingetty ]; then
  echo "daemon/mingetty" >> ${DESTDIR}/etc/initng/system.runlevel
else
  echo "Failed to find getty/agetty/mingetty, you must set that manually in /etc/initng/system.runlevel"
fi
}

gen_default() {
echo "system" > ${DESTDIR}/etc/initng/default.runlevel


#Add the correct dm for Debian/Ubuntu
if [ -f /etc/debian_version ] ; then
    dm=`sed -ne 's:^/usr/bin/::p' /etc/X11/default-display-manager`
    case "${dm}" in
        gdm) 
            echo "Adding daemon/gdm to default.runlevel"
            echo "daemon/gdm" >> ${DESTDIR}/etc/initng/default.runlevel
        ;;
        kdm)
            echo "Adding daemon/kdm to default.runlevel"
           echo "daemon/kdm" >> ${DESTDIR}/etc/initng/default.runlevel
        ;;
        xdm)
           echo "Adding daemon/xdm to default.runlevel"
            echo "daemon/xdm" >> ${DESTDIR}/etc/initng/default.runlevel
        ;;
    esac  

    #Create /dev/MAKEDEV during boot
    echo "system/makedev" >> ${DESTDIR}/etc/initng/system.runlevel

else
    check_and_add gdm daemon/gdm default
    check_and_add kdm daemon/kdm default
    check_and_add xdm daemon/xdm default
fi


check_and_add ssh daemon/sshd default
check_and_add samba daemon/samba default

#add acpid
if [ -e /usr/sbin/acpid ]; then
    echo "Adding daemon/acpid to default.runlevel"
    echo "daemon/acpid" >> ${DESTDIR}/etc/initng/default.runlevel
fi

#add dbus
if [ -e /usr/bin/dbus-daemon ]; then
    echo "Adding daemon/dbus to default.runlevel"
    echo "daemon/dbus" >> ${DESTDIR}/etc/initng/default.runlevel
fi

# add hald
if ls /etc/dbus*/event.d/*hal* >/dev/null 2>&1; then
    echo "Adding daemon/hald to default.runlevel"
    echo "daemon/hald" >> ${DESTDIR}/etc/initng/default.runlevel
fi

# Add cron
if [ -e /usr/sbin/cron ]; then
    check_and_add cron daemon/vixie-cron default
elif [ -e /usr/sbin/dcron ]; then
    check_and_add cron daemon/dcron default
fi

# Networks thru ifplugd
if [ -e /usr/sbin/ifplugd ]; then
        echo "Adding daemon/ifplugd to default.runlevel"
	echo "daemon/ifplugd" >> ${DESTDIR}/etc/initng/default.runlevel
else
        echo "Adding net/eth0 to default.runlevel"
	echo "net/eth0" >> ${DESTDIR}/etc/initng/default.runlevel
fi
    
# Alsasound
if [ -d /proc/asound ]; then
        echo "Adding system/alsasound to default.runlevel"
	echo "system/alsasound" >> ${DESTDIR}/etc/initng/default.runlevel
fi

# Speed freq.
if [ -d /sys/devices/system/cpu/cpu0/cpufreq ]; then
        echo "Adding system/speedfreq to default.runlevel"
	echo "system/speedstep" >> ${DESTDIR}/etc/initng/default.runlevel
fi

# Laptop Mode (Less hardrive on battery)
if [ -e /usr/sbin/laptop-mode ] || [ -e /usr/sbin/laptop_mode ]; then
        echo "Adding system/laptop-mode to default.runlevel"
	echo "system/laptop-mode" >> ${DESTDIR}/etc/initng/default.runlevel
fi

#Syslogd
if [ -e /sbin/syslogd ]; then
        echo "Adding daemon/syslogd to default.runlevel"
        echo "daemon/syslogd" >> ${DESTDIR}/etc/initng/default.runlevel
fi

}

echo "Automatically generating system,runlevel,default.runlevel and up.runlevel"
if [ -e ${DESTDIR}/etc/initng/system.runlevel ] && [ -e ${DESTDIR}/etc/initng/default.runlevel ] && [ -e ${DESTDIR}/etc/initng/up.runlevel ] && [ "$1" != "overwrite" ]; then
  echo "Runlevels already exists, force overwrite with ./gen_system_runlevel overwrite"
  exit 0
fi


if [ -e ${DESTDIR}/etc/initng/system.runlevel ] && [ "$1" != "overwrite" ]; then
  echo "system.runlevel already exists, skipping..."
else
  gen_system
fi

if [ -e ${DESTDIR}/etc/initng/default.runlevel ] && [ "$1" != "overwrite" ]; then
  echo "default.runlevel already exists, skipping..."
else
  gen_default
fi

echo "Done generating files."
