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]]
-=-=-=-=-=-=-=-=-=-=-=-