#!/bin/bash
# Copyright (c) 2017, 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.

# TODO(ahe): This should be replaced by a Dart script that works on Windows,
# Linux, and Mac.

set -e

REPO_DIR="$(cd ${BASH_SOURCE%/*} && git rev-parse --show-toplevel)"

DART_VM=${DART_VM-"${REPO_DIR}/sdk/bin/dart"}

TOOL_DIR="${REPO_DIR}/pkg/front_end/tool/_fasta"

KERNEL_BIN="${REPO_DIR}/pkg/kernel/bin"

function stop {
  echo "$@" >&2
  exit 2
}

export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}

EXTRA_VM_ARGS=()

while [[ "$1" == -* ]]; do
  EXTRA_VM_ARGS+=("$1")
  shift
done

case "${1//_/-}" in
  abcompile) SCRIPT="${TOOL_DIR}/abcompile.dart";;
  compile) SCRIPT="${TOOL_DIR}/compile.dart";;
  compile-platform) SCRIPT="${TOOL_DIR}/compile_platform.dart";;
  log) SCRIPT="${TOOL_DIR}/log_analyzer.dart";;
  logd) SCRIPT="${TOOL_DIR}/log_collector.dart";;
  outline) SCRIPT="${TOOL_DIR}/outline.dart";;
  parser) SCRIPT="${TOOL_DIR}/parser.dart";;
  scanner) SCRIPT="${TOOL_DIR}/scanner.dart";;
  dump-ir)
    SCRIPT="${KERNEL_BIN}/dump.dart"
    if [ "$#" = "2" ]; then
      # Write to stdout if no target is given.
      set -- "$@" /dev/fd/1
    fi
    if [ "$#" != "3" ]; then
      stop "Usage: $1 dillfile [output]"
    fi
    ;;
  testing)
    SCRIPT="${REPO_DIR}/pkg/testing/bin/testing.dart"
    set -- "$@" "--config=${REPO_DIR}/pkg/front_end/testing.json"
    ;;
  generate-messages) SCRIPT="${TOOL_DIR}/generate_messages.dart";;
  generate-experimental-flags) SCRIPT="${TOOL_DIR}/generate_experimental_flags.dart";;
  *)
    stop "'$1' isn't a valid subcommand."
    ;;
esac

shift

exec "${DART_VM}" "${EXTRA_VM_ARGS[@]}" --enable-asserts "${SCRIPT}" "$@"
