#!/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[@]}" $@
