#!/bin/sh
#
# innotek VirtualBox
#
#  Copyright (C) 2006-2007 innotek GmbH
# 
#  This file is part of VirtualBox Open Source Edition (OSE), as
#  available from http://www.virtualbox.org. This file is free software;
#  you can redistribute it and/or modify it under the terms of the GNU
#  General Public License as published by the Free Software Foundation,
#  in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
#  distribution. VirtualBox OSE is distributed in the hope that it will
#  be useful, but WITHOUT ANY WARRANTY of any kind.

PATH="/usr/bin:/bin:/usr/sbin:/sbin"
CONFIG="/etc/vbox/vbox.cfg"

if [ ! -r "$CONFIG" ]; then
    echo "Could not find VirtualBox installation. Please reinstall."
    exit 1
fi
	
. "$CONFIG"

# Note: This script must not fail if the module was not successfully installed
#       because the user might not want to run a VM but only change VM params!

if [ "$1" = "shutdown" ]; then
    SHUTDOWN="true"
elif [ ! -e /lib/modules/`uname -r`/misc/vboxdrv.ko ]; then
	cat << EOF
WARNING: There is no module available for the current kernel (`uname -r`).
         Please recompile the kernel module and install it by:
	
	 sudo emerge -1 app-emulation/virtualbox-modules

	 You will not be able to start VMs until this problem is fixed.
EOF
elif ! lsmod|grep -q vboxdrv; then
    cat << EOF
WARNING: The vboxdrv kernel module is not loaded.
         Please load the kernel module by:

           sudo modprobe vboxdrv

         You will not be able to start VMs until this problem is fixed.
EOF
elif [ ! -c /dev/vboxdrv ]; then
    cat << EOF
WARNING: The character device /dev/vboxdrv does not exist.
	 Please try to reload the kernel module by:

           sudo rmmod vboxdrv; sleep 2; sudo modprobe vboxdrv

         and if that is not successful, try to re-install the package by:

	   sudo emerge -1 app-emulation/virtualbox-modules

	 You will not be able to start VMs until this problem is fixed.
EOF
elif [ ! -w /dev/vboxdrv ]; then
    if [ "`id | grep vboxusers`" = "" ]; then
        cat << EOF
WARNING: You are not a member of the "vboxusers" group.
	 Please add yourself to this group before starting VirtualBox.

	 You will not be able to start VMs until this problem is fixed.
EOF
    else
        cat << EOF
WARNING: /dev/vboxdrv not writable for some reason.
	 If you recently added the current user to the "vboxusers" group
	 then you have to logout and re-login to take the change effect.

	 You will not be able to start VMs until this problem is fixed.
EOF
    fi
elif [ ! -e /usr/lib/libhal.so ]; then
	cat << EOF
WARNING: libhal was not found on this system.
	 This can create several side effects thus problems,
	 when accessing host resources (eg: Cd/Dvd readers).

	 The use of "sys-apps/hal" is still recommended, please install it
	 to meet this requirement by:

	 	sudo emerge sys-apps/hal
EOF
fi

export LD_LIBRARY_PATH="$INSTALL_DIR${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"

SERVER_PID=`ps -U \`whoami\` | grep VBoxSVC | awk '{ print $1 }'`
if [ -z "$SERVER_PID" ]; then
    # Server not running yet/anymore, cleanup socket path.
    # See IPC_GetDefaultSocketPath()!
    if [ -n "$LOGNAME" ]; then
        rm -rf /tmp/.vbox-$LOGNAME-ipc > /dev/null 2>&1
    else
        rm -rf /tmp/.vbox-$USER-ipc > /dev/null 2>&1
    fi
fi

if [ "$SHUTDOWN" = "true" ]; then
    if [ -n "$SERVER_PID" ]; then
        kill -TERM $SERVER_PID
        sleep 2
    fi
    exit 0
fi

APP=`which $0`
APP=${APP##/*/}
case "$APP" in
  VirtualBox)
    exec "$INSTALL_DIR/VirtualBox" "$@"
  ;;
  VBoxManage)
    exec "$INSTALL_DIR/VBoxManage" "$@"
  ;;
  VBoxSDL)
    exec "$INSTALL_DIR/VBoxSDL" "$@"
  ;;
  VBoxHeadless)
  exec "$INSTALL_DIR/VBoxHeadless" "$@"
  ;;
  *)
    echo "Unknown application - $APP"
  ;;
esac