Browse Source
bpo-30687: Fixes build scripts to find msbuild.exe and stop relying on vcvarsall.bat (#2252)
bpo-30687: Fixes build scripts to find msbuild.exe and stop relying on vcvarsall.bat (#2252)
* Fixes build scripts to find msbuild.exe and stop relying on vcvarsall.bat Also fixes bdist_wininst.vcxproj to use correct version in generated name.pull/2282/head
committed by
GitHub
10 changed files with 102 additions and 51 deletions
-
3Misc/NEWS
-
4PC/bdist_wininst/bdist_wininst.vcxproj
-
11PC/bdist_wininst/build.bat
-
32PCbuild/build.bat
-
51PCbuild/find_msbuild.bat
-
5PCbuild/python.vcxproj
-
10Tools/msi/build.bat
-
15Tools/msi/buildrelease.bat
-
15Tools/msi/uploadrelease.bat
-
7Tools/nuget/build.bat
@ -0,0 +1,51 @@ |
|||
@rem |
|||
@rem Searches for MSBuild.exe. This is the only tool we need to initiate |
|||
@rem a build, so we no longer search for the full VC toolset. |
|||
@rem |
|||
@rem This file is supposed to modify the state of the caller (specifically |
|||
@rem the MSBUILD variable), so we do not use setlocal or echo, and avoid |
|||
@rem changing any other persistent state. |
|||
@rem |
|||
|
|||
@rem No arguments provided means do full search |
|||
@if '%1' EQU '' goto :begin_search |
|||
|
|||
@rem One argument may be the full path. Use a goto so we don't try to |
|||
@rem parse the next if statement - incorrect quoting in the multi-arg |
|||
@rem case can cause us to break immediately. |
|||
@if '%2' EQU '' goto :one_arg |
|||
|
|||
@rem Entire command line may represent the full path if quoting failed. |
|||
@if exist "%*" (set MSBUILD="%*") & (set _Py_MSBuild_Source=environment) & goto :found |
|||
@goto :begin_search |
|||
|
|||
:one_arg |
|||
@if exist "%~1" (set MSBUILD="%~1") & (set _Py_MSBuild_Source=environment) & goto :found |
|||
|
|||
:begin_search |
|||
@set MSBUILD= |
|||
|
|||
@rem If msbuild.exe is on the PATH, assume that the user wants that one. |
|||
@where msbuild > "%TEMP%\msbuild.loc" 2> nul && set /P MSBUILD= < "%TEMP%\msbuild.loc" & del "%TEMP%\msbuild.loc" |
|||
@if exist "%MSBUILD%" set MSBUILD="%MSBUILD%" & (set _Py_MSBuild_Source=PATH) & goto :found |
|||
|
|||
@rem VS 2017 sets exactly one install as the "main" install, so we may find MSBuild in there. |
|||
@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32 >nul 2>nul |
|||
@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32') DO @( |
|||
@if "%%i"=="15.0" @if exist "%%k\MSBuild\15.0\Bin\msbuild.exe" @(set MSBUILD="%%k\MSBuild\15.0\Bin\msbuild.exe") |
|||
) |
|||
@if exist %MSBUILD% (set _Py_MSBuild_Source=Visual Studio 2017 registry) & goto :found |
|||
|
|||
@rem VS 2015 and earlier register MSBuild separately, so we can find it. |
|||
@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32 >nul 2>nul |
|||
@if NOT ERRORLEVEL 1 @for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32') DO @( |
|||
@if "%%i"=="MSBuildToolsPath" @if exist "%%k\msbuild.exe" @(set MSBUILD="%%k\msbuild.exe") |
|||
) |
|||
@if exist %MSBUILD% (set _Py_MSBuild_Source=registry) & goto :found |
|||
|
|||
|
|||
@exit /b 1 |
|||
|
|||
:found |
|||
@echo Using %MSBUILD% (found in the %_Py_MSBuild_Source%) |
|||
@set _Py_MSBuild_Source= |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue