From: "Rebecca Cran" <rebecca@bsdio.com>
To: devel@edk2.groups.io, Liming Gao <gaoliming@byosoft.com.cn>,
Bob Feng <bob.c.feng@intel.com>,
Yuwei Chen <yuwei.chen@intel.com>, Andrew Fish <afish@apple.com>,
Leif Lindholm <quic_llindhol@quicinc.com>,
Michael D Kinney <michael.d.kinney@intel.com>
Cc: Rebecca Cran <rebecca@bsdio.com>
Subject: [PATCH 1/1] Remove bashisms from edksetup.sh and BaseTools/BuildEnv
Date: Sat, 6 May 2023 12:23:11 -0600 [thread overview]
Message-ID: <20230506182311.14023-1-rebecca@bsdio.com> (raw)
Remove bashisms from edksetup.sh and BaseTools/BuildEnv. This allows any
POSIX shell to use those scripts, removing the dependency on bash.
Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
---
BaseTools/BuildEnv | 30 +++----
edksetup.sh | 89 +++-----------------
2 files changed, 26 insertions(+), 93 deletions(-)
diff --git a/BaseTools/BuildEnv b/BaseTools/BuildEnv
index 275f4c5901aa..bd6235d74fa7 100755
--- a/BaseTools/BuildEnv
+++ b/BaseTools/BuildEnv
@@ -20,7 +20,8 @@ SetWorkspace() {
#
# Set $WORKSPACE
#
- export WORKSPACE=`pwd`
+ WORKSPACE=$(pwd)
+ export WORKSPACE
return 0
@@ -35,8 +36,7 @@ RestorePreviousConfiguration() {
export CONF_PATH=$WORKSPACE/Conf
if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
then
- PATH_LIST=${PACKAGES_PATH//:/ }
- for DIR in $PATH_LIST
+ for DIR in $(echo $PACKAGES_PATH | tr ':' ' ')
do
if [ -d $DIR/Conf ]
then
@@ -70,7 +70,13 @@ GenerateShellCodeToUpdatePath() {
OUTPUT_FILE=$1
echo "if [ -e $EDK_TOOLS_PATH_BIN ]" >> $OUTPUT_FILE
echo "then" >> $OUTPUT_FILE
- echo " if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
+ echo " FOUND_TOOLS_PATH_BIN=0" >> $OUTPUT_FILE
+ echo " for DIR in \$(echo \$PATH | tr ':' ' '); do" >> $OUTPUT_FILE
+ echo " if [ \"\$DIR\" = \"$EDK_TOOLS_PATH_BIN\" ]; then" >> $OUTPUT_FILE
+ echo " FOUND_TOOLS_PATH_BIN=1" >> $OUTPUT_FILE
+ echo " fi" >> $OUTPUT_FILE
+ echo " done" >> $OUTPUT_FILE
+ echo " if [ \$FOUND_TOOLS_PATH_BIN = 0 ]" >> $OUTPUT_FILE
echo " then" >> $OUTPUT_FILE
echo " export PATH=$EDK_TOOLS_PATH_BIN:\$PATH" >> $OUTPUT_FILE
echo " fi" >> $OUTPUT_FILE
@@ -84,7 +90,7 @@ StoreCurrentConfiguration() {
#
OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
#echo Storing current configuration into $OUTPUT_FILE
- echo "# Auto-generated by ${BASH_SOURCE[0]}" >| $OUTPUT_FILE
+ echo "# Auto-generated by BaseTools/BuildEnv" >| $OUTPUT_FILE
GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
GenerateShellCodeToUpdatePath $OUTPUT_FILE
@@ -130,10 +136,9 @@ SetEdkToolsPath() {
#
# Try $PACKAGES_PATH
#
- if [ -n "$PACKAGES_PATH"]
+ if [ -n "$PACKAGES_PATH" ]
then
- PATH_LIST=${PACKAGES_PATH//:/ }
- for DIR in $PATH_LIST
+ for DIR in $(echo $PACKAGES_PATH | tr ':' ' ')
do
if [ -d $DIR/BaseTools ]
then
@@ -156,10 +161,7 @@ GetBaseToolsBinSubDir() {
#
# Figure out a uniq directory name from the uname command
#
- UNAME_DIRNAME=`uname -sm`
- UNAME_DIRNAME=${UNAME_DIRNAME// /-}
- UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
- echo $UNAME_DIRNAME
+ echo $(uname -sm | tr ' ' '-')
}
GetEdkToolsPathBinDirectory() {
@@ -180,8 +182,6 @@ GetEdkToolsPathBinDirectory() {
AddDirToStartOfPath() {
DIRNAME=$1
- PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
- PATH=${PATH//$DIRNAME:/}
PATH=$DIRNAME:$PATH
export PATH
}
@@ -199,7 +199,7 @@ AddEdkToolsToPath() {
EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
# check if the edk2basetools pip package is available
- if $PYTHON_COMMAND -c "import edk2basetools" &> /dev/null; then
+ if $PYTHON_COMMAND -c "import edk2basetools" > /dev/null 2>&1; then
# if it is, use the pip version of the wrappers
echo "Using Pip Basetools"
AddDirToStartOfPath $EDK_TOOLS_PATH/BinPipWrappers/PosixLike
diff --git a/edksetup.sh b/edksetup.sh
index 06d2f041e635..cab3a8c113e0 100755
--- a/edksetup.sh
+++ b/edksetup.sh
@@ -20,7 +20,7 @@
SCRIPTNAME="edksetup.sh"
RECONFIG=FALSE
-function HelpMsg()
+HelpMsg()
{
echo "Usage: $SCRIPTNAME [Options]"
echo
@@ -38,7 +38,7 @@ function HelpMsg()
echo "source $SCRIPTNAME"
}
-function SetWorkspace()
+SetWorkspace()
{
#
# If WORKSPACE is already set, then we can return right now
@@ -49,10 +49,10 @@ function SetWorkspace()
return 0
fi
- if [ ! ${BASH_SOURCE[0]} -ef ./$SCRIPTNAME ] && [ -z "$PACKAGES_PATH" ]
+ if [ ! -f ${SCRIPTNAME} ] && [ -z "$PACKAGES_PATH" ]
then
- echo Run this script from the base of your tree. For example:
- echo " cd /Path/To/Edk/Root"
+ echo Source this script from the base of your tree. For example:
+ echo " cd /Path/To/Edk2/Clone"
echo " . $SCRIPTNAME"
return 1
fi
@@ -75,7 +75,7 @@ function SetWorkspace()
return 0
}
-function SetupEnv()
+SetupEnv()
{
if [ -n "$EDK_TOOLS_PATH" ]
then
@@ -85,9 +85,7 @@ function SetupEnv()
. $WORKSPACE/BaseTools/BuildEnv
elif [ -n "$PACKAGES_PATH" ]
then
- PATH_LIST=$PACKAGES_PATH
- PATH_LIST=${PATH_LIST//:/ }
- for DIR in $PATH_LIST
+ for DIR in $(echo $PACKAGES_PATH | tr ':' ' ')
do
if [ -f "$DIR/BaseTools/BuildEnv" ]
then
@@ -105,81 +103,16 @@ function SetupEnv()
fi
}
-function SetupPython3()
+SetupPython3()
{
- if [ $origin_version ];then
- origin_version=
- fi
- for python in $(whereis python3)
- do
- python=$(echo $python | grep "[[:digit:]]$" || true)
- python_version=${python##*python}
- if [ -z "${python_version}" ] || (! command -v $python >/dev/null 2>&1);then
- continue
- fi
- if [ -z $origin_version ];then
- origin_version=$python_version
- export PYTHON_COMMAND=$python
- continue
- fi
- if [[ "$origin_version" < "$python_version" ]]; then
- origin_version=$python_version
- export PYTHON_COMMAND=$python
- fi
- done
- return 0
+ export PYTHON_COMMAND=python3
}
-function SetupPython()
+SourceEnv()
{
- if [ $PYTHON_COMMAND ] && [ -z $PYTHON3_ENABLE ];then
- if ( command -v $PYTHON_COMMAND >/dev/null 2>&1 );then
- return 0
- else
- echo $PYTHON_COMMAND Cannot be used to build or execute the python tools.
- return 1
- fi
- fi
-
- if [ $PYTHON3_ENABLE ] && [ $PYTHON3_ENABLE == TRUE ]
- then
- SetupPython3
- fi
-
- if [ $PYTHON3_ENABLE ] && [ $PYTHON3_ENABLE != TRUE ]
- then
- if [ $origin_version ];then
- origin_version=
- fi
- for python in $(whereis python2)
- do
- python=$(echo $python | grep "[[:digit:]]$" || true)
- python_version=${python##*python}
- if [ -z "${python_version}" ] || (! command -v $python >/dev/null 2>&1);then
- continue
- fi
- if [ -z $origin_version ]
- then
- origin_version=$python_version
- export PYTHON_COMMAND=$python
- continue
- fi
- if [[ "$origin_version" < "$python_version" ]]; then
- origin_version=$python_version
- export PYTHON_COMMAND=$python
- fi
- done
- return 0
- fi
-
SetupPython3
-}
-
-function SourceEnv()
-{
- SetWorkspace &&
+ SetWorkspace
SetupEnv
- SetupPython
}
I=$#
--
2.40.1
next reply other threads:[~2023-05-06 18:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-06 18:23 Rebecca Cran [this message]
2023-05-06 18:34 ` [edk2-devel] [PATCH 1/1] Remove bashisms from edksetup.sh and BaseTools/BuildEnv Pedro Falcato
2023-05-06 19:34 ` Rebecca Cran
[not found] ` <175CA4E73380D66F.2502@groups.io>
2023-05-06 19:45 ` Rebecca Cran
2023-05-06 21:48 ` Pedro Falcato
2023-05-07 3:31 ` Rebecca Cran
2023-05-07 3:51 ` Pedro Falcato
2023-05-09 0:53 ` 回复: " gaoliming
2023-05-09 4:28 ` Rebecca Cran
2023-05-10 0:29 ` Rebecca Cran
2023-05-10 0:43 ` Michael D Kinney
2023-05-10 1:02 ` Rebecca Cran
2023-05-10 1:33 ` 回复: " gaoliming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230506182311.14023-1-rebecca@bsdio.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox