#!/bin/bash --posix
# Copyright (c) 2013, 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/dartanalyzer/dartanalyzer.jar ] ; then
  DART_ANALYZER_LIBS=$DART_SDK_HOME/util/dartanalyzer
elif [ -f $DART_ANALYZER_HOME/util/dartanalyzer/dartanalyzer.jar ] ; then
  DART_ANALYZER_LIBS=$DART_ANALYZER_HOME/util/dartanalyzer
else
  echo "Configuration problem. Couldn't find dartanalyzer.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 -jar \
  "$DART_ANALYZER_LIBS/dartanalyzer.jar" ${DART_SDK} $@
