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

# Run pub.dart on the Dart VM. This script is only used when running pub from
# within the Dart source repo. The shipped SDK instead uses "pub_sdk", which is
# renamed to "pub" when the SDK is built.

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

# 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="$(cd "${PROG_NAME%/*}" ; pwd -P)"

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

SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot"

unset VM_OPTIONS
declare -a VM_OPTIONS

# Allow extra VM options to be passed in through an environment variable.
if [[ $DART_VM_OPTIONS ]]; then
  read -a OPTIONS <<< "$DART_VM_OPTIONS"
  VM_OPTIONS+=("${OPTIONS[@]}")
fi

if [ -z "$DART_CONFIGURATION" ];
then
  DART_CONFIGURATION="ReleaseIA32"
fi

if [[ `uname` == 'Darwin' ]];
then
  BUILD_DIR="$SDK_DIR/../xcodebuild/$DART_CONFIGURATION"
else
  BUILD_DIR="$SDK_DIR/../out/$DART_CONFIGURATION"
fi

# Use the Dart binary in the built SDK so pub can find the version file next
# to it.
DART="$BUILD_DIR/dart-sdk/bin/dart"
PACKAGES_DIR="$BUILD_DIR/packages/"

# Run pub.
PUB="$SDK_DIR/../third_party/pkg/pub/bin/pub.dart"
exec "$DART" "${VM_OPTIONS[@]}" "--package-root=$PACKAGES_DIR" "$PUB" "$@"
