#!/bin/sh

resolve_symlink  ()
{ 
   TARGET=`ls -l $1| awk '/\ ->\ /{print $NF}'`

   if [ -n "$TARGET" ] ; then
      RESULT="$TARGET"
      case "$RESULT" in
         /*) break ;;				# absolute symlink
         *)  RESULT=`dirname $0`/"$RESULT" ;;	# relative symlink
      esac
   else
      RESULT=$1
   fi

   echo "$RESULT"
}

UNAME=`uname -s 2>/dev/null | tr '[:upper:]' '[:lower:]'`
ARCH=`uname -pm 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr ' ' '-'`

if [ -z "$JAVA_HOME" ] ; then
    JAVA=`which java`
    if [ -z "$JAVA" ] ; then
	echo "Cannot find JAVA. Please set your PATH or \$JAVA_HOME."
	exit 1
    fi
else
    if [ "$UNAME" = "darwin" ] ; then
    JAVA=`which java`
    if [ -z "$JAVA" ] ; then
	echo "Cannot find JAVA. Please set your PATH or \$JAVA_HOME."
	exit 1
    fi
# other OS
    else
	JRE=$JAVA_HOME/jre
	JAVA=$JRE/bin/java
    fi
fi
echo "Using JDK installation from:      $JAVA_HOME"


# For debugging reasons disable JIT (otherwise strace doesn't work)
JAVA_OPTIONS=
#JAVA_OPTIONS=-classic

# Uncomment the following definition for remote debugging on port 1234
#JAVA_OPTIONS='-DKeyDebugFlag=on -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1234'

#
# Now $KEY_HOME  
#

if [ -z "$KEY_HOME" ] ; then
   KEY_HOME=`resolve_symlink "$0"`	# resolve symlink name
   KEY_HOME=`dirname $KEY_HOME`		# strip executable filename
   KEY_HOME=`cd "$KEY_HOME";pwd`	# and now expand the path to full
   KEY_HOME=`dirname $KEY_HOME`		# strip bin/ sirectory
fi
echo "Using KeY installation from:      $KEY_HOME"


if [ -z "$KEY_LIB" ] ; then
   KEY_LIB="$KEY_HOME/key-ext-jars"
else
echo "Using libraries from:             $KEY_LIB"
fi


#
# KeY CLASSPATH
#

key_ext_jars="antlr.jar recoderKey.jar"

keyclasspath="$KEY_HOME/system/key.jar"

for i in $key_ext_jars ; do
    current_jar="$KEY_LIB/$i"
    if [ ! -f "$current_jar" ]
    then
       echo Cannot find $current_jar. 
       echo Copy or link the file into the
       echo $KEY_LIB directory.
       exit 1
    else
       keyclasspath="${keyclasspath}:$current_jar"
    fi
done

#
# KeY-specific command line options
#

keysysprops=""
while [ $# -ne 0 ]; do
    case $1 in
        -keydebug) keysysprops="${keysysprops}-DKeyDebugFlag=on "
            shift
            continue;;

        -server) keysysprops="${keysysprops}-server "
            shift
            continue;;

        -debugclassloader) keysysprops="${keysysprops}-DKeyDebugClassLoader=on "
            shift
            continue;;

        -*)  keysysprops="${keysysprops}${1} "
            shift
            continue;;

        *)  keyarg="${keyarg}${1} "
            shift
            continue;;
    esac
done	

if [ ! -d "$HOME/.key" ]
then
mkdir "$HOME/.key"
fi


# Fallback for KeY-specific binaries
PATH=${PATH}:$KEY_LIB
export PATH


#
# This command actually runs KeY
#
#-server \
#-XX:CompileThreshold=1500 \

$JAVA $JAVA_OPTIONS $keysysprops \
-ea:de.uka.ilkd.key... -Xms64m -Xmx1024m \
-Dkey.home="$KEY_HOME" \
-Dkey.simplify.logdir="$KEY_SIMPLIFY_LOG_DIR" \
-Dkey.ics.logdir="$KEY_ICS_LOG_DIR" \
-Dsun.awt.exception.handler=de.uka.ilkd.key.gui.ExceptionalHandler \
-classpath "$keyclasspath" de.uka.ilkd.key.core.Main $keyarg
