| #!/bin/bash | |
| # Copyright 2020 The Fuchsia Authors. All Rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # This script is a replacement for /usr/bin/env that adds Fuchsia-specific | |
| # information and provides access to prebuilt tools in the source tree. | |
| # | |
| # This is not a subcommand of `fx` because multiple pieces of project | |
| # infrastructure run outside of the build and need access to in-tree prebuilts. | |
| set -e | |
| # Filter out invalid FUCHSIA_DIR settings. | |
| if [[ -n "${FUCHSIA_DIR}" ]]; then | |
| if [[ ! -d "${FUCHSIA_DIR}" ]]; then | |
| unset FUCHSIA_DIR | |
| elif [[ "${FUCHSIA_DIR#/}" == "${FUCHSIA_DIR}" ]]; then | |
| unset FUCHSIA_DIR | |
| else | |
| PWD="$(pwd)" | |
| if [[ "${PWD#${FUCHSIA_DIR}}" = "${PWD}" ]]; then | |
| # FUCHSIA_DIR does not contain the current directory | |
| unset FUCHSIA_DIR | |
| fi | |
| fi | |
| fi | |
| # Mimic `fx` behavior to set up a consistent root and get prebuilt paths. | |
| # | |
| # We walk the parent directories looking for .jiri_root rather than using | |
| # BASH_SOURCE so that we find the fuchsia_dir enclosing the current working | |
| # directory instead of the one containing this file in case the user has | |
| # multiple source trees and is picking up this file from another one. | |
| # | |
| # NOTE: The FUCHSIA_DIR environment variable is ignored here because it | |
| # could point to a different Fuchsia checkout in some developer setups. | |
| # | |
| # This logic is replicated in //scripts/fx, //scripts/hermetic_env, | |
| # //scripts/zsh_completion/_fx, and //src/developer/ffx/scripts. For | |
| # consistency, copy any changes here to those files as well. | |
| fuchsia_dir="$(pwd)" | |
| while [[ ! -d "${fuchsia_dir}/.jiri_root" ]]; do | |
| fuchsia_dir="$(dirname "${fuchsia_dir}")" | |
| if [[ "${fuchsia_dir}" == "/" ]]; then | |
| echo "Cannot find the Platform Source Tree in a parent of directory: $(pwd)" | |
| exit 1 | |
| fi | |
| done | |
| export FUCHSIA_DIR="${fuchsia_dir}" | |
| declare -r prebuilt_sh="${fuchsia_dir}/tools/devshell/lib/prebuilt.sh" | |
| source "${prebuilt_sh}" || exit $? | |
| if [[ "${PATH#${PREBUILT_ALL_PATHS}}" == "${PATH}" ]]; then | |
| # Prebuilts have not been added to the path | |
| if [[ x"${FUCHSIA_HERMETIC_TOOLS}" == xy ]]; then | |
| readonly newpath="${PREBUILT_ALL_PATHS}:${FUCHSIA_DIR}/tools/system" | |
| else | |
| readonly newpath="${PREBUILT_ALL_PATHS}:${PATH}" | |
| fi | |
| else | |
| readonly newpath="${PATH}" | |
| fi | |
| export PATH="${newpath}" | |
| # Forward the args to the system `env`. | |
| exec /usr/bin/env -S -i \ | |
| "FUCHSIA_DIR=${fuchsia_dir}" \ | |
| "TERM=${TERM}" \ | |
| "PATH=${newpath}" \ | |
| "FUCHSIA_HERMETIC_TOOLS=${FUCHSIA_HERMETIC_TOOLS}" \ | |
| ${NINJA_STATUS+"NINJA_STATUS=${NINJA_STATUS}"} \ | |
| ${GOMA_DISABLED+"GOMA_DISABLED=${GOMA_DISABLED}"} \ | |
| ${TMPDIR+"TMPDIR=${TMPDIR}"} \ | |
| "$@" |