public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v2 1/1] Remove bashisms from shell scripts and simplify Python detection
@ 2023-05-06 18:29 Rebecca Cran
  0 siblings, 0 replies; only message in thread
From: Rebecca Cran @ 2023-05-06 18:29 UTC (permalink / raw)
  To: devel, Liming Gao, Bob Feng, Yuwei Chen, Andrew Fish,
	Leif Lindholm, Michael D Kinney
  Cc: Rebecca Cran

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@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


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-06 18:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-06 18:29 [PATCH v2 1/1] Remove bashisms from shell scripts and simplify Python detection Rebecca Cran

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox