diff options
author | Joe Onorato <joeo@google.com> | 2022-12-05 15:15:36 -0800 |
---|---|---|
committer | Joe Onorato <joeo@google.com> | 2023-01-03 14:12:43 -0800 |
commit | 344e404abbab047903097ce00dc54d32491f3166 (patch) | |
tree | bbebc28456d1cf04295e2daefae3411e178831a7 /shell_utils.sh | |
parent | 0ffb3e522edf10a85ffd3a7519011c9fa47a36f3 (diff) | |
download | build-344e404abbab047903097ce00dc54d32491f3166.tar.gz |
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
Diffstat (limited to 'shell_utils.sh')
-rw-r--r-- | shell_utils.sh | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/shell_utils.sh b/shell_utils.sh new file mode 100644 index 0000000000..9de5a504e5 --- /dev/null +++ b/shell_utils.sh @@ -0,0 +1,74 @@ +# 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. + +function gettop +{ + local TOPFILE=build/make/core/envsetup.mk + # The ${TOP-} expansion allows this to work even with set -u + 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 +} + +# Sets TOP, or if the root of the tree can't be found, prints a message and +# exits. Since this function exits, it should not be called from functions +# defined in envsetup.sh. +if [ -z "${IMPORTING_ENVSETUP:-}" ] ; then +function require_top +{ + TOP=$(gettop) + if [[ ! $TOP ]] ; then + echo "Can not locate root of source tree. $(basename $0) must be run from within the Android source tree." >&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}" +} + + |