From 7bff96204bd2c4de4f7ff294d8d6be5a9c53c8d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Reis?= Date: Tue, 3 Sep 2019 16:44:50 +0100 Subject: [PATCH] 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 Reviewed-By: James M Snell Reviewed-By: Minwoo Jung Reviewed-By: David Carlier --- .gitattributes | 1 + tools/msvs/find_python.cmd | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.gitattributes b/.gitattributes index fa5162684b8..9f7d9377eaf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ test/fixtures/* -text vcbuild.bat text eol=crlf +tools/msvs/find_python.cmd text eol=crlf diff --git a/tools/msvs/find_python.cmd b/tools/msvs/find_python.cmd index cb98f9df432..728eeb405b8 100644 --- a/tools/msvs/find_python.cmd +++ b/tools/msvs/find_python.cmd @@ -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