1*60b67249SAndroid Build Coastguard Worker# Copyright 2020 Google LLC 2*60b67249SAndroid Build Coastguard Worker# 3*60b67249SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*60b67249SAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 5*60b67249SAndroid Build Coastguard Worker# the License at 6*60b67249SAndroid Build Coastguard Worker# 7*60b67249SAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*60b67249SAndroid Build Coastguard Worker# 9*60b67249SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*60b67249SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*60b67249SAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*60b67249SAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 13*60b67249SAndroid Build Coastguard Worker# the License. 14*60b67249SAndroid Build Coastguard Worker 15*60b67249SAndroid Build Coastguard Worker# This script must be sourced, not executed. 16*60b67249SAndroid Build Coastguard Worker# 17*60b67249SAndroid Build Coastguard Worker# Create a new environment: 18*60b67249SAndroid Build Coastguard Worker# 19*60b67249SAndroid Build Coastguard Worker# source bootstrap.sh 20*60b67249SAndroid Build Coastguard Worker# 21*60b67249SAndroid Build Coastguard Worker# Activate an existing environment: 22*60b67249SAndroid Build Coastguard Worker# 23*60b67249SAndroid Build Coastguard Worker# source activate.sh 24*60b67249SAndroid Build Coastguard Worker 25*60b67249SAndroid Build Coastguard Worker_bootstrap_abspath () { 26*60b67249SAndroid Build Coastguard Worker $(command -v python3 || command -v python2 || command -v python) -c "import os.path; print(os.path.abspath('$@'))" 27*60b67249SAndroid Build Coastguard Worker} 28*60b67249SAndroid Build Coastguard Worker 29*60b67249SAndroid Build Coastguard Worker# Shell: bash. 30*60b67249SAndroid Build Coastguard Workerif test -n "$BASH"; then 31*60b67249SAndroid Build Coastguard Worker _BOOTSTRAP_PATH="$(_bootstrap_abspath "$BASH_SOURCE")" 32*60b67249SAndroid Build Coastguard Worker# Shell: zsh. 33*60b67249SAndroid Build Coastguard Workerelif test -n "$ZSH_NAME"; then 34*60b67249SAndroid Build Coastguard Worker _BOOTSTRAP_PATH="$(_bootstrap_abspath "${(%):-%N}")" 35*60b67249SAndroid Build Coastguard Worker# Shell: dash. 36*60b67249SAndroid Build Coastguard Workerelif test ${0##*/} = dash; then 37*60b67249SAndroid Build Coastguard Worker _BOOTSTRAP_PATH="$(_bootstrap_abspath \ 38*60b67249SAndroid Build Coastguard Worker "$(lsof -p $$ -Fn0 | tail -1 | sed 's#^[^/]*##;')")" 39*60b67249SAndroid Build Coastguard Worker# If everything else fails, try $0. It could work. 40*60b67249SAndroid Build Coastguard Workerelse 41*60b67249SAndroid Build Coastguard Worker _BOOTSTRAP_PATH="$(_bootstrap_abspath "$0")" 42*60b67249SAndroid Build Coastguard Workerfi 43*60b67249SAndroid Build Coastguard Worker 44*60b67249SAndroid Build Coastguard Worker# Check if this file is being executed or sourced. 45*60b67249SAndroid Build Coastguard Worker_pw_sourced=0 46*60b67249SAndroid Build Coastguard Workerif [ -n "$SWARMING_BOT_ID" ]; then 47*60b67249SAndroid Build Coastguard Worker # If set we're running on swarming and don't need this check. 48*60b67249SAndroid Build Coastguard Worker _pw_sourced=1 49*60b67249SAndroid Build Coastguard Workerelif [ -n "$ZSH_EVAL_CONTEXT" ]; then 50*60b67249SAndroid Build Coastguard Worker case $ZSH_EVAL_CONTEXT in *:file) _pw_sourced=1;; esac 51*60b67249SAndroid Build Coastguard Workerelif [ -n "$KSH_VERSION" ]; then 52*60b67249SAndroid Build Coastguard Worker [ "$(cd $(dirname -- $0) && pwd -P)/$(basename -- $0)" != \ 53*60b67249SAndroid Build Coastguard Worker "$(cd $(dirname -- ${.sh.file}) && pwd -P)/$(basename -- ${.sh.file})" ] \ 54*60b67249SAndroid Build Coastguard Worker && _pw_sourced=1 55*60b67249SAndroid Build Coastguard Workerelif [ -n "$BASH_VERSION" ]; then 56*60b67249SAndroid Build Coastguard Worker (return 0 2>/dev/null) && _pw_sourced=1 57*60b67249SAndroid Build Coastguard Workerelse # All other shells: examine $0 for known shell binary filenames 58*60b67249SAndroid Build Coastguard Worker # Detects `sh` and `dash`; add additional shell filenames as needed. 59*60b67249SAndroid Build Coastguard Worker case ${0##*/} in sh|dash) _pw_sourced=1;; esac 60*60b67249SAndroid Build Coastguard Workerfi 61*60b67249SAndroid Build Coastguard Worker 62*60b67249SAndroid Build Coastguard Worker# Downstream projects need to set something other than PW_ROOT here, like 63*60b67249SAndroid Build Coastguard Worker# YOUR_PROJECT_ROOT. Please also set PW_PROJECT_ROOT and PW_ROOT before 64*60b67249SAndroid Build Coastguard Worker# invoking pw_bootstrap or pw_activate. 65*60b67249SAndroid Build Coastguard Worker######### BEGIN PROJECT-SPECIFIC CODE ######### 66*60b67249SAndroid Build Coastguard WorkerOPEN_DICE_ROOT="$(_bootstrap_abspath "$(dirname "$_BOOTSTRAP_PATH")")" 67*60b67249SAndroid Build Coastguard Workerexport OPEN_DICE_ROOT 68*60b67249SAndroid Build Coastguard WorkerPW_PROJECT_ROOT="$OPEN_DICE_ROOT" 69*60b67249SAndroid Build Coastguard WorkerPW_ROOT="$OPEN_DICE_ROOT/third_party/pigweed/src" 70*60b67249SAndroid Build Coastguard Worker 71*60b67249SAndroid Build Coastguard Worker# Set your project's banner and color. 72*60b67249SAndroid Build Coastguard WorkerPW_BRANDING_BANNER="$OPEN_DICE_ROOT/banner.txt" 73*60b67249SAndroid Build Coastguard Workerexport PW_BRANDING_BANNER 74*60b67249SAndroid Build Coastguard WorkerPW_BRANDING_BANNER_COLOR=magenta 75*60b67249SAndroid Build Coastguard Workerexport PW_BRANDING_BANNER_COLOR 76*60b67249SAndroid Build Coastguard Worker 77*60b67249SAndroid Build Coastguard Workeropen_dice_banner() { 78*60b67249SAndroid Build Coastguard Worker cat "$PW_BRANDING_BANNER" 79*60b67249SAndroid Build Coastguard Worker echo 80*60b67249SAndroid Build Coastguard Worker} 81*60b67249SAndroid Build Coastguard Worker 82*60b67249SAndroid Build Coastguard WorkerPW_BANNER_FUNC="open_dice_banner" 83*60b67249SAndroid Build Coastguard Worker########## END PROJECT-SPECIFIC CODE ########## 84*60b67249SAndroid Build Coastguard Workerexport PW_BANNER_FUNC 85*60b67249SAndroid Build Coastguard Workerexport PW_PROJECT_ROOT 86*60b67249SAndroid Build Coastguard Workerexport PW_ROOT 87*60b67249SAndroid Build Coastguard Worker 88*60b67249SAndroid Build Coastguard Worker_util_sh="$PW_ROOT/pw_env_setup/util.sh" 89*60b67249SAndroid Build Coastguard Worker 90*60b67249SAndroid Build Coastguard Worker# Double-check that the Pigweed submodule has been checked out. 91*60b67249SAndroid Build Coastguard Workerif [ ! -e "$_util_sh" ]; then 92*60b67249SAndroid Build Coastguard Worker echo "Error: $_util_sh not found." 93*60b67249SAndroid Build Coastguard Worker echo "Did you forget to initialize the git submodules?" 94*60b67249SAndroid Build Coastguard Worker echo "To setup the git submodules run:" 95*60b67249SAndroid Build Coastguard Worker echo " git submodule update --init" 96*60b67249SAndroid Build Coastguard Worker return 97*60b67249SAndroid Build Coastguard Workerfi 98*60b67249SAndroid Build Coastguard Worker 99*60b67249SAndroid Build Coastguard Worker. "$_util_sh" 100*60b67249SAndroid Build Coastguard Worker 101*60b67249SAndroid Build Coastguard Workerpw_deactivate 102*60b67249SAndroid Build Coastguard Workerpw_eval_sourced "$_pw_sourced" 103*60b67249SAndroid Build Coastguard Workerpw_check_root "$PW_ROOT" 104*60b67249SAndroid Build Coastguard Worker_PW_ACTUAL_ENVIRONMENT_ROOT="$(pw_get_env_root)" 105*60b67249SAndroid Build Coastguard Workerexport _PW_ACTUAL_ENVIRONMENT_ROOT 106*60b67249SAndroid Build Coastguard WorkerSETUP_SH="$_PW_ACTUAL_ENVIRONMENT_ROOT/activate.sh" 107*60b67249SAndroid Build Coastguard Worker 108*60b67249SAndroid Build Coastguard Worker# Run full bootstrap when invoked as bootstrap, or env file is missing/empty. 109*60b67249SAndroid Build Coastguard Workerif [ "$(basename "$_BOOTSTRAP_PATH")" = "bootstrap.sh" ] || \ 110*60b67249SAndroid Build Coastguard Worker [ ! -f "$SETUP_SH" ] || \ 111*60b67249SAndroid Build Coastguard Worker [ ! -s "$SETUP_SH" ]; then 112*60b67249SAndroid Build Coastguard Worker# This is where pw_bootstrap is called. Most small projects will include 113*60b67249SAndroid Build Coastguard Worker# --use-pigweed-defaults. 114*60b67249SAndroid Build Coastguard Worker######### BEGIN PROJECT-SPECIFIC CODE ######### 115*60b67249SAndroid Build Coastguard Worker pw_bootstrap --shell-file "$SETUP_SH" --install-dir "$_PW_ACTUAL_ENVIRONMENT_ROOT" --config-file "$PW_PROJECT_ROOT/pigweed.json" 116*60b67249SAndroid Build Coastguard Worker########## END PROJECT-SPECIFIC CODE ########## 117*60b67249SAndroid Build Coastguard Worker pw_finalize bootstrap "$SETUP_SH" 118*60b67249SAndroid Build Coastguard Workerelse 119*60b67249SAndroid Build Coastguard Worker pw_activate 120*60b67249SAndroid Build Coastguard Worker pw_finalize activate "$SETUP_SH" 121*60b67249SAndroid Build Coastguard Workerfi 122*60b67249SAndroid Build Coastguard Worker 123*60b67249SAndroid Build Coastguard Workerif [ "$_PW_ENV_SETUP_STATUS" -eq 0 ]; then 124*60b67249SAndroid Build Coastguard Worker# This is where any additional checks about the environment should go. 125*60b67249SAndroid Build Coastguard Worker######### BEGIN PROJECT-SPECIFIC CODE ######### 126*60b67249SAndroid Build Coastguard Worker echo -n 127*60b67249SAndroid Build Coastguard Worker########## END PROJECT-SPECIFIC CODE ########## 128*60b67249SAndroid Build Coastguard Workerfi 129*60b67249SAndroid Build Coastguard Worker 130*60b67249SAndroid Build Coastguard Workerunset _pw_sourced 131*60b67249SAndroid Build Coastguard Workerunset _BOOTSTRAP_PATH 132*60b67249SAndroid Build Coastguard Workerunset SETUP_SH 133*60b67249SAndroid Build Coastguard Workerunset _bootstrap_abspath 134*60b67249SAndroid Build Coastguard Workerunset _util_sh 135*60b67249SAndroid Build Coastguard Worker 136*60b67249SAndroid Build Coastguard Workerpw_cleanup 137