#!/bin/bash

# This is the script that we install somewhere in your $PATH (as "meteor")
# when you run
#   $ curl https://install.meteor.com/ | sh
# It's the only file that we install globally on your system; each user of
# Meteor gets their own personal package and tools repository, called the
# warehouse (or, for 0.9.0 and newer, the "tropohouse"), in ~/.meteor/. This
# means that a user can share packages among multiple apps and automatically
# update to new releases without having to have permissions to write them to
# anywhere global.
#
# All this script does is exec ~/.meteor/meteor. But what if you don't have it
# yet? In that case, it downloads a "bootstrap tarball", which contains the
# latest version of the Meteor tools, and plops it down at ~/.meteor. In fact,
# once you've run this once, you don't even really need this script: you can put
# ~/.meteor/ into your PATH, or a symlink to ~/.meteor/meteor into some other
# PATH directory. No special permissions needed!
#
# To uninstall Meteor from your system, just delete this shell script, and
# delete your warehouse (~/.meteor/).


set -e
set -u
set -o pipefail  # so curl failure triggers the "set -e"

BOOTSTRAP_URL='https://packages.meteor.com/bootstrap-link'
METEOR_WAREHOUSE_DIR="${METEOR_WAREHOUSE_DIR:-$HOME/.meteor}"

if [ ! -x "$METEOR_WAREHOUSE_DIR/meteor" ]; then
  if [ -e "$METEOR_WAREHOUSE_DIR" ]; then
    echo "'$METEOR_WAREHOUSE_DIR' exists, but '$METEOR_WAREHOUSE_DIR/meteor' is not executable." 1>&2
    echo 1>&2
    echo "Remove it and try again." 1>&2
    exit 1
  fi

  # Bootstrap .meteor from a tarball. First, figure out our architecture.

  UNAME=$(uname)
  if [ "$UNAME" != "Linux" -a "$UNAME" != "Darwin" ] ; then
      echo "Sorry, this OS is not supported yet."
      exit 1
  fi

  if [ "$UNAME" = "Darwin" ] ; then
      ### OSX ###
      if [ "i386" != "$(uname -p)" -o "1" != "$(sysctl -n hw.cpu64bit_capable 2>/dev/null || echo 0)" ] ; then
          # Can't just test uname -m = x86_64, because Snow Leopard can
          # return other values.
          echo "Only 64-bit Intel processors are supported at this time."
          exit 1
      fi
      PLATFORM="os.osx.x86_64"
  elif [ "$UNAME" = "Linux" ] ; then
      ### Linux ###
      LINUX_ARCH=$(uname -m)
      if [ "${LINUX_ARCH}" = "i686" ] ; then
          PLATFORM="os.linux.x86_32"
      elif [ "${LINUX_ARCH}" = "x86_64" ] ; then
          PLATFORM="os.linux.x86_64"
      else
          echo "Unusable architecture: ${LINUX_ARCH}"
          echo "Meteor only supports i686 and x86_64 for now."
          exit 1
      fi
  fi

  # This returns something like:
  #   https://asdfasdfasdf.cloudfront.net/packages-bootstrap/1.2.3
  ROOT_URL="$(curl -s --fail $BOOTSTRAP_URL)"
  TARBALL_URL="${ROOT_URL}/meteor-bootstrap-${PLATFORM}.tar.gz"

  INSTALL_TMPDIR="$(dirname "$METEOR_WAREHOUSE_DIR")/.meteor-install-tmp"
  rm -rf "$INSTALL_TMPDIR"
  mkdir "$INSTALL_TMPDIR"
  if [ -n "$USER" ]; then
    echo "$USER, this is your first time using Meteor!" 1>&2
  else
    echo "This is your first time using Meteor!" 1>&2
  fi
  echo "Installing a Meteor distribution in your home directory." 1>&2
  curl --progress-bar --fail "$TARBALL_URL" | tar -xzf - -C "$INSTALL_TMPDIR"
  # bomb out if it didn't work, eg no net
  test -x "${INSTALL_TMPDIR}/.meteor/meteor"
  mv "${INSTALL_TMPDIR}/.meteor" "$METEOR_WAREHOUSE_DIR"
  rmdir "${INSTALL_TMPDIR}"
  # just double-checking :)
  test -x "$METEOR_WAREHOUSE_DIR/meteor"
fi

exec "$METEOR_WAREHOUSE_DIR/meteor" "$@"
