#!/bin/bash # Copyright 2015 The Bazel 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. set -eu # This is a script which is installed instead of the real Bazel binary. # It looks for a tools/bazel executable next to the containing WORKSPACE # file and runs that. If that's not found, it runs the real Bazel binary which # is installed next to this script as bazel-real. # `readlink -f` that works on OSX too. function get_realpath() { if [ "$(uname -s)" == "Darwin" ]; then local queue="$1" if [[ "${queue}" != /* ]] ; then # Make sure we start with an absolute path. queue="${PWD}/${queue}" fi local current="" while [ -n "${queue}" ]; do # Removing a trailing /. queue="${queue#/}" # Pull the first path segment off of queue. local segment="${queue%%/*}" # If this is the last segment. if [[ "${queue}" != */* ]] ; then segment="${queue}" queue="" else # Remove that first segment. queue="${queue#*/}" fi local link="${current}/${segment}" if [ -h "${link}" ] ; then link="$(readlink "${link}")" queue="${link}/${queue}" if [[ "${link}" == /* ]] ; then current="" fi else current="${link}" fi done echo "${current}" else readlink -f "$1" fi } export BAZEL_REAL="$(dirname "$(get_realpath "${BASH_SOURCE[0]}")")/bazel-real" WORKSPACE_DIR="${PWD}" while [[ "${WORKSPACE_DIR}" != / ]]; do if [[ -e "${WORKSPACE_DIR}/WORKSPACE" ]]; then break; fi WORKSPACE_DIR="$(dirname "${WORKSPACE_DIR}")" done readonly WORKSPACE_DIR if [[ -e "${WORKSPACE_DIR}/WORKSPACE" ]]; then readonly WRAPPER="${WORKSPACE_DIR}/tools/bazel" if [[ -x "${WRAPPER}" ]]; then exec -a "$0" "${WRAPPER}" "$@" fi fi if [[ ! -x "${BAZEL_REAL}" ]]; then echo "Failed to find underlying Bazel executable at ${BAZEL_REAL}" >&2 exit 1 fi exec -a "$0" "${BAZEL_REAL}" "$@"