#!/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.
##
################################################################################

#
# fasc shell script to launch falcon-asc.jar on OSX, Unix, or Cygwin.
# In Windows Command Prompt, use fasc.bat instead.
#

if [ "x${FALCON_HOME}" = "x" ]
then
    SCRIPT_HOME=`dirname $0`
    FALCON_HOME=${SCRIPT_HOME}/..
else
    echo Using Falcon codebase: $FALCON_HOME
fi

if [ "x${FLEX_HOME}" = "x" ]
then
    SCRIPT_HOME=`dirname $0`
    FLEX_HOME=${SCRIPT_HOME}/..
else
    echo Using Flex SDK: $FLEX_HOME
fi

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

D32=''

if [ $OS = "Windows" ]; then

	FALCON_HOME=`cygpath -m $FALCON_HOME`
	FLEX_HOME=`cygpath -m $FLEX_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 -Dflexlib="$FLEX_HOME/frameworks" -jar "${FALCON_HOME}/lib/falcon-swcdepends.jar" "$@"
