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

function follow_links() {
  while [ -h "$1" ]; do
    # On Mac OS, readlink -f doesn't work.
    1="$(readlink "$1")"
  done
  echo "$1"
}

# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
PROG_NAME="$(follow_links "$BASH_SOURCE")"

# Handle the case where dart-sdk/bin has been symlinked to.
BIN_DIR="$(follow_links "$(cd "${PROG_NAME%/*}" ; pwd -P)")"

SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"

DART2JS="$SDK_DIR/lib/_internal/compiler/implementation/dart2js.dart"

DART="$BIN_DIR/dart"

SNAPSHOT_DIR="$BIN_DIR/snapshots"
SNAPSHOT="$SNAPSHOT_DIR/utils_wrapper.dart.snapshot"

unset EXTRA_OPTIONS
declare -a EXTRA_OPTIONS

if test -t 1; then
  # Stdout is a terminal.
  if test 8 -le `tput colors`; then
    # Stdout has at least 8 colors, so enable colors.
    EXTRA_OPTIONS[${#EXTRA_OPTIONS[@]}]='--enable-diagnostic-colors'
  fi
fi

unset EXTRA_VM_OPTIONS
declare -a EXTRA_VM_OPTIONS

if test -f "$SNAPSHOT"; then
  EXTRA_OPTIONS[${#EXTRA_OPTIONS[@]}]="--library-root=$SDK_DIR"
fi

# Tell the VM to grow the heap more aggressively. This should only
# be necessary temporarily until the VM is better at detecting how
# applications use memory.
# TODO(ahe): Remove this option (http://dartbug.com/6495).
EXTRA_VM_OPTIONS[${#EXTRA_VM_OPTIONS[@]}]='--heap_growth_rate=512'

case $0 in
  *_developer)
    EXTRA_VM_OPTIONS[${#EXTRA_VM_OPTIONS[@]}]='--checked'
    ;;
esac

if test -f "$SNAPSHOT"; then
  exec "$DART" "${EXTRA_VM_OPTIONS[@]}" "$SNAPSHOT" "dart2js" \
      "${EXTRA_OPTIONS[@]}" "$@"
else
  exec "$DART" "${EXTRA_VM_OPTIONS[@]}" "$DART2JS" "${EXTRA_OPTIONS[@]}" "$@"
fi
