Skip to content

Commit 2a1a93d

Browse files
refackMylesBorins
authored andcommitted
build,windows: implement PEP514 python detection
Backport-PR-URL: #14842 PR-URL: #13900Fixes: #13882 Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 1633f8b commit 2a1a93d

2 files changed

Lines changed: 66 additions & 11 deletions

File tree

‎tools/msvs/find_python.cmd‎

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
@IF NOT DEFINED DEBUG_HELPER @ECHOOFF
2+
SETLOCAL
3+
:: If python.exe is in %Path%, just validate
4+
FOR /F "delims="%%aIN ('where python 2^>NUL') DO (
5+
SETneed_path=0
6+
SETp=%%~dpa
7+
IFNOTERRORLEVEL1GOTO :validate
8+
)
9+
10+
:: Query the 3 locations mentioned in PEP 514 for a python2 InstallPath
11+
FOR%%KIN ( "HKCU\Software", "HKLM\SOFTWARE", "HKLM\Software\Wow6432Node") DO (
12+
SETneed_path=1
13+
CALL :find-main-branch%%K
14+
:: If validate returns 0 just jump to the end
15+
IFNOTERRORLEVEL1GOTO :validate
16+
)
17+
EXIT /B 1
18+
19+
:: Helper subroutine to handle quotes in %1
20+
:find-main-branch
21+
SETmain_key="%~1\Python\PythonCore"
22+
REGQUERY%main_key% /s |findstr"2."|findstr InstallPath >NUL2>NUL
23+
IFNOTERRORLEVEL1CALL :find-key%main_key%
24+
EXIT /B
25+
26+
:: Query registry sub-tree for InstallPath
27+
:find-key
28+
FOR /F "delims="%%aIN ('REG QUERY%1 /s ^| findstr"2."^| findstr InstallPath') DOIFNOTERRORLEVEL1CALL :find-path%%a
29+
EXIT /B
30+
31+
:: Parse the value of %1 as the path for python.exe
32+
:find-path
33+
FOR /F "tokens=3*"%%aIN ('REG QUERY%1 /ve') DO (
34+
SETpt=%%a
35+
IFNOTERRORLEVEL1SETp=%pt%
36+
EXIT /B 0
37+
)
38+
EXIT /B 1
39+
40+
:: Check if %p% holds a path to a real python2 executable
41+
:validate
42+
IFNOTEXIST"%p%python.exe"EXIT /B 1
43+
:: Check if %p% is python2
44+
%p%python.exe -V 2>&1 |findstr /R "^Python.2.*">NUL
45+
IFERRORLEVEL1EXIT /B %ERRORLEVEL%
46+
:: We can wrap it up
47+
ENDLOCAL&SETpt=%p%&SETneed_path_ext=%need_path%
48+
SETVCBUILD_PYTHON_LOCATION=%pt%python.exe
49+
IF%need_path_ext%==1SETPath=%Path%;%pt%
50+
SETneed_path_ext=
51+
EXIT /B %ERRORLEVEL%

‎vcbuild.bat‎

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,7 @@ goto run
174174
ifdefined noprojgen goto msbuild
175175

176176
@rem Generate the VS project.
177-
echo configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG%
178-
python configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG%
177+
call :run-python configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG%
179178
iferrorlevel1goto create-msvs-files-failed
180179
ifnotexist node.sln goto create-msvs-files-failed
181180
echo Project files generated.
@@ -340,8 +339,7 @@ if "%config%"=="Debug" set test_args=--mode=debug %test_args%
340339
if"%config%"=="Release"settest_args=--mode=release %test_args%
341340
echo running 'cctest %cctest_args%'
342341
"%config%\cctest"%cctest_args%
343-
echo running 'python tools\test.py %test_args%'
344-
python tools\test.py %test_args%
342+
call :run-python tools\test.py %test_args%
345343
goto jslint
346344

347345
:jslint
@@ -377,6 +375,14 @@ echo vcbuild.bat build-release : builds the release distribution as used by n
377375
echo vcbuild.bat enable-vtune : builds nodejs with Intel VTune profiling support to profile JavaScript
378376
gotoexit
379377

378+
:run-python
379+
call tools\msvs\find_python.cmd
380+
iferrorlevel1echo Could not find python2 &goto :exit
381+
setcmd1=%VCBUILD_PYTHON_LOCATION%%*
382+
echo%cmd1%
383+
%cmd1%
384+
exit /b %ERRORLEVEL%
385+
380386
:exit
381387
goto :EOF
382388

@@ -388,8 +394,9 @@ rem ***************
388394
setNODE_VERSION=
389395
setTAG=
390396
setFULLVERSION=
391-
392-
for /F "usebackq tokens=*"%%iin (`python "%~dp0tools\getnodeversion.py"`) dosetNODE_VERSION=%%i
397+
:: Call as subroutine for validation of python
398+
call :run-python tools\getnodeversion.py >nul
399+
for /F "tokens=*"%%iin ('%VCBUILD_PYTHON_LOCATION% tools\getnodeversion.py') dosetNODE_VERSION=%%i
393400
ifnotdefined NODE_VERSION (
394401
echo Cannot determine current version of Node.js
395402
exit /b 1
@@ -398,7 +405,7 @@ if not defined NODE_VERSION (
398405
ifnotdefined DISTTYPE setDISTTYPE=release
399406
if"%DISTTYPE%"=="release" (
400407
setFULLVERSION=%NODE_VERSION%
401-
gotoexit
408+
exit /b 0
402409
)
403410
if"%DISTTYPE%"=="custom" (
404411
ifnotdefined CUSTOMTAG (
@@ -425,7 +432,4 @@ if not "%DISTTYPE%"=="custom" (
425432
setTAG=%DISTTYPE%%DATESTRING%%COMMIT%
426433
)
427434
setFULLVERSION=%NODE_VERSION%-%TAG%
428-
429-
:exit
430-
ifnotdefined DISTTYPEDIR setDISTTYPEDIR=%DISTTYPE%
431-
goto :EOF
435+
exit /b 0

0 commit comments

Comments
 (0)