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 <[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 } -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/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
