|  | #!/bin/bash | 
|  | # Copyright 2019 The gRPC Authors | 
|  | # | 
|  | # 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. | 
|  |  | 
|  |  | 
|  | # Keeping up with Bazel's breaking changes is currently difficult. | 
|  | # This script wraps calling bazel by downloading the currently | 
|  | # supported version, and then calling it. This way, we can make sure | 
|  | # that running bazel will always get meaningful results, at least | 
|  | # until Bazel 1.0 is released. | 
|  | # NOTE: This script relies on bazel's feature where //tools/bazel | 
|  | # script can be used to hijack "bazel" invocations in given workspace. | 
|  |  | 
|  | set -e | 
|  |  | 
|  | # DISABLE_BAZEL_WRAPPER can be set to eliminate the wrapper logic | 
|  | if [ "${DISABLE_BAZEL_WRAPPER}" != "" ] && [ "${OVERRIDE_BAZEL_VERSION}" == "" ] | 
|  | then | 
|  | if [ "${BAZEL_REAL}" != "" ] | 
|  | then | 
|  | # use BAZEL_REAL as set by | 
|  | # https://github.com/bazelbuild/bazel/blob/master/scripts/packages/bazel.sh | 
|  | # that originally invoked this script (this is what happens when you | 
|  | # run "bazel" in our workspace) | 
|  | exec -a "$0" "${BAZEL_REAL}" "$@" | 
|  | else | 
|  | # if BAZEL_REAL is not set, just invoke the default system bazel | 
|  | exec bazel "$@" | 
|  | fi | 
|  | fi | 
|  |  | 
|  | # Read the bazel version from .bazelversion file in the root of the grpc repository | 
|  | BAZELVERSION_FILE_PATH="$(dirname $(readlink -f "$0"))/../.bazelversion" | 
|  | VERSION_FROM_BAZELVERSION_FILE=$(cat ${BAZELVERSION_FILE_PATH}) | 
|  | VERSION=${OVERRIDE_BAZEL_VERSION:-${VERSION_FROM_BAZELVERSION_FILE}} | 
|  | echo "INFO: Running bazel wrapper (see //tools/bazel for details), bazel version $VERSION will be used instead of system-wide bazel installation." >&2 | 
|  |  | 
|  | # update tools/update_mirror.sh to populate the mirror with new bazel archives | 
|  | BASEURL_MIRROR="https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/bazel/releases/download" | 
|  | BASEURL="https://github.com/bazelbuild/bazel/releases/download" | 
|  | pushd "$(dirname "$0")" >/dev/null | 
|  | # bazel binary will be downloaded to GRPC_REPO_ROOT/tools directory by default | 
|  | DOWNLOAD_DIR=${OVERRIDE_BAZEL_WRAPPER_DOWNLOAD_DIR:-$(pwd)} | 
|  |  | 
|  | case $(uname -sm) in | 
|  | "Linux x86_64") | 
|  | suffix=linux-x86_64 | 
|  | ;; | 
|  | "Linux aarch64") | 
|  | suffix=linux-arm64 | 
|  | ;; | 
|  | "Darwin x86_64") | 
|  | suffix=darwin-x86_64 | 
|  | ;; | 
|  | "Darwin arm64") | 
|  | suffix=darwin-arm64 | 
|  | ;; | 
|  | "MINGW"* | "MSYS_NT"*) | 
|  | suffix=windows-x86_64.exe | 
|  | ;; | 
|  | *) | 
|  | echo "Unsupported architecture: $(uname -sm)" >&2 | 
|  | exit 1 | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | filename="bazel-$VERSION-$suffix" | 
|  | filename_abs="${DOWNLOAD_DIR}/${filename}" | 
|  |  | 
|  | if [ ! -x "${filename_abs}" ] ; then | 
|  | # first try to download using mirror, fallback to download from github | 
|  | echo "Downloading bazel, will try URLs: ${BASEURL_MIRROR}/${VERSION}/${filename} ${BASEURL}/${VERSION}/${filename}" >&2 | 
|  | curl --fail -L --output "${filename_abs}" "${BASEURL_MIRROR}/${VERSION}/${filename}" || curl --fail -L --output "${filename_abs}" "${BASEURL}/${VERSION}/${filename}" | 
|  | chmod a+x "${filename_abs}" | 
|  | fi | 
|  |  | 
|  | popd >/dev/null | 
|  | exec "${filename_abs}" "$@" |