#!/bin/bash
# Copyright (c) 2014, 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.
#
# This script generates the following files, based on the contents of
# spec_input.html:
#
# - ../../doc/api.html: The human-readable API spec.
#
# - ../../test/integration/protocol_matchers.dart: matchers to be used by
#   integration tests.
#
# - ../../test/integration/integration_test_methods.dart: convenience methods
#   to be used by integration tests.

set -e

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")"

SCRIPT_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"

ROOT_DIR="$(cd "${SCRIPT_DIR}/../../../.." ; pwd -P)"

BIN_DIR="${ROOT_DIR}/sdk/bin"

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

if [[ `uname` == 'Darwin' ]];
then
  BUILD_DIR="${ROOT_DIR}/xcodebuild/$DART_CONFIGURATION"
else
  BUILD_DIR="${ROOT_DIR}/out/$DART_CONFIGURATION"
fi

PKG_DIR="${BUILD_DIR}/packages"

DART="${BIN_DIR}/dart"

declare -a VM_OPTIONS
VM_OPTIONS+=("--checked")
VM_OPTIONS+=("--package-root=${PKG_DIR}")

cd "${SCRIPT_DIR}"
"${DART}" "${VM_OPTIONS[@]}" "generate_all.dart"
