#!/bin/bash -e
#
# Copyright 2018 The Kythe Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Script to control which Bazel version is used through env variables.
#
# By default, this script just runs /usr/bin/bazel with "$@".  The following
# environmental variables allow the caller to switch which Bazel binary is
# executed:
#
# BAZEL:         override all other variables; run this binary
# BAZEL_VERSION: Bazel version to execute (e.g. 0.15.2)
# BAZEL_BIN:     directory of bazel binaries (e.g. $BAZEL_BIN/bazel-0.15.2)
# DEFAULT_BAZEL: binary to use when BAZEL and BAZEL_VERSION are not set
#
# Examples:
#   ./bazel                                              # executes /usr/bin/bazel
#   BAZEL_VERSION=0.15.2 ./bazel                         # executes /usr/bin/bazel-0.15.2
#   BAZEL_VERSION=0.15.2 BAZEL_BIN=/opt/bazel ./bazel    # executes /opt/bazel/bazel-0.15.2
#   BAZEL=/bin/true ./bazel                              # executes /bin/true
#   DEFAULT_BAZEL=/bin/true ./bazel                      # executes /bin/true
#   DEFAULT_BAZEL=/bin/true BAZEL_VERSION=0.15.2 ./bazel # executes /usr/bin/bazel-0.15.2

SCRIPT="$(realpath "$0")"
DEFAULT_BAZEL="${DEFAULT_BAZEL=/usr/bin/bazel}"
BAZEL_BIN="${BAZEL_BIN:-/usr/bin}"

if [[ -n "$BAZEL" ]]; then
  exec "$BAZEL" "$@"
fi

if [[ -z "$BAZEL_VERSION" ]]; then
  if [[ -n "$DEFAULT_BAZEL" && -x "$DEFAULT_BAZEL" ]]; then
    DEFAULT_BAZEL="$(realpath "$DEFAULT_BAZEL")"
    if [[ "$DEFAULT_BAZEL" != "$SCRIPT" ]]; then
      # Use default bazel version
      exec "$DEFAULT_BAZEL" "$@"
    fi
  fi

  # Select latest version available
  VERSIONS=($(ls "$BAZEL_BIN"/bazel-* | xargs -L1 basename | sort -t. -h -k1,1 -k2,2 -k3,3))
  LATEST="${VERSIONS[*]: -1}"
  BAZEL_VERSION="${LATEST#bazel-}"
fi

exec "$BAZEL_BIN/bazel-$BAZEL_VERSION" "$@"
