#!/bin/sh
#
# (c) 2002 Sun Microsystems, Inc. Use is subject to license terms.  
#
# Get Grid Engine architecture and set architecutre dependent variables.
# This script is *sourced* by the installation procedure
#
# There are also a couple of shell functions defined which are used by other
# Grid Engine utility script.
#

ARCH=UNKNOWN

if [ -f util/arch ]; then
   ARCH=`util/arch`
elif [ "$SGE_ROOT" != "" -a -x $SGE_ROOT/util/arch ]; then
      ARCH=`$SGE_ROOT/util/arch`
else
   echo "can't find script \$SGE_ROOT/util/arch"
   exit 1
fi

ROOTGROUP=root

case $ARCH in
 solaris|solaris64|solaris86)
   AWK=/usr/bin/nawk
   ECHO=/usr/bin/echo
   RC_FILE=sysv_rc
   RC_PREFIX=/etc
   RC_DIR=rc2.d
   XTERM=/usr/openwin/bin/xterm
   MAILER=/bin/mailx
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/sbin/in.telnetd
   RLOGIN_DAEMON=/usr/sbin/in.rlogind
   GETTEXT=/usr/bin/gettext
   ;;
 alinux|glinux|slinux|ia64linux|lx24-amd64)
   AWK=/usr/bin/gawk
   ECHO="/bin/echo -e"
   if [ -x /sbin/insserv ]; then
      # SuSe 7.1 and higher uses insserv to add the startup script
      RC_FILE=insserv-linux
      RC_PREFIX=/etc/init.d
      RC_DIR=unused
   else
      RC_FILE=sysv_rc
      RC_PREFIX=/etc/rc.d
      RC_DIR=rc3.d
   fi
   XTERM=/usr/bin/X11/xterm
   MAILER=/bin/mail
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/sbin/in.telnetd
   RLOGIN_DAEMON=/usr/sbin/in.rlogind
   GETTEXT=/usr/bin/gettext
   ;;
 osf4|tru64)
   AWK=/usr/bin/nawk
   ECHO=/usr/bin/echo
   RC_FILE=sysv_rc
   RC_PREFIX=/sbin
   RC_DIR=rc3.d
   XTERM=/usr/bin/X11/xterm
   MAILER=/usr/bin/Mail
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/sbin/telnetd
   RLOGIN_DAEMON=/usr/sbin/rlogind
   ;;
 irix6|irix65)
   AWK=/usr/bin/nawk
   ECHO=/sbin/echo
   RC_FILE=sysv_rc
   RC_PREFIX=/etc
   RC_DIR=rc2.d
   XTERM=/usr/bin/X11/xterm
   MAILER=/usr/sbin/Mail
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/etc/telnetd
   RLOGIN_DAEMON=/usr/etc/rlogind
   ;;
 hp10|hp11|hp11-64)
   AWK=/usr/bin/awk
   ECHO=/bin/echo
   RC_FILE=sysv_rc
   RC_DIR=rc2.d
   RC_PREFIX=/sbin
   XTERM=/usr/bin/X11/xterm
   MAILER=/usr/bin/mailx
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/lbin/telnetd
   RLOGIN_DAEMON=/usr/lbin/rlogind
   ;;
 aix42|aix43|aix51)
   AWK=/usr/bin/nawk
   ECHO=/usr/bin/echo
   RC_FILE=/etc/rc
   XTERM=/usr/bin/X11/aixterm
   MAILER=/usr/bin/Mail
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/sbin/telnetd
   RLOGIN_DAEMON=/usr/sbin/rlogind
   ;;
 cray|crayts|craytsieee)
   AWK=/usr/bin/nawk
   ECHO=/bin/echo
   RC_FILE=/etc/rc
   XTERM=/usr/bin/X11/xterm
   MAILER=/usr/bin/mailx
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/etc/telnetd
   RLOGIN_DAEMON=/etc/rlogind
   ;;
 necsx4|necsx5|sx)
   AWK=/usr/bin/nawk
   ECHO=/usr/bin/echo
   RC_FILE=
   XTERM=/usr/bin/X11/xterm
   MAILER=/usr/bin/mailx
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/sbin/in.telnetd
   RLOGIN_DAEMON=/usr/sbin/in.rlogind
   ;;
 fbsd-*)
   AWK=/usr/bin/awk
   ECHO="/bin/echo"
   RC_FILE=freebsd
   RC_PREFIX=/usr/local/etc/rc.d
   RC_SUFFIX=.sh
   XTERM=/usr/X11R6/bin/xterm
   MAILER=/usr/bin/mail
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/libexec/telnetd
   RLOGIN_DAEMON=/usr/libexec/rlogind
   GETTEXT=/usr/local/bin/gettext
   ROOTGROUP=wheel
   ;;
 darwin)
   AWK=/usr/bin/awk
   ECHO=/bin/echo
   RC_FILE=SGE
   RC_DIR=SGE
   RC_PREFIX=/Library/StartupItems
   if [ -x /sw/bin/Eterm ]; then
      XTERM=/sw/bin/Eterm
   else
      XTERM=/usr/bin/X11/xterm
   fi
   MAILER=/usr/bin/mail
   QLOGIN_COMMAND=telnet
   QLOGIN_DAEMON=/usr/libexec/telnetd
   RLOGIN_DAEMON=/usr/libexec/rlogind
   ROOTGROUP=wheel
   ;;
 *)
   echo "Architecture $ARCH not supported by this procedure!"
   exit 1
   ;;
