#!/bin/bash

# echo "home: ${HOME}"
# echo "mint_home: ${MINT_HOME}"

# get the fully-resolved path to this script, after following symlinks
# README: this complexity is needed in case any symlinks are relative symlinks
script=$0
origdir=`pwd`
while [ -h "$script" ]; do
  basename=${script##*/};
  cd ${script%/*};
  tmp=`ls -l $basename | sed 's/.*-> *//'`;
  cd `dirname $tmp`;
  tmpdir=`pwd -P`;
  script=$tmpdir/${tmp##*/};
done
cd $origdir


if [ -n "$MINT_HOME" ] ; then
  if [ -f "${MINT_HOME}/langtools/etc/bashrc" ] ; then
	# echo "loading ${MINT_HOME}/langtools/etc/bashrc"
        . ${MINT_HOME}/langtools/etc/bashrc
     else 
        echo "langtools/etc/bashrc not found in ${MINT_HOME}"
        exit 1
     fi
  else 
     # try to determine path manually
     MINT_HOME=${script%/*}/../..
     if [ -f "${MINT_HOME}/langtools/etc/bashrc" ] ; then
        . ${MINT_HOME}/langtools/etc/bashrc
#     else 
#        echo "langtools/etc/bashrc not found in ${MINT_HOME}"
#        exit 1
     fi
fi

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

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

# echo $CLASSPATH
# echo ${FLAGS}
if [ ! -r ${MINT_HOME}/langtools/dist/lib/classes.jar ]; then
  echo "${MINT_HOME} does not point to a working Mint distribution";
  exit 1
fi

mintclasses=${MINT_HOME}/langtools/dist/lib/classes.jar
XMSMINVALUE=$[128*1024*1024]
XMXMINVALUE=$[128*1024*1024]
XMSVALUE=$XMSMINVALUE
XMXVALUE=$XMXMINVALUE
OTHEROPTS=""

# echo "CLASSPATH=$CLASSPATH"
# echo "MINT=$MINT"

set -- $(getopt "" -- "$@")
for i
do
  # echo "getopt: $1";
  if [[ "$1" == "-cp" ]]; then
      # echo "-cp $2"
      CLASSPATH=$MINT_CLASSPATH_PREFIX:$2
      # echo "CLASSPATH=$CLASSPATH"
      shift
  elif [[ "$1" == "-classpath" ]]; then
      # echo "-cp $2"
      CLASSPATH=$MINT_CLASSPATH_PREFIX:$2
      # echo "CLASSPATH=$CLASSPATH"
      shift
  elif [[ `echo "$1" | grep "\-Xms.*"` ]]; then
      # echo "-Xms.. $1"
      XMSSTR=${1:4}
      XMSSTRLEN=${#XMSSTR}
      # echo "XMSSTR=$XMSSTR"
      FACTOR=1
      if [[ `echo "$XMSSTR" | grep ".*[kK]"` ]]; then
	  FACTOR=1024
	  XMSSTRLEN=$[$XMSSTRLEN-1]
	  XMSSTR=${XMSSTR:0:$XMSSTRLEN}
      elif [[ `echo "$XMSSTR" | grep ".*[mM]"` ]]; then
	  FACTOR=$[1024*1024]
	  XMSSTRLEN=$[$XMSSTRLEN-1]
	  XMSSTR=${XMSSTR:0:$XMSSTRLEN}
      elif [[ `echo "$XMSSTR" | grep ".*[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 [[ `echo "$1" | grep "\-Xmx.*"` ]]; then
      # echo "-Xmx.. $1"
      XMXSTR=${1:4}
      XMXSTRLEN=${#XMXSTR}
      # echo "XMXSTR=$XMXSTR"
      FACTOR=1
      if [[ `echo "$XMXSTR" | grep ".*[kK]"` ]]; then
	  FACTOR=1024
	  XMXSTRLEN=$[$XMXSTRLEN-1]
	  XMXSTR=${XMXSTR:0:$XMXSTRLEN}
      elif [[ `echo "$XMXSTR" | grep ".*[mM]"` ]]; then
	  FACTOR=$[1024*1024]
	  XMXSTRLEN=$[$XMXSTRLEN-1]
	  XMXSTR=${XMXSTR:0:$XMXSTRLEN}
      elif [[ `echo "$XMXSTR" | grep ".*[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: mint [-options] class [args...]
           (to execute a class)
Most java options are accepted.
"
   exit 0
fi


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

export CLASSPATH
# echo "classpath: $CLASSPATH"
# echo "path: $PATH"

# set JAVA_HOME specially for OS X
if $darwin ; then
  if [ -d /System/Library/Frameworks/JavaVM.framework/Versions/1.6 ]; then
    JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home;
  else
    JAVA_HOME="/usr/local/soylatte"
  fi
  JAVA_CMD="$JAVA_HOME/bin/java"
else
  JAVA_CMD="java"
fi

$JAVA_CMD -Xbootclasspath/p:"$mintclasses" -Xms$XMSVALUE -Xmx$XMXVALUE $OTHEROPTS edu.rice.cs.mint.runtime.Mint "$@"
