| #!/usr/bin/env bash |
| |
| # Copyright 2017 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. |
| |
| # --- begin runfiles.bash initialization v3 --- |
| # Copy-pasted from the Bazel Bash runfiles library v3. |
| set -uo pipefail; set +e; f=bazel_tools/tools/bash/runfiles/runfiles.bash |
| source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \ |
| source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \ |
| source "$0.runfiles/$f" 2>/dev/null || \ |
| source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ |
| source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ |
| { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e |
| # --- end runfiles.bash initialization v3 --- |
| |
| @@GENERATED_MESSAGE@@ |
| |
| set -euo pipefail |
| |
| GAZELLE_PATH=@@GAZELLE_PATH@@ |
| ARGS=@@ARGS@@ |
| GOTOOL=@@GOTOOL@@ |
| REPO_CONFIG_PATH=@@REPO_CONFIG_PATH@@ |
| WORKSPACE="@@WORKSPACE@@" |
| |
| @@ENV@@ |
| |
| # set_goroot attempts to set GOROOT to the SDK used by rules_go. gazelle |
| # invokes tools inside the Go SDK for dependency management. It's good to |
| # use the SDK used by the workspace in case the Go SDK is not installed |
| # on the host system or is a different version. |
| function set_goroot { |
| local gotool |
| gotool=$(rlocation "$GOTOOL") |
| if [ -z "$gotool" ]; then |
| echo "$0: warning: could not locate GOROOT used by rules_go" >&2 |
| return |
| fi |
| GOROOT=$(cd "$(dirname "$gotool")/.."; pwd) |
| export GOROOT |
| if type cygpath >/dev/null 2>&1; then |
| # On Windows, convert the path to something usable outside of bash. |
| GOROOT=$(cygpath -w "$GOROOT") |
| fi |
| } |
| |
| # If arguments were provided on the command line, either replace or augment |
| # the generated args. |
| case "${1-}" in |
| "fix" | "update" | "help" | "update-repos") |
| ARGS=("$@") |
| ;; |
| *) |
| ARGS+=("$@") |
| ;; |
| esac |
| |
| # Invoke Gazelle. |
| # Note that we don't change directories first; if we did, Gazelle wouldn't be |
| # able to find runfiles, and some extensions rely on that. Gazelle can use |
| # BUILD_WORKSPACE_DIRECTORY to interpret relative paths on the command line. |
| set_goroot |
| gazelle_path=$(rlocation "$GAZELLE_PATH") |
| if [ -z "$gazelle_path" ]; then |
| echo "error: could not locate gazelle binary" >&2 |
| exit 1 |
| fi |
| if [[ -n "${TEST_WORKSPACE+x}" && -n "$WORKSPACE" ]]; then |
| BUILD_WORKSPACE_DIRECTORY="$(dirname "$(readlink ${WORKSPACE})")" |
| export BUILD_WORKSPACE_DIRECTORY |
| fi |
| if [ -z "${BUILD_WORKSPACE_DIRECTORY-}" ]; then |
| echo "error: BUILD_WORKSPACE_DIRECTORY not set" >&2 |
| exit 1 |
| fi |
| |
| # Determine if we are running the fix/update command |
| if [[ ${#ARGS[@]} -gt 0 ]]; then |
| case "${ARGS[0]}" in |
| "fix" | "update") |
| is_fix_or_update="true" |
| ;; |
| *) |
| is_fix_or_update="false" |
| ;; |
| esac |
| fi |
| |
| # When running with Bzlmod, there is no WORKSPACE file for Gazelle to read |
| # the definitions of go_repository rules from. Instead, we pass the path to |
| # the repo config file as a flag. |
| if [[ "${is_fix_or_update:-}" == "true" ]] && [[ -n $REPO_CONFIG_PATH ]]; then |
| ARGS=("${ARGS[0]}" "-repo_config" "$(rlocation "$REPO_CONFIG_PATH")" "${ARGS[@]:1}") |
| fi |
| |
| runfiles_export_envvars |
| "$gazelle_path" "${ARGS[@]}" |