#!/bin/bash -e

# Copyright (c) 2016 The Chromium Authors. 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 -o pipefail

CYGWIN=false
MYPATH=$(dirname "${BASH_SOURCE[0]}")

: ${CIPD_CLIENT_VER:=`cat $MYPATH/cipd_client_version`}
: ${CIPD_CLIENT_SRV:='https://chrome-infra-packages.appspot.com'}

UNAME=`uname -s | tr '[:upper:]' '[:lower:]'`
case $UNAME in
  linux)
    PLAT=linux
    ;;
  cygwin*)
    PLAT=windows
    CYGWIN=true
    ;;
  msys*|mingw*)
    PLAT=windows
    ;;
  darwin)
    PLAT=mac
    ;;
  *)
    echo "cipd not supported on $UNAME"
    exit 1
esac

UNAME=`uname -m | tr '[:upper:]' '[:lower:]'`
case $UNAME in
  x86_64|amd64)
    ARCH=amd64
    ;;
  s390x)  # best-effort support for IBM s390x: crbug.com/764087
    ARCH=s390x
    ;;
  ppc64)  # best-effort support for 64-bit PowerPC: crbug.com/773857
    ARCH=ppc64
    ;;
  ppc64le)  # best-effort support for 64-bit PowerPC/LE: crbug.com/773857
    ARCH=ppc64le
    ;;
  aarch64)
    ARCH=arm64
    ;;
  armv7l)
    ARCH=armv6l
    ;;
  arm*)
    ARCH=$UNAME
    ;;
  *86)
    ARCH=386
    ;;
  *)
    echo "UNKNOWN Machine architecture: $UNAME"
    exit 1
esac

URL="$CIPD_CLIENT_SRV/client?platform=${PLAT}-${ARCH}&version=$CIPD_CLIENT_VER"
CLIENT="$MYPATH/.cipd_client"

USER_AGENT="depot_tools/$(git -C $MYPATH rev-parse HEAD 2>/dev/null || echo "???")"

if [ ! -e "$CLIENT" ]; then
  echo "Bootstrapping cipd client for ${PLAT}-${ARCH} from ${URL}..."

  # Download the client into a temporary file, then move it into the final
  # location atomically.
  #
  # This wonky tempdir method works on Linux and Mac.
  CIPD_CLIENT_TMP=$(\
    mktemp -p "$MYPATH" 2>/dev/null || \
    mktemp "$MYPATH/.cipd_client.XXXXXXX")

  if hash curl 2> /dev/null ; then
    curl "$URL" -s --show-error -f -A "$USER_AGENT"  -L -o "$CIPD_CLIENT_TMP"
  elif hash wget 2> /dev/null ; then
    wget "$URL" -q -U "${USER_AGENT}" -O "${CIPD_CLIENT_TMP}"
  else
    echo Your platform is missing a supported fetch command. Please use your package
    echo manager to install one before continuing:
    echo
    echo  curl
    echo  wget
    echo
    echo Alternately, manually download:
    echo   "$URL"
    echo To $CLIENT, and then re-run this command.
    rm "${CIPD_CLIENT_TMP}"
    exit 1
  fi

  chmod +x "$CIPD_CLIENT_TMP"

  set +e
  mv "$CIPD_CLIENT_TMP" "$CLIENT"
  set -e
fi

export CIPD_HTTP_USER_AGENT_PREFIX=$USER_AGENT
if ! "$CLIENT" selfupdate -version "$CIPD_CLIENT_VER" ; then
  echo -n "[31;1mselfupdate failed:[0;1m " 1>&2
  echo "run \`CIPD_HTTP_USER_AGENT_PREFIX=$USER_AGENT/manual $CLIENT selfupdate -version '$CIPD_CLIENT_VER'\` to diagnose" 1>&2
  echo "[0m" 1>&2
fi

# CygWin requires changing absolute paths to Windows form. Relative paths
# are typically okay as Windows generally accepts both forward and back
# slashes. This could possibly be constrained to only /tmp/ and /cygdrive/.
if $CYGWIN; then
  args=("$@")
  for i in `seq 2 $#`; do
    arg="${@:$i:1}"
    if [ "${arg:0:1}" == "/" ]; then
      last=$((i-1))
      next=$((i+1))
      set -- "${@:1:$last}" `cygpath -w "$arg"` "${@:$next}"
    fi
  done
  echo "$CLIENT" "${@}"
fi

exec "$CLIENT" "${@}"
