[edk2-devel] [PATCH 4/6] BaseTools: Update toolsetup.bat and Tests/PythonTest.py to check ver

Rebecca Cran posted 6 patches 1 year, 4 months ago
There is a newer version of this series
[edk2-devel] [PATCH 4/6] BaseTools: Update toolsetup.bat and Tests/PythonTest.py to check ver
Posted by Rebecca Cran 1 year, 4 months ago
Update toolsetup.bat and Tests/PythonTest.py to check if we're running a
version of Python that's compatible with BaseTools and the Pip
BaseTools.

Since edk2-pytool-extensions
(https://pypi.org/project/edk2-pytool-extensions/) requires Python 3.9
or newer, set that as the minimum version EDK2 requires.

Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
---
 BaseTools/Tests/PythonTest.py | 21 ++++++-
 BaseTools/toolsetup.bat       | 61 +++++++++++---------
 2 files changed, 53 insertions(+), 29 deletions(-)

diff --git a/BaseTools/Tests/PythonTest.py b/BaseTools/Tests/PythonTest.py
index ec44c7947086..1716f78b5217 100644
--- a/BaseTools/Tests/PythonTest.py
+++ b/BaseTools/Tests/PythonTest.py
@@ -1,9 +1,26 @@
 ## @file
-# Test whether PYTHON_COMMAND is available
+# Test whether PYTHON_COMMAND is available and the
+# minimum Python version is installed.
 #
 # Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
 
+import sys
+
 if __name__ == '__main__':
-    print('TRUE')
+    # Check if the major and minor versions required were specified.
+    if len(sys.argv) >= 3:
+        req_major_version = int(sys.argv[1])
+        req_minor_version = int(sys.argv[2])
+    else:
+        # If the minimum version wasn't specified on the command line,
+        # default to 3.9 which was the minimum required on 2023-04-24.
+        req_major_version = 3
+        req_minor_version = 9
+
+    if sys.version_info.major == req_major_version and \
+       sys.version_info.minor >= req_minor_version:
+        sys.exit(0)
+    else:
+        sys.exit(1)
diff --git a/BaseTools/toolsetup.bat b/BaseTools/toolsetup.bat
index 29a630b9035c..66df628eac5f 100755
--- a/BaseTools/toolsetup.bat
+++ b/BaseTools/toolsetup.bat
@@ -12,6 +12,8 @@
 @echo off
 pushd .
 set SCRIPT_ERROR=0
+set PYTHON_VER_MAJOR=3
+set PYTHON_VER_MINOR=9
 
 @REM ##############################################################
 @REM # You should not have to modify anything below this line
@@ -322,17 +324,19 @@ goto check_build_environment
      )
   )
 
-:defined_python
+@REM Check Python environment
 
 if not defined PYTHON_COMMAND (
   set PYTHON_COMMAND=py -3
-  py -3 %BASE_TOOLS_PATH%\Tests\PythonTest.py >PythonCheck.txt 2>&1
-  setlocal enabledelayedexpansion
-  set /p PythonCheck=<"PythonCheck.txt"
-  del PythonCheck.txt
-  if "!PythonCheck!" NEQ "TRUE" (
+  py -3 %BASE_TOOLS_PATH%\Tests\PythonTest.py %PYTHON_VER_MAJOR% %PYTHON_VER_MINOR% >NUL 2>NUL
+  if %ERRORLEVEL% EQU 1 (
+    echo.
+    echo !!! ERROR !!! Python %PYTHON_VER_MAJOR%.%PYTHON_VER_MINOR% or newer is required.
+    echo.
+    goto end
+  )
+  if %ERRORLEVEL% NEQ 0 (
     if not defined PYTHON_HOME if not defined PYTHONHOME (
-      endlocal
       set PYTHON_COMMAND=
       echo.
       echo !!! ERROR !!! Binary python tools are missing.
@@ -345,8 +349,6 @@ if not defined PYTHON_COMMAND (
   )
 )
 
-endlocal
-
 if defined PYTHON_HOME (
   if EXIST "%PYTHON_HOME%" (
     set PYTHON_COMMAND=%PYTHON_HOME%\python.exe
@@ -358,27 +360,30 @@ if defined PYTHON_HOME (
   )
 )
 
-%PYTHON_COMMAND% %BASE_TOOLS_PATH%\Tests\PythonTest.py >PythonCheck.txt 2>&1
-  setlocal enabledelayedexpansion
-  set /p PythonCheck=<"PythonCheck.txt"
-  del PythonCheck.txt
-  if "!PythonCheck!" NEQ "TRUE" (
-    echo.
-    echo ! ERROR !  PYTHON_COMMAND="%PYTHON_COMMAND%" is not installed or added to environment variables
-    echo.
-    goto end
+%PYTHON_COMMAND% %BASE_TOOLS_PATH%\Tests\PythonTest.py %PYTHON_VER_MAJOR% %PYTHON_VER_MINOR% >NUL 2>NUL
+if %ERRORLEVEL% EQU 1 (
+  echo.
+  echo !!! ERROR !!! Python %PYTHON_VER_MAJOR%.%PYTHON_VER_MINOR% or newer is required.
+  echo.
+  goto end
+)
+if %ERRORLEVEL% NEQ 0 (
+  echo.
+  echo !!! ERROR !!!  PYTHON_COMMAND="%PYTHON_COMMAND%" does not exist or is not a Python interpreter.
+  echo.
+  goto end
 )
 
 endlocal
 
-  %PYTHON_COMMAND% -c "import edk2basetools" >NUL 2>NUL
-  if %ERRORLEVEL% EQU 0 (
-    goto use_pip_basetools
-  ) else (
-    REM reset ERRORLEVEL
-    type nul>nul
-    goto use_builtin_basetools
-  )
+%PYTHON_COMMAND% -c "import edk2basetools" >NUL 2>NUL
+if %ERRORLEVEL% EQU 0 (
+  goto use_pip_basetools
+) else (
+  REM reset ERRORLEVEL
+  type nul>nul
+  goto use_builtin_basetools
+)
 
 :use_builtin_basetools
   @echo Using EDK2 in-source Basetools
@@ -466,5 +471,7 @@ set VS2015=
 set VS2013=
 set VS2012=
 set VSTool=
+set PYTHON_VER_MAJOR=
+set PYTHON_VER_MINOR=
+set SCRIPT_ERROR=
 popd
-
-- 
2.40.0.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103591): https://edk2.groups.io/g/devel/message/103591
Mute This Topic: https://groups.io/mt/98497587/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
回复: [edk2-devel] [PATCH 4/6] BaseTools: Update toolsetup.bat and Tests/PythonTest.py to check ver
Posted by gaoliming via groups.io 1 year, 4 months ago
Rebecca:
  This change will break some development machines those have not installed
Python 3.9 or above. Now, those machines can still work.
  
  I suggest to report warning message first if the python version doesn't
match.

Thanks
Liming
> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Rebecca Cran
> 发送时间: 2023年4月26日 1:15
> 收件人: devel@edk2.groups.io; Andrew Fish <afish@apple.com>; Leif
> Lindholm <quic_llindhol@quicinc.com>; Michael D Kinney
> <michael.d.kinney@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>;
> Bob Feng <bob.c.feng@intel.com>; Yuwei Chen <yuwei.chen@intel.com>
> 抄送: Rebecca Cran <rebecca@bsdio.com>
> 主题: [edk2-devel] [PATCH 4/6] BaseTools: Update toolsetup.bat and
> Tests/PythonTest.py to check ver
> 
> Update toolsetup.bat and Tests/PythonTest.py to check if we're running a
> version of Python that's compatible with BaseTools and the Pip
> BaseTools.
> 
> Since edk2-pytool-extensions
> (https://pypi.org/project/edk2-pytool-extensions/) requires Python 3.9
> or newer, set that as the minimum version EDK2 requires.
> 
> Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
> ---
>  BaseTools/Tests/PythonTest.py | 21 ++++++-
>  BaseTools/toolsetup.bat       | 61 +++++++++++---------
>  2 files changed, 53 insertions(+), 29 deletions(-)
> 
> diff --git a/BaseTools/Tests/PythonTest.py b/BaseTools/Tests/PythonTest.py
> index ec44c7947086..1716f78b5217 100644
> --- a/BaseTools/Tests/PythonTest.py
> +++ b/BaseTools/Tests/PythonTest.py
> @@ -1,9 +1,26 @@
>  ## @file
> -# Test whether PYTHON_COMMAND is available
> +# Test whether PYTHON_COMMAND is available and the
> +# minimum Python version is installed.
>  #
>  # Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
>  #
> 
> +import sys
> +
>  if __name__ == '__main__':
> -    print('TRUE')
> +    # Check if the major and minor versions required were specified.
> +    if len(sys.argv) >= 3:
> +        req_major_version = int(sys.argv[1])
> +        req_minor_version = int(sys.argv[2])
> +    else:
> +        # If the minimum version wasn't specified on the command line,
> +        # default to 3.9 which was the minimum required on 2023-04-24.
> +        req_major_version = 3
> +        req_minor_version = 9
> +
> +    if sys.version_info.major == req_major_version and \
> +       sys.version_info.minor >= req_minor_version:
> +        sys.exit(0)
> +    else:
> +        sys.exit(1)
> diff --git a/BaseTools/toolsetup.bat b/BaseTools/toolsetup.bat
> index 29a630b9035c..66df628eac5f 100755
> --- a/BaseTools/toolsetup.bat
> +++ b/BaseTools/toolsetup.bat
> @@ -12,6 +12,8 @@
>  @echo off
>  pushd .
>  set SCRIPT_ERROR=0
> +set PYTHON_VER_MAJOR=3
> +set PYTHON_VER_MINOR=9
> 
>  @REM
> ##############################################################
>  @REM # You should not have to modify anything below this line
> @@ -322,17 +324,19 @@ goto check_build_environment
>       )
>    )
> 
> -:defined_python
> +@REM Check Python environment
> 
>  if not defined PYTHON_COMMAND (
>    set PYTHON_COMMAND=py -3
> -  py -3 %BASE_TOOLS_PATH%\Tests\PythonTest.py >PythonCheck.txt 2>&1
> -  setlocal enabledelayedexpansion
> -  set /p PythonCheck=<"PythonCheck.txt"
> -  del PythonCheck.txt
> -  if "!PythonCheck!" NEQ "TRUE" (
> +  py
> -3 %BASE_TOOLS_PATH%\Tests\PythonTest.py %PYTHON_VER_MAJOR% %P
> YTHON_VER_MINOR% >NUL 2>NUL
> +  if %ERRORLEVEL% EQU 1 (
> +    echo.
> +    echo !!! ERROR !!!
> Python %PYTHON_VER_MAJOR%.%PYTHON_VER_MINOR% or newer is
> required.
> +    echo.
> +    goto end
> +  )
> +  if %ERRORLEVEL% NEQ 0 (
>      if not defined PYTHON_HOME if not defined PYTHONHOME (
> -      endlocal
>        set PYTHON_COMMAND=
>        echo.
>        echo !!! ERROR !!! Binary python tools are missing.
> @@ -345,8 +349,6 @@ if not defined PYTHON_COMMAND (
>    )
>  )
> 
> -endlocal
> -
>  if defined PYTHON_HOME (
>    if EXIST "%PYTHON_HOME%" (
>      set PYTHON_COMMAND=%PYTHON_HOME%\python.exe
> @@ -358,27 +360,30 @@ if defined PYTHON_HOME (
>    )
>  )
> 
> -%PYTHON_COMMAND% %BASE_TOOLS_PATH%\Tests\PythonTest.py >Pyth
> onCheck.txt 2>&1
> -  setlocal enabledelayedexpansion
> -  set /p PythonCheck=<"PythonCheck.txt"
> -  del PythonCheck.txt
> -  if "!PythonCheck!" NEQ "TRUE" (
> -    echo.
> -    echo ! ERROR !  PYTHON_COMMAND="%PYTHON_COMMAND%" is
> not installed or added to environment variables
> -    echo.
> -    goto end
> +%PYTHON_COMMAND% %BASE_TOOLS_PATH%\Tests\PythonTest.py %PYT
> HON_VER_MAJOR% %PYTHON_VER_MINOR% >NUL 2>NUL
> +if %ERRORLEVEL% EQU 1 (
> +  echo.
> +  echo !!! ERROR !!!
> Python %PYTHON_VER_MAJOR%.%PYTHON_VER_MINOR% or newer is
> required.
> +  echo.
> +  goto end
> +)
> +if %ERRORLEVEL% NEQ 0 (
> +  echo.
> +  echo !!! ERROR !!!  PYTHON_COMMAND="%PYTHON_COMMAND%"
> does not exist or is not a Python interpreter.
> +  echo.
> +  goto end
>  )
> 
>  endlocal
> 
> -  %PYTHON_COMMAND% -c "import edk2basetools" >NUL 2>NUL
> -  if %ERRORLEVEL% EQU 0 (
> -    goto use_pip_basetools
> -  ) else (
> -    REM reset ERRORLEVEL
> -    type nul>nul
> -    goto use_builtin_basetools
> -  )
> +%PYTHON_COMMAND% -c "import edk2basetools" >NUL 2>NUL
> +if %ERRORLEVEL% EQU 0 (
> +  goto use_pip_basetools
> +) else (
> +  REM reset ERRORLEVEL
> +  type nul>nul
> +  goto use_builtin_basetools
> +)
> 
>  :use_builtin_basetools
>    @echo Using EDK2 in-source Basetools
> @@ -466,5 +471,7 @@ set VS2015=
>  set VS2013=
>  set VS2012=
>  set VSTool=
> +set PYTHON_VER_MAJOR=
> +set PYTHON_VER_MINOR=
> +set SCRIPT_ERROR=
>  popd
> -
> --
> 2.40.0.windows.1
> 
> 
> 
> 
> 





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103687): https://edk2.groups.io/g/devel/message/103687
Mute This Topic: https://groups.io/mt/98530000/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-