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]
-=-=-=-=-=-=-=-=-=-=-=-
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] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.