diff options
author | 2022-12-05 15:15:36 -0800 | |
---|---|---|
committer | 2023-01-03 14:12:43 -0800 | |
commit | 344e404abbab047903097ce00dc54d32491f3166 (patch) | |
tree | bbebc28456d1cf04295e2daefae3411e178831a7 | |
parent | 0ffb3e522edf10a85ffd3a7519011c9fa47a36f3 (diff) |
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
-rw-r--r-- | OWNERS | 1 | ||||
-rw-r--r-- | envsetup.sh | 79 | ||||
-rw-r--r-- | shell_utils.sh | 74 |
3 files changed, 127 insertions, 27 deletions
@@ -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 <<EOF @@ -928,33 +980,6 @@ function banchan() destroy_build_var_cache } -function gettop -{ - 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 -} - # TODO: Merge into gettop as part of launching multitree function multitree_gettop { 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}" +} + + |