#!/bin/bash --posix
# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

set -e

# Setting SCRIPT_DIR this way is ugly, but is needed to handle the case where
# dart-sdk/bin has been symlinked to. On MacOS, readlink doesn't work
# with this case.
SCRIPT_DIR="$(cd "${0%/*}" ; pwd -P)"
DART_ANALYZER_HOME="$(cd "${SCRIPT_DIR%/*}" ; pwd -P)"

FOUND_BATCH=0
FOUND_SDK=0
for ARG in "$@"
do
  case $ARG in
    -batch|--batch)
      FOUND_BATCH=1
      ;;
    --dart-sdk)
      FOUND_SDK=1
      ;;
    *)
      ;;
  esac
done

DART_SDK=""
if [ $FOUND_SDK = 0 ] ; then
  if [ -f $DART_ANALYZER_HOME/lib/core/core.dart ] ; then
    DART_SDK="--dart-sdk $DART_ANALYZER_HOME"
  else
    DART_SDK_HOME=$(dirname $DART_ANALYZER_HOME)/dart-sdk
    if [ -d $DART_SDK_HOME ] ; then
      DART_SDK="--dart-sdk $DART_SDK_HOME"
    else
      DART_SDK_HOME=$(dirname $DART_SDK_HOME)/dart-sdk
      if [ -d $DART_SDK_HOME ] ; then
        DART_SDK="--dart-sdk $DART_SDK_HOME"
      else
        echo "Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument"
      fi
    fi
  fi
fi

if [ -f $DART_SDK_HOME/util/analyzer/dart_analyzer.jar ] ; then
  DART_ANALYZER_LIBS=$DART_SDK_HOME/util/analyzer
elif [ -f $DART_ANALYZER_HOME/util/analyzer/dart_analyzer.jar ] ; then
  DART_ANALYZER_LIBS=$DART_ANALYZER_HOME/util/analyzer
else
  echo "Configuration problem. Couldn't find dart_analyzer.jar."
  exit 1
fi

if [ -x /usr/libexec/java_home ]; then
  export JAVA_HOME=$(/usr/libexec/java_home -v '1.6+')
fi

EXTRA_JVMARGS="-Xss2M "
OS=`uname | tr "[A-Z]" "[a-z]"`
if [ "$OS" == "darwin" ] ; then
  # Bump up the heap on Mac VMs, some of which default to 128M or less.
  # Users can specify DART_JVMARGS in the environment to override this
  # setting.
  EXTRA_JVMARGS+=" -Xmx256M -client "
else
  # On other architectures
  # -batch invocations will do better with a server vm
  # invocations for analyzing a single file do better with a client vm
  if [ $FOUND_BATCH = 0 ] ; then
    EXTRA_JVMARGS+=" -client "
  fi
fi

exec java $EXTRA_JVMARGS $DART_JVMARGS -ea -classpath "@CLASSPATH@" \
  com.google.dart.compiler.DartCompiler ${DART_SDK} $@
