#!/bin/bash
#
# /usr/lib/systemd/system-generators/arch-daemons
#

. /etc/rc.conf

[[ $1 ]] || exit 1

# when called at boot, this is /run/systemd/generator.late
dest=$3

# list of services that have to be started before the next one
deps=()

# Check if $1 is a valid daemon name
have_daemon() {
  [[ -f /etc/rc.d/$1 && -x /etc/rc.d/$1 ]]
}

# Make service file
create_unit() {
  local deps= daemon=${1%.service}

  if ! have_daemon $daemon; then
    return
  fi

  (( $# > 1 )) && printf -v deps 'After=%s\n' "${*:2}"

  printf \
'[Unit]
SourcePath=/etc/rc.conf
Documentation=man:arch-daemons(8)
Description=Legacy unit for %s
%s
[Service]
ExecStart=/etc/rc.d/%s start
ExecStop=/etc/rc.d/%s stop
RemainAfterExit=yes
Type=forking
' "$daemon" "$deps" "$daemon" "$daemon" > "$dest/$1"

}

for daemon in /etc/rc.d/*; do
  create_unit "${daemon##*/}".service
done

[[ -d $dest/arch-daemons.target.wants ]] || /bin/mkdir -p "$dest/arch-daemons.target.wants"

for daemon in "${DAEMONS[@]}"; do
  service="$daemon.service"
  case ${daemon:0:1} in
    '!') continue ;;
    '@') create_unit "${service:1}" "${deps[@]}"
         ln -s "../${service:1}" "$dest/arch-daemons.target.wants"
        ;;
    *) create_unit "$service" "${deps[@]}"
       deps+=("$service")
       ln -s "../$service" "$dest/arch-daemons.target.wants"
      ;;
   esac
done

# vim: et sw=2:
