Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build, win: vcbuild improvements #17015

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
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
20 changes: 14 additions & 6 deletions tools/msvs/find_python.cmd
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@IF NOT DEFINED DEBUG_HELPER @ECHO OFF
echo Looking for Python 2.x
SETLOCAL
:: If python.exe is in %Path%, just validate
FOR /F "delims=" %%a IN ('where python 2^> NUL') DO (
Expand All @@ -14,18 +15,18 @@ FOR %%K IN ( "HKCU\Software", "HKLM\SOFTWARE", "HKLM\Software\Wow6432Node") DO (
:: If validate returns 0 just jump to the end
IF NOT ERRORLEVEL 1 GOTO :validate
)
EXIT /B 1
goto :no-python

:: Helper subroutine to handle quotes in %1
:find-main-branch
SET main_key="%~1\Python\PythonCore"
REG QUERY %main_key% /s | findstr "2." | findstr InstallPath > NUL 2> NUL
REG QUERY %main_key% /s 2> NUL | findstr "2." | findstr InstallPath > NUL 2> NUL
IF NOT ERRORLEVEL 1 CALL :find-key %main_key%
EXIT /B

:: Query registry sub-tree for InstallPath
:find-key
FOR /F "delims=" %%a IN ('REG QUERY %1 /s ^| findstr "2." ^| findstr InstallPath') DO IF NOT ERRORLEVEL 1 CALL :find-path %%a
FOR /F "delims=" %%a IN ('REG QUERY %1 /s 2> NUL ^| findstr "2." ^| findstr InstallPath') DO IF NOT ERRORLEVEL 1 CALL :find-path %%a
EXIT /B

:: Parse the value of %1 as the path for python.exe
Expand All @@ -39,13 +40,20 @@ EXIT /B 1

:: Check if %p% holds a path to a real python2 executable
:validate
IF NOT EXIST "%p%python.exe" EXIT /B 1
IF NOT EXIST "%p%python.exe" goto :no-python
:: Check if %p% is python2
"%p%python.exe" -V 2>&1 | findstr /R "^Python.2.*" > NUL
IF ERRORLEVEL 1 EXIT /B %ERRORLEVEL%
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=
EXIT /B %ERRORLEVEL%
EXIT /B %ERRORLEVEL%

:no-python2
echo Python found in %p%, but it is not v2.x.
exit /B 1
:no-python
echo Could not find Python.
exit /B 1
1 change: 0 additions & 1 deletion tools/msvs/vswhere_usability_wrapper.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,4 @@ for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do (

:no-vswhere
endlocal
echo could not find "vswhere"
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we keep this. Or upstream to https://github.com/node4good/msvs-com-helper

Copy link
Contributor

Choose a reason for hiding this comment

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

This removes that message, making output look nicer for VS2015 compilation.

Copy link
Contributor

Choose a reason for hiding this comment

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

we just dropped "official" VS2015 support 🤷‍♂️

If you still want to keep output clean, I'd rather you change the call in vcbuild

call tools\msvs\vswhere_usability_wrapper.cmd
to:

if defined DEBUG_HELPER (call tools\msvs\vswhere_usability_wrapper.cmd)
else (call tools\msvs\vswhere_usability_wrapper.cmd > nul)

Copy link
Contributor

Choose a reason for hiding this comment

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

If you still want to keep output clean, I'd rather you change the call in vcbuild

I'd prefer to keep vcbuild clean too.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Even without 2015, if no VS2017 is found, it will look like this:

Looking for Visual Studio 2017
could not find "vswhere"
Failed to find a suitable Visual Studio installation.
Try to run in a "Developer Command Prompt" or consult
https://github.com/nodejs/node/blob/master/BUILDING.md#windows-1

I don't think it looks good, and the could not find "vswhere" is only helpful if you know vcbuild internals. We can use DEBUG_HELPER to debug vcbuild if needed.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ok, I'll move it upstream.

exit /B 1
4 changes: 2 additions & 2 deletions vcbuild.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@echo off
@if not defined DEBUG_HELPER @ECHO OFF
Copy link
Contributor

Choose a reason for hiding this comment

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

YAASS! (I have this floating in all my workspaces, and I keep forgetting to upstream it)


cd %~dp0

Expand Down Expand Up @@ -166,7 +166,7 @@ if "%target%"=="Clean" rmdir /S /Q %~dp0deps\icu
:no-depsicu

call tools\msvs\find_python.cmd
if errorlevel 1 echo Could not find python2 & goto :exit
if errorlevel 1 goto :exit

call :getnodeversion || exit /b 1

Expand Down