esac

TOUCH=touch
RM=rm
MKDIR=mkdir
CHMOD=chmod
CHOWN=chown
CP=cp
MV=mv

# Some of the following shell function require this variable set to false or
# true
#
autoinst=false

#-------------------------------------------------------------------------
# Enter: input is read and returned to stdout. If input is empty echo $1
#
# USES: variable "$autoinst" 
#
Enter()
{
   if [ "$autoinst" = true ]; then
      $ECHO $1
   else
      read INP
      if [ "$INP" = "" ]; then
         $ECHO $1
      else
         $ECHO $INP
      fi
   fi
}

#-------------------------------------------------------------------------
# Execute command and exit if exit status != 0
#
Execute()
{
   if [ "$verbose" = true ]; then
      $ECHO $*
   fi
   $*
   if [ $? != 0 ]; then
      $INFOTEXT -e "\nCommand failed: %s\n\n" \
                   "Probably a permission problem. Please check file access permissions.\n" \
                   "Check root read/write permission. Check if SGE daemons are running.\n\n" \
                   "$*"
      exit 1
   fi
}

#-------------------------------------------------------------------------
# Execute command as user $ADMINUSER and exit if exit status != 0
# if ADMINUSER = default then execute command unchanged
#
# uses binary "adminrun" form SGE distribution
#
# USES: variables "$verbose"    (if set to "true" print arguments)
#                  $ADMINUSER   (if set to "default" do not use "adminrun)
#                 "$V5UTILBIN"  (path to the binary in utilbin)
#
ExecuteAsAdmin()
{
   if [ "$verbose" = true ]; then
      $ECHO $*
   fi

   if [ $ADMINUSER = default ]; then
      $*
   else
      $V5UTILBIN/adminrun $ADMINUSER $*
   fi

   if [ $? != 0 ]; then
      $INFOTEXT -e "\nCommand failed: %s\n\n" \
                   "Probably a permission problem. Please check file access permissions.\n" \
                   "Check root read/write permission. Check if SGE daemons are running.\n\n" \
                   "$*"
      exit 1
   fi
   return 0
}

#-------------------------------------------------------------------------
# CreateAndMakeWriteable
# create $1 as file and make it writable for everybody
# uses variable $ADMINUSER
#
CreateAndMakeWriteable()
{
   ExecuteAsAdmin $TOUCH $1
   if [ $ADMINUSER != default ]; then
      ExecuteAsAdmin $CHMOD 666 $1
   fi
}

#-------------------------------------------------------------------------
# TruncCreateAndMakeWriteable
# delete $1 as file and make it writable for everybody
#
TruncCreateAndMakeWriteable()
{
   if [ -f $1 ]; then
      ExecuteAsAdmin $RM $1 
   fi
   CreateAndMakeWriteable $1
}

#--------------------------------------------------------------------------
# SetAdminUser
#   set ADMINUSER from global cluster config
#   exit if cluster config does not exist
#
SetAdminUser()
{
   cfgname=$SGE_ROOT/$SGE_CELL/common/configuration
 
   if [ -f $cfgname ]; then
      user=`env LC_ALL=C grep admin_user $cfgname | env LC_ALL=C awk '{ print $2 }'`
   else
      $INFOTEXT -e "Global cluster configuration >%s< doesn't exist. Exit." $cfgname
      exit 1
   fi
 
   if [ `echo "$user"| env LC_ALL=C tr "A-Z" "a-z"` = "none" ]; then
      ADMINUSER=default
   else
      ADMINUSER=$user
   fi
}
