#!/bin/bash
set -e

# felt: a command-line utility for building and testing Flutter web engine.
#       It stands for Flutter Engine Local Tester.

FELT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

if [ -z "`which gclient`" ]
then
  echo "ERROR: gclient is not in your PATH"
  echo "Fix: add the path to your installation of depot_tools to your PATH"
  exit 1
fi
GCLIENT_PATH=`which gclient`

if [ -z "`which ninja`" ]
then
  echo "ERROR: ninja is not in your PATH"
  echo "Fix: add the path to your installation of depot_tools to your PATH"
  exit 1
fi
NINJA_PATH=`which ninja`

ENGINE_SRC_DIR="$(dirname $(dirname $(dirname $(dirname ${FELT_DIR}))))"
FLUTTER_DIR="${ENGINE_SRC_DIR}/flutter"
WEB_UI_DIR="${FLUTTER_DIR}/lib/web_ui"
DEV_DIR="${WEB_UI_DIR}/dev"
OUT_DIR="${ENGINE_SRC_DIR}/out"
HOST_DEBUG_UNOPT_DIR="${ENGINE_SRC_DIR}/out/host_debug_unopt"
DART_SDK_DIR="${ENGINE_SRC_DIR}/out/host_debug_unopt/dart-sdk"
GN="${FLUTTER_DIR}/tools/gn"
DART_TOOL_DIR="${WEB_UI_DIR}/.dart_tool"
PUB_PATH="$DART_SDK_DIR/bin/pub"
SNAPSHOT_PATH="${DART_TOOL_DIR}/felt.snapshot"
STAMP_PATH="${DART_TOOL_DIR}/felt.snapshot.stamp"
SCRIPT_PATH="${DEV_DIR}/felt.dart"
REVISION="$(cd "$FLUTTER_DIR"; git rev-parse HEAD)"

if [ ! -f "${PUB_PATH}" ]
then
  echo "Compiling the Dart SDK."
  gclient sync
  $GN --unoptimized --full-dart-sdk
  ninja -C $HOST_DEBUG_UNOPT_DIR -j 100
fi

install_deps() {
  echo "Running \`pub get\` in 'engine/src/flutter/lib/web_ui'"
  (cd "$WEB_UI_DIR"; $PUB_PATH get)

  echo "Running \`pub get\` in 'engine/src/flutter/web_sdk/web_engine_tester'"
  (cd "$FLUTTER_DIR/web_sdk/web_engine_tester"; $PUB_PATH get)
}

KERNEL_NAME=`uname`
if [[ $KERNEL_NAME == *"Darwin"* ]]
then
  echo "Running on MacOS. Increase the user limits"
  ulimit -n 50000
  ulimit -u 4096
fi

if [[ "$FELT_USE_SNAPSHOT" == "false" || "$FELT_USE_SNAPSHOT" == "0" ]]; then
  echo "[Snapshot mode: off]"
  # Running without snapshot means there is high likelyhood of local changes. In
  # that case, let's clear the snapshot to avoid any surprises.
  rm -f "$SNAPSHOT_PATH"
  rm -f "$STAMP_PATH"
  install_deps
  $DART_SDK_DIR/bin/dart "$DEV_DIR/felt.dart" $@
else
  # Create a new snapshot if any of the following is true:
  #  * SNAPSHOT_PATH is not a file, or
  #  * STAMP_PATH is not a file with nonzero size, or
  #  * Contents of STAMP_PATH is not our local git HEAD revision, or
  #  * pubspec.yaml last modified after pubspec.lock
  if [[ ! -f $SNAPSHOT_PATH || ! -s "$STAMP_PATH" || "$(cat "$STAMP_PATH")" != "$REVISION" || "$WEB_UI_DIR/pubspec.yaml" -nt "$WEB_UI_DIR/pubspec.lock" ]]; then
    echo "[Snapshot mode: on] (creating a new snapshot)"
    install_deps
    mkdir -p $DART_TOOL_DIR

    "$DART_SDK_DIR/bin/dart" --snapshot="$SNAPSHOT_PATH" --packages="$WEB_UI_DIR/.packages" "$SCRIPT_PATH"
    echo "$REVISION" > "$STAMP_PATH"
  fi

  $DART_SDK_DIR/bin/dart --packages="$WEB_UI_DIR/.packages" "$SNAPSHOT_PATH" $@
fi
