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,windows: Implement python detection #13900

Merged
merged 1 commit into from
Jun 28, 2017
Merged
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
51 changes: 51 additions & 0 deletions tools/msvs/find_python.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
@IF NOT DEFINED DEBUG_HELPER @ECHO OFF
SETLOCAL
:: If python.exe is in %Path%, just validate
FOR /F "delims=" %%a IN ('where python 2^> NUL') DO (
SET need_path=0
SET p=%%~dpa
IF NOT ERRORLEVEL 1 GOTO :validate
)

:: 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-main-branch %%K
:: If validate returns 0 just jump to the end
IF NOT ERRORLEVEL 1 GOTO :validate
)
EXIT /B 1

:: 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
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
EXIT /B

:: Parse the value of %1 as the path for python.exe
:find-path
FOR /F "tokens=3*" %%a IN ('REG QUERY %1 /ve') DO (
SET pt=%%a
IF NOT ERRORLEVEL 1 SET p=%pt%
EXIT /B 0
)
EXIT /B 1

:: Check if %p% holds a path to a real python2 executable
:validate
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 EXIT /B %ERRORLEVEL%
:: 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%
32 changes: 18 additions & 14 deletions vcbuild.bat
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,7 @@ goto run
if defined noprojgen goto msbuild

@rem Generate the VS project.
echo configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG%
python configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG%
call :run-python configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG%
if errorlevel 1 goto create-msvs-files-failed
if not exist node.sln goto create-msvs-files-failed
echo Project files generated.
Expand Down Expand Up @@ -408,7 +407,7 @@ if defined test_node_inspect goto node-test-inspect
goto node-tests

:node-check-deopts
python tools\test.py --mode=release --check-deopts parallel sequential -J
call :run-python tools\test.py --mode=release --check-deopts parallel sequential -J
if defined test_node_inspect goto node-test-inspect
goto node-tests

Expand All @@ -423,8 +422,7 @@ if "%config%"=="Debug" set test_args=--mode=debug %test_args%
if "%config%"=="Release" set test_args=--mode=release %test_args%
echo running 'cctest %cctest_args%'
"%config%\cctest" %cctest_args%
echo running 'python tools\test.py %test_args%'
python tools\test.py %test_args%
call :run-python tools\test.py %test_args%
goto cpplint

:cpplint
Expand All @@ -442,8 +440,8 @@ test\gc\binding.cc tools\icu\*.cc tools\icu\*.h') do (
( endlocal
set cppfilelist=%localcppfilelist%
)
python tools/cpplint.py %cppfilelist%
python tools/check-imports.py
call :run-python tools/cpplint.py %cppfilelist%
call :run-python tools/check-imports.py
goto jslint

:add-to-list
Expand Down Expand Up @@ -502,6 +500,14 @@ echo vcbuild.bat build-release : builds the release distribution as used by n
echo vcbuild.bat enable-vtune : builds nodejs with Intel VTune profiling support to profile JavaScript
goto exit

:run-python
call tools\msvs\find_python.cmd
if errorlevel 1 echo Could not find python2 & goto :exit
set cmd1=%VCBUILD_PYTHON_LOCATION% %*
echo %cmd1%
%cmd1%
exit /b %ERRORLEVEL%

:exit
goto :EOF

Expand All @@ -513,8 +519,9 @@ rem ***************
set NODE_VERSION=
set TAG=
set FULLVERSION=

for /F "usebackq tokens=*" %%i in (`python "%~dp0tools\getnodeversion.py"`) do set NODE_VERSION=%%i
:: Call as subroutine for validation of python
call :run-python tools\getnodeversion.py > nul
for /F "tokens=*" %%i in ('%VCBUILD_PYTHON_LOCATION% tools\getnodeversion.py') do set NODE_VERSION=%%i
if not defined NODE_VERSION (
echo Cannot determine current version of Node.js
exit /b 1
Expand All @@ -523,7 +530,7 @@ if not defined NODE_VERSION (
if not defined DISTTYPE set DISTTYPE=release
if "%DISTTYPE%"=="release" (
set FULLVERSION=%NODE_VERSION%
goto exit
exit /b 0
)
if "%DISTTYPE%"=="custom" (
if not defined CUSTOMTAG (
Expand All @@ -550,7 +557,4 @@ if not "%DISTTYPE%"=="custom" (
set TAG=%DISTTYPE%%DATESTRING%%COMMIT%
)
set FULLVERSION=%NODE_VERSION%-%TAG%

:exit
if not defined DISTTYPEDIR set DISTTYPEDIR=%DISTTYPE%
Copy link
Member

Choose a reason for hiding this comment

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

@refack I was not able to do a careful review of this PR, but this line caught my eye. Is there a good reason for completely removing this? I believe this will completely break or release process, if DISTTYPEDIR is not set.

Copy link
Member

Choose a reason for hiding this comment

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

Confirmed this breaks. Will try a fix in the build script instead.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Woops. Opening a reversion PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

So I removed it because of :exit is redefined from L511
Fix PR #13969

goto :EOF
exit /b 0