Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
build,win: accept Python 3 if 2 is not available
If there is no Python 2 available, use Python 3. This allows to test
running configure with Python 3.
  • Loading branch information
joaocgreis committed Aug 20, 2019
commit acab2ecd6705918efad609bb16b59ed0ec6e00fd
85 changes: 64 additions & 21 deletions tools/msvs/find_python.cmd
Original file line number Diff line number Diff line change
@@ -1,34 +1,62 @@
@IF NOT DEFINED DEBUG_HELPER @ECHO OFF

echo Looking for Python 2.x
echo Looking for Python
setlocal enabledelayedexpansion

:: If python.exe is in %Path%, just validate
:: To remove the preference for Python 2, but still support it, just remove
:: the 5 blocks marked with "Python 2:" and the support warnings

:: Python 2: If python.exe is in %Path%, use if it's Python 2
FOR /F "delims=" %%a IN ('where python.exe 2^> NUL') DO (
SET need_path=0
SET p=%%~dpa
IF NOT ERRORLEVEL 1 GOTO :validate
CALL :validate-v2
IF NOT ERRORLEVEL 1 GOTO :found-python2
GOTO :done-path-v2
)
:done-path-v2

:: Query the 3 locations mentioned in PEP 514 for a python2 InstallPath
:: Python 2: Query the 3 locations mentioned in PEP 514 for a python2 InstallPath
FOR %%K IN ( "HKCU\Software", "HKLM\SOFTWARE", "HKLM\Software\Wow6432Node") DO (
SET need_path=1
CALL :find-versions-v2 %%K
:: If validate returns 0 just jump to the end
IF NOT ERRORLEVEL 1 GOTO :validate
IF NOT ERRORLEVEL 1 CALL :validate-v2
IF NOT ERRORLEVEL 1 GOTO :found-python2
)

:: Use python.exe if in %PATH%
set need_path=0
for /f "delims=" %%a in ('where python.exe 2^> nul') do (
set p=%%~dpa
goto :found-python
)

:: Query the 3 locations mentioned in PEP 514 for a Python InstallPath
set need_path=1
for %%k in ( "HKCU\Software", "HKLM\SOFTWARE", "HKLM\Software\Wow6432Node") do (
call :find-versions %%k
if not errorlevel 1 goto :found-python
)

goto :no-python


:: Find Python 2 installations in a registry location
:: Python 2: Find Python 2 installations in a registry location
:find-versions-v2
for /f "delims=" %%a in ('reg query "%~1\Python\PythonCore" /f * /k 2^> nul ^| findstr /r ^^HK ^| findstr "\\2\."') do (
call :read-installpath %%a
if not errorlevel 1 exit /b 0
)
exit /b 1

:: Find Python installations in a registry location
:find-versions
for /f "delims=" %%a in ('reg query "%~1\Python\PythonCore" /f * /k 2^> nul ^| findstr /r ^^HK') do (
call :read-installpath %%a
if not errorlevel 1 exit /b 0
)
exit /b 1

:: Read the InstallPath of a given Environment Key to %p%
:: https://www.python.org/dev/peps/pep-0514/#installpath
:read-installpath
Expand All @@ -44,22 +72,37 @@ for /f "skip=2 tokens=3*" %%a in ('reg query "%1\InstallPath" /ve /t REG_SZ 2^>
exit /b 1


:: Check if %p% holds a path to a real python2 executable
:validate
IF NOT EXIST "%p%python.exe" goto :no-python
:: Python 2: Check if %p% holds a path to a real python2 executable
:validate-v2
IF NOT EXIST "%p%\python.exe" EXIT /B 1
:: Check if %p% is python2
"%p%python.exe" -V 2>&1 | findstr /R "^Python.2.*" > NUL
IF ERRORLEVEL 1 goto :no-python2
:: We can wrap it up
ENDLOCAL & SET pt=%p%& SET need_path_ext=%need_path%
SET VCBUILD_PYTHON_LOCATION=%pt%python.exe
IF %need_path_ext%==1 SET Path=%Path%;%pt%
SET need_path_ext=
"%p%\python.exe" -V 2>&1 | findstr /R "^Python.2.*" > NUL
EXIT /B %ERRORLEVEL%

:no-python2
echo Python found in %p%, but it is not v2.x.
exit /B 1

:: Python 2:
:found-python2
echo Python 2 found in %p%\python.exe
set pyver=2
goto :done

:found-python
echo Python found in %p%\python.exe
echo WARNING: Python 3 is not yet fully supported, to avoid issues Python 2 should be installed.
set pyver=3
goto :done

:done
endlocal ^
& set "pt=%p%" ^
& set "need_path_ext=%need_path%" ^
& set "VCBUILD_PYTHON_VERSION=%pyver%"
set "VCBUILD_PYTHON_LOCATION=%pt%\python.exe"
if %need_path_ext%==1 set "PATH=%pt%;%PATH%"
set "pt="
set "need_path_ext="
exit /b 0

:no-python
echo Could not find Python.
exit /B 1
exit /b 1
3 changes: 3 additions & 0 deletions vcbuild.bat
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,9 @@ goto exit

:create-msvs-files-failed
echo Failed to create vc project files.
if %VCBUILD_PYTHON_VERSION%==3 (
echo Python 3 is not yet fully supported, to avoid issues Python 2 should be installed.
Copy link
Copy Markdown
Member

@Trott Trott Aug 31, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit that can totally be ignored, especially since this message eventually will go away anyway.

Suggested change
echo Python 3 is not yet fully supported, to avoid issues Python 2 should be installed.
echo Python 3 is not yet fully supported. To avoid issues, Python 2 should be installed.

)
del .used_configure_flags
goto exit

Expand Down