build,win: fix Python detection on localized OS

This code previously assumed the default value was always printed to
the console by reg.exe as "(default)", but this is not true on
localized versions of Windows and can contain spaces.

Fixes: https://github.com/nodejs/node/issues/29417

PR-URL: https://github.com/nodejs/node/pull/29423
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
This commit is contained in:
João Reis 2019-09-03 16:44:50 +01:00 committed by Rich Trott
parent 2882ce911d
commit 7bff96204b
2 changed files with 11 additions and 8 deletions

1
.gitattributes vendored
View File

@ -1,2 +1,3 @@
test/fixtures/* -text
vcbuild.bat text eol=crlf
tools/msvs/find_python.cmd text eol=crlf

View File

@ -60,14 +60,16 @@ exit /b 1
:: Read the InstallPath of a given Environment Key to %p%
:: https://www.python.org/dev/peps/pep-0514/#installpath
:read-installpath
:: %%a will receive token 3
:: %%b will receive *, corresponding to token 4 and all after
for /f "skip=2 tokens=3*" %%a in ('reg query "%1\InstallPath" /ve /t REG_SZ 2^> nul') do (
set "head=%%a"
set "tail=%%b"
set "p=!head!"
if not "!tail!"=="" set "p=!head! !tail!"
exit /b 0
:: %%a will receive everything before ), might have spaces depending on language
:: %%b will receive *, corresponding to everything after )
:: %%c will receive REG_SZ
:: %%d will receive the path, including spaces
for /f "skip=2 tokens=1* delims=)" %%a in ('reg query "%1\InstallPath" /ve /t REG_SZ 2^> nul') do (
for /f "tokens=1*" %%c in ("%%b") do (
if not "%%c"=="REG_SZ" exit /b 1
set "p=%%d"
exit /b 0
)
)
exit /b 1