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

set -e

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

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 1
}

export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}

case "${1//_/-}" in
  abcompile) SCRIPT="${TOOL_DIR}/abcompile.dart";;
  analyzer-compile) SCRIPT="${TOOL_DIR}/analyzer_compile.dart";;
  compile) SCRIPT="${TOOL_DIR}/compile.dart";;
  compile-platform) SCRIPT="${TOOL_DIR}/compile_platform.dart";;
  compile-platform-dartk)
    SCRIPT="${TOOL_DIR}/compile_platform_dartk.dart"
    if [ "$#" != "2" ]; then
      stop "Usage: $1 file"
    fi
    ;;
  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";;
  run) SCRIPT="${TOOL_DIR}/run.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
    ;;
  kernel-service)
    shift
    PATCHED_SDK_DIR=$(
      ls -d {xcodebuild,out}/${DART_CONFIGURATION}/patched_sdk 2>/dev/null \
        | head -1)
    exec "${DART_VM}" -DDFE_VERBOSE=true \
         --platform=${PATCHED_SDK_DIR}/platform.dill \
         --dfe="${REPO_DIR}/utils/kernel-service/kernel-service.dart" "$@"
    ;;
  testing)
    SCRIPT="${REPO_DIR}/pkg/testing/bin/testing.dart"
    set -- "$@" "--config=${REPO_DIR}/pkg/front_end/test/fasta/testing.json"
    ;;
  generate-messages) SCRIPT="${TOOL_DIR}/generate_messages.dart";;
  *)
    stop "'$1' isn't a valid subcommand."
    ;;
esac

shift

exec "${DART_VM}" -c "${SCRIPT}" "$@"
