#!/usr/bin/env bash
#
# utils/build-toolchain - documents process for building a toolchain
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors

function usage() {
  echo "$0 <bundle_prefix> [OPTIONS]"
  echo ""
  echo "<bundle_prefix> - Prefix to use for bundle name"
  echo ""
  echo "OPTIONS"
  echo ""
  echo "-h --help"
  echo "Show help information."
  echo ""
  echo "-n --dry-run"
  echo "Do a dry run."
  echo ""
  echo "-t --test"
  echo "Run tests."
  echo ""
  echo "--distcc"
  echo "Build with distcc to speed up the toolchain build"
  echo ""
}

RESULT_DIR=$PWD
cd "$(dirname $0)/.." || exit

# Set defaults
DISTCC_FLAG=
DRY_RUN=
BUNDLE_PREFIX=
case $(uname -s) in
  Darwin)
    SWIFT_PACKAGE=buildbot_osx_package,no_test
  ;;
  Linux)
    SWIFT_PACKAGE=buildbot_linux,no_test
  ;;
  *)
    echo "Unrecognised platform $(uname -s)"
    exit 1
  ;;
esac

# Process command line arguments
FIRST_ARG_PROCESSED=0
while [ $# -ne 0 ]; do
  case "$1" in
    -n|--dry-run)
      DRY_RUN="-n"
  ;;
    -t|--test)
      if [ "$(uname -s)" == "Linux" ]; then
        SWIFT_PACKAGE=buildbot_linux
      else
        SWIFT_PACKAGE=buildbot_osx_package
      fi
  ;;
    --distcc)
      DISTCC_FLAG="--distcc"
  ;;
  -h|--help)
    usage
    exit 0
  ;;
  *)
    if [ ${FIRST_ARG_PROCESSED} -eq 0 ]; then
      # This is the bundle prefix
      BUNDLE_PREFIX="$1"
    else
      echo "Unrecognised argument \"$1\""
      exit 1
    fi
  ;;
  esac
  FIRST_ARG_PROCESSED=1
  shift
done

if [ -z "${BUNDLE_PREFIX}" ]; then
  echo "Bundle prefix cannot be empty. See $0 --help"
  exit 1
fi

# Report the commands being run
set -x
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
DAY=$(date +"%d")
TOOLCHAIN_VERSION="swift-LOCAL-${YEAR}-${MONTH}-${DAY}-a"
ARCHIVE="${TOOLCHAIN_VERSION}-osx.tar.gz"
SYM_ARCHIVE="${TOOLCHAIN_VERSION}-osx-symbols.tar.gz"
BUNDLE_PREFIX=${BUNDLE_PREFIX:?Please specify a bundle prefix}
BUNDLE_IDENTIFIER="${BUNDLE_PREFIX}.${YEAR}${MONTH}${DAY}"
DISPLAY_NAME_SHORT="Local Swift Development Snapshot"
DISPLAY_NAME="${DISPLAY_NAME_SHORT} ${YEAR}-${MONTH}-${DAY}"
TOOLCHAIN_NAME="${TOOLCHAIN_VERSION}"

SWIFT_INSTALLABLE_PACKAGE="${RESULT_DIR}/${ARCHIVE}"
SWIFT_INSTALL_DIR="${RESULT_DIR}/swift-nightly-install"
SWIFT_INSTALL_SYMROOT="${RESULT_DIR}/swift-nightly-symroot"
SWIFT_TOOLCHAIN_DIR="/Library/Developer/Toolchains/${TOOLCHAIN_NAME}.xctoolchain"
SYMBOLS_PACKAGE="${RESULT_DIR}/${SYM_ARCHIVE}"
DRY_RUN="${DRY_RUN}"
DISTCC_FLAG="${DISTCC_FLAG}"

./utils/build-script ${DRY_RUN} ${DISTCC_FLAG} --preset="${SWIFT_PACKAGE}" \
        install_destdir="${SWIFT_INSTALL_DIR}" \
        installable_package="${SWIFT_INSTALLABLE_PACKAGE}" \
        install_toolchain_dir="${SWIFT_TOOLCHAIN_DIR}" \
        install_symroot="${SWIFT_INSTALL_SYMROOT}" \
        symbols_package="${SYMBOLS_PACKAGE}" \
        darwin_toolchain_bundle_identifier="${BUNDLE_IDENTIFIER}" \
        darwin_toolchain_display_name="${DISPLAY_NAME}" \
        darwin_toolchain_display_name_short="${DISPLAY_NAME_SHORT}" \
        darwin_toolchain_xctoolchain_name="${TOOLCHAIN_NAME}" \
        darwin_toolchain_version="${TOOLCHAIN_VERSION}" \
        darwin_toolchain_alias="Local"
