From 344e404abbab047903097ce00dc54d32491f3166 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Mon, 5 Dec 2022 15:15:36 -0800 Subject: [PATCH] Pull common methods into shell_utils.sh, which can be included by scripts. So we can stop copying gettop and others all over the place. Test: manual Bug: 260003429 Change-Id: Ic1b5d6bec8726d9253fb33ec588e503d6fc8167a --- OWNERS | 1 + envsetup.sh | 79 +++++++++++++++++++++++++++++++++----------------- shell_utils.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 27 deletions(-) create mode 100644 shell_utils.sh diff --git a/OWNERS b/OWNERS index 5c7f5adff2..57d89947b3 100644 --- a/OWNERS +++ b/OWNERS @@ -3,6 +3,7 @@ include platform/build/soong:/OWNERS # Since this file affects all Android developers, lock it down. There is still # round the world timzeone coverage. per-file envsetup.sh = joeo@google.com, jingwen@google.com, lberki@google.com +per-file shell_utils.sh = joeo@google.com, jingwen@google.com, lberki@google.com # Finalization scripts per-file finalize* = smoreland@google.com, alexbuy@google.com diff --git a/envsetup.sh b/envsetup.sh index 49908003cf..a30f6bd278 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -1,3 +1,55 @@ +# Copyright (C) 2022 The Android Open Source Project +# +# 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. + +# gettop is duplicated here and in shell_utils.mk, because it's difficult +# to find shell_utils.make without it for all the novel ways this file can be +# sourced. Other common functions should only be in one place or the other. +function _gettop_once +{ + local TOPFILE=build/make/core/envsetup.mk + if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then + # The following circumlocution ensures we remove symlinks from TOP. + (cd "$TOP"; PWD= /bin/pwd) + else + if [ -f $TOPFILE ] ; then + # The following circumlocution (repeated below as well) ensures + # that we record the true directory name and not one that is + # faked up with symlink names. + PWD= /bin/pwd + else + local HERE=$PWD + local T= + while [ \( ! \( -f $TOPFILE \) \) -a \( "$PWD" != "/" \) ]; do + \cd .. + T=`PWD= /bin/pwd -P` + done + \cd "$HERE" + if [ -f "$T/$TOPFILE" ]; then + echo "$T" + fi + fi + fi +} +T=$(_gettop_once) +if [ ! "$T" ]; then + echo "Couldn't locate the top of the tree. Always source build/envsetup.sh from the root of the tree." >&2 + return 1 +fi +IMPORTING_ENVSETUP=true source $T/build/make/shell_utils.sh + + +# Help function hmm() { cat <&2 + exit 1 + fi +} +fi + +function getoutdir +{ + local top=$(gettop) + local out_dir="${OUT_DIR:-}" + if [[ -z "${out_dir}" ]]; then + if [[ -n "${OUT_DIR_COMMON_BASE:-}" && -n "${top}" ]]; then + out_dir="${OUT_DIR_COMMON_BASE}/$(basename ${top})" + else + out_dir="out" + fi + fi + if [[ "${out_dir}" != /* ]]; then + out_dir="${top}/${out_dir}" + fi + echo "${out_dir}" +} + +