[edk2-devel] [PATCH v2 1/1] Remove bashisms from shell scripts and simplify Python detection
Rebecca Cran
rebecca at bsdio.com
Sat May 6 18:29:21 UTC 2023
Remove bashisms from edksetup.sh and BaseTools/BuildEnv. This allows any
POSIX shell to use those scripts (e.g. dash on Debian, or /bin/sh on
FreeBSD), removing the dependency on bash.
Also, since we no longer support Python 2.x and need at least Python
3.6, simplify edksetup.sh. Instead of looping over the output of
'whereis python3', which on a Linux system might return something like
'python3: /usr/bin/python3 /usr/lib/python3 /etc/python3
/usr/share/python3 /usr/share/man/man1/python3.1.gz', just set
PYTHON_COMMAND to python3.
Signed-off-by: Rebecca Cran <rebecca at 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
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104201): https://edk2.groups.io/g/devel/message/104201
Mute This Topic: https://groups.io/mt/98729619/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list