On Sat, May 6, 2023 at 7:23 PM Rebecca Cran <[email protected]> wrote:
>
> 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 <[email protected]>
> ---
>  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

Did you test this in FreeBSD (and hopefully other BSDs, such as Net)?
As far as I know, those don't package a python3 symlink (only
python3.{version}).

At a glance, the rest of the changes look ok-ish to me though.

-- 
Pedro


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104202): https://edk2.groups.io/g/devel/message/104202
Mute This Topic: https://groups.io/mt/98729541/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to