#!/bin/sh

# echo "home: ${HOME}"
# echo "ngc_loaded_config: ${NGC_LOADED_CONFIG}"
# echo "ngc_home: ${NGC_HOME}"

if [ -z "$NGC_LOADED_CONFIG" ] ; then
  if [ -n "$NGC_HOME" ] ; then
     if [ -f "${NGC_HOME}/etc/bashrc" ] ; then
	# echo "loading ${NGC_HOME}/etc/bashrc"
        . ${NGC_HOME}/etc/bashrc
     else 
        echo "etc/bashrc not found in ${NGC_HOME}"
        return
     fi
  elif [ -f "${HOME}/nextgen2/etc/bashrc" ] ; then
        . ${HOME}/nextgen2/etc/bashrc
  else 
     # try to determine path manually
     PRG="$0"
     NGC_HOME=`dirname "$PRG"`/..
     NGC_HOME=`cd "$NGC_HOME" && pwd`
     if [ -f "${NGC_HOME}/etc/bashrc" ] ; then
        . ${NGC_HOME}/etc/bashrc
     else 
        echo "etc/bashrc not found in ${NGC_HOME}"
        return
     fi
  fi
fi

# Determine client OS
cygwin=false;
case "`uname`" in
  CYGWIN*) cygwin=true ;;
esac

pathsep=":"
if $cygwin ; then
   pathsep=";"
fi

# echo $CLASSPATH
# echo ${FLAGS}
# if [ ! -r ${NGC_HOME}/nextgen2.jar ]; then
#   echo '${NGC_HOME} does not point to a working NGC distribution';
#   exit 1
# fi

XMSMINVALUE=$[128*1024*1024]
XMXMINVALUE=$[128*1024*1024]
XMSVALUE=$XMSMINVALUE
XMXVALUE=$XMXMINVALUE
OTHEROPTS=""

# NGCCLASSPATH=${NGC}/built/:${NGC}/lib/junit.jar:${NGC}/lib/bcel.jar:${NGC}/lib/asm-2.1.jar:${NGC}/lib/asm-tree-2.1.jar

# CLASSPATH=${CLASSPATH}:${NGCCLASSPATH}

# echo "CLASSPATH=$CLASSPATH"
# echo "NGC=$NGC"

set -- $(getopt "" -- "$@")
for i
do
  # echo "getopt: $1";
  if [[ "$1" =~ "-cp" ]]; then
      # echo "-cp $2"
      CLASSPATH=$NGC_CLASSPATH_PREFIX:$2
      # echo "CLASSPATH=$CLASSPATH"
      shift
  elif [[ "$1" =~ "-classpath" ]]; then
      # echo "-cp $2"
      CLASSPATH=$NGC_CLASSPATH_PREFIX:$2
      # echo "CLASSPATH=$CLASSPATH"
      shift
  elif [[ "$1" =~ "-Xms.*" ]]; then
      # echo "-Xms.. $1"
      XMSSTR=${1:4}
      XMSSTRLEN=${#XMSSTR}
      # echo "XMSSTR=$XMSSTR"
      FACTOR=1
      if [[ "$XMSSTR" =~ ".*[kK]" ]]; then
	  FACTOR=1024
	  XMSSTRLEN=$[$XMSSTRLEN-1]
	  XMSSTR=${XMSSTR:0:$XMSSTRLEN}
      elif [[ "$XMSSTR" =~ ".*[mM]" ]]; then
	  FACTOR=$[1024*1024]
	  XMSSTRLEN=$[$XMSSTRLEN-1]
	  XMSSTR=${XMSSTR:0:$XMSSTRLEN}
      elif [[ "$XMSSTR" =~ ".*[gG]" ]]; then
	  FACTOR=$[1024*1024*1024]
	  XMSSTRLEN=$[$XMSSTRLEN-1]
	  XMSSTR=${XMSSTR:0:$XMSSTRLEN}
      else
	  FACTOR=1
      fi
      # echo $FACTOR
      # echo "XMSSTR=$XMSSTR"
      NEWXMSVALUE=$[$FACTOR*$XMSSTR]
      if [ "$NEWXMSVALUE" -gt "$XMSMINVALUE" ]; then
	  XMSVALUE=$NEWXMSVALUE
      else
	  echo "Warning: Ignoring $1, must be at least 128M"
      fi
      # echo $XMSVALUE
  elif [[ "$1" =~ "-Xmx.*" ]]; then
      # echo "-Xmx.. $1"
      XMXSTR=${1:4}
      XMXSTRLEN=${#XMXSTR}
      # echo "XMXSTR=$XMXSTR"
      FACTOR=1
      if [[ "$XMXSTR" =~ ".*[kK]" ]]; then
	  FACTOR=1024
	  XMXSTRLEN=$[$XMXSTRLEN-1]
	  XMXSTR=${XMXSTR:0:$XMXSTRLEN}
      elif [[ "$XMXSTR" =~ ".*[mM]" ]]; then
	  FACTOR=$[1024*1024]
	  XMXSTRLEN=$[$XMXSTRLEN-1]
	  XMXSTR=${XMXSTR:0:$XMXSTRLEN}
      elif [[ "$XMXSTR" =~ ".*[gG]" ]]; then
	  FACTOR=$[1024*1024*1024]
	  XMXSTRLEN=$[$XMXSTRLEN-1]
	  XMXSTR=${XMXSTR:0:$XMXSTRLEN}
      else
	  FACTOR=1
      fi
      # echo $FACTOR
      # echo "XMXSTR=$XMXSTR"
      NEWXMXVALUE=$[$FACTOR*$XMXSTR]
      if [ "$NEWXMXVALUE" -gt "$XMXMINVALUE" ]; then
	  XMXVALUE=$NEWXMXVALUE
      else
	  echo "Warning: Ignoring $1, must be at least 128M"
      fi
      # echo $XMXVALUE
  else
    case "$1" in 
	-jar) echo "No -jar support right now."; exit 1;;
	-[a-z]*) OTHEROPTS="$OTHEROPTS $1";;
	--[a-z]*) OTHEROPTS="$OTHEROPTS $1";;
	--) ;;
	*) break;;
    esac
  fi
  shift
done

# echo "CLASSPATH=$CLASSPATH"
# echo "OTHEROPTS=$OTHEROPTS"
# echo "rest     =$*"

# no jar support right now
#   or  java [-options] -jar jarfile [args...]
#           (to execute a jar file)

if [ ! "$*" ]; then
   echo "Usage: nextgen [-options] class [args...]
           (to execute a class)

where options include, among other things: 
    -client       to select the \"client\" VM
    -server       to select the \"server\" VM
Most java options are accepted.
"
   exit 0
fi


if $cygwin ; then
   CLASSPATH=`cygpath -p -w "${CLASSPATH}"`
fi 

export CLASSPATH

java -Xms$XMSVALUE -Xmx$XMXVALUE $OTHEROPTS edu.rice.cs.nextgen2.classloader.Runner $*
