#!/bin/sh

################################################################################
##
##  Licensed to the Apache Software Foundation (ASF) under one or more
##  contributor license agreements.  See the NOTICE file distributed with
##  this work for additional information regarding copyright ownership.
##  The ASF licenses this file to You under the Apache License, Version 2.0
##  (the "License"); you may not use this file except in compliance with
##  the License.  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
##  Unless required by applicable law or agreed to in writing, software
##  distributed under the License is distributed on an "AS IS" BASIS,
##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
##  See the License for the specific language governing permissions and
##  limitations under the License.
##
################################################################################

SCRIPT_HOME=`dirname "$0"`

if [ "x${ROYALE_COMPILER_HOME}" = "x" ]
then
    ROYALE_COMPILER_HOME=${SCRIPT_HOME}/../../compiler
fi

echo Using Royale codebase: $ROYALE_COMPILER_HOME

if [ "x${ROYALE_HOME}" = "x" ]
then
    ROYALE_HOME=${ROYALE_COMPILER_HOME}/generated/dist/sdk
fi
echo Using Royale SDK: $ROYALE_HOME

case `uname` in
        CYGWIN*)
            OS="Windows"
        ;;
        *)
            OS=Unix
esac

D32=''

if [ $OS = "Windows" ]; then
    ROYALE_COMPILER_HOME=`cygpath -m $ROYALE_COMPILER_HOME`
    ROYALE_HOME=`cygpath -m $ROYALE_HOME`
elif [ $OS = "Unix" ]; then
    check64="`java -version 2>&1 | grep -i 64-Bit`"
    isOSX="`uname | grep -i Darwin`"
    javaVersion="`java -version 2>&1 | awk -F '[ ".]+' 'NR==1 {print $3 "." $4}'`"

    if [ "$isOSX" != "" -a "$HOSTTYPE" = "x86_64" -a "$check64" != "" -a "$javaVersion" = "1.6" ]; then
        D32='-d32'
    fi
fi

VMARGS="-Xmx384m -Dsun.io.useCanonCaches=false "

java $VMARGS $D32 $SETUP_SH_VMARGS -Droyalecompiler="$ROYALE_COMPILER_HOME" -Droyalelib="$ROYALE_HOME/frameworks" -jar "$SCRIPT_HOME/../lib/codegraph.jar" +royalelib="$ROYALE_HOME/frameworks" "$@"