| #!/usr/bin/env bash | |
| set -euo pipefail | |
| TOOL_NAME='{TOOL_NAME}' | |
| TOOL_SHORT_PATH='{TOOL_SHORT_PATH}' | |
| function resolve_runfile() { | |
| local path=$1 | |
| local runfiles_path=${path#../} | |
| local candidate | |
| local manifest | |
| local line | |
| if [[ -e "$path" ]]; then | |
| realpath "$path" | |
| return 0 | |
| fi | |
| if [[ -n "${RUNFILES_DIR:-}" ]]; then | |
| candidate="${RUNFILES_DIR}/${runfiles_path}" | |
| if [[ -e "$candidate" ]]; then | |
| realpath "$candidate" | |
| return 0 | |
| fi | |
| fi | |
| for manifest in \ | |
| "${RUNFILES_MANIFEST_FILE:-}" \ | |
| "$0.runfiles_manifest" \ | |
| "$0.exe.runfiles_manifest" \ | |
| "$0.runfiles/MANIFEST"; do | |
| [[ -n "$manifest" && -f "$manifest" ]] || continue | |
| while IFS= read -r line; do | |
| if [[ "$line" == "${runfiles_path} "* ]]; then | |
| printf '%s\n' "${line#* }" | |
| return 0 | |
| elif [[ "$line" == "$runfiles_path" ]]; then | |
| printf '%s\n' "$runfiles_path" | |
| return 0 | |
| fi | |
| done < "$manifest" | |
| done | |
| return 1 | |
| } | |
| if ! tool_path=$(resolve_runfile "$TOOL_SHORT_PATH"); then | |
| echo "Unable to locate $TOOL_NAME runfile: $TOOL_SHORT_PATH" >&2 | |
| exit 1 | |
| fi | |
| working_directory=${BUILD_WORKING_DIRECTORY:-${BUILD_WORKSPACE_DIRECTORY:-}} | |
| if [[ -n "$working_directory" ]]; then | |
| if ! cd "$working_directory"; then | |
| echo "Unable to change working directory: $working_directory" >&2 | |
| exit 1 | |
| fi | |
| fi | |
| exec "$tool_path" "$@" |