1@rem 2@rem Searches for MSBuild.exe. This is the only tool we need to initiate 3@rem a build, so we no longer search for the full VC toolset. 4@rem 5@rem This file is supposed to modify the state of the caller (specifically 6@rem the MSBUILD variable), so we do not use setlocal or echo, and avoid 7@rem changing any other persistent state. 8@rem 9 10@rem No arguments provided means do full search 11@if '%1' EQU '' goto :begin_search 12 13@rem One argument may be the full path. Use a goto so we don't try to 14@rem parse the next if statement - incorrect quoting in the multi-arg 15@rem case can cause us to break immediately. 16@if '%2' EQU '' goto :one_arg 17 18@rem Entire command line may represent the full path if quoting failed. 19@if exist "%*" (set MSBUILD="%*") & (set _Py_MSBuild_Source=environment) & goto :found 20@goto :begin_search 21 22:one_arg 23@if exist "%~1" (set MSBUILD="%~1") & (set _Py_MSBuild_Source=environment) & goto :found 24 25:begin_search 26@set MSBUILD= 27 28@rem If msbuild.exe is on the PATH, assume that the user wants that one. 29@msbuild /version > nul 2>&1 30@if NOT ERRORLEVEL 9009 set MSBUILD=msbuild & (set _Py_MSBuild_Source=PATH) & goto :found 31 32@rem VS 2015 and earlier register MSBuild separately, so we can find it. 33@rem Prefer MSBuild 14.0 over MSBuild 15.0, since the latter may not be able to find a VC14 install. 34@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0" /v MSBuildToolsPath /reg:32 >nul 2>nul 35@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 @( 36 @if "%%i"=="MSBuildToolsPath" @if exist "%%k\msbuild.exe" @(set MSBUILD="%%k\msbuild.exe") 37) 38@if exist %MSBUILD% (set _Py_MSBuild_Source=registry) & goto :found 39 40@rem VS 2017 sets exactly one install as the "main" install, so we may find MSBuild in there. 41@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32 >nul 2>nul 42@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 @( 43 @if "%%i"=="15.0" @if exist "%%k\MSBuild\15.0\Bin\msbuild.exe" @(set MSBUILD="%%k\MSBuild\15.0\Bin\msbuild.exe") 44) 45@if exist %MSBUILD% (set _Py_MSBuild_Source=Visual Studio 2017 registry) & goto :found 46 47 48@exit /b 1 49 50:found 51@echo Using %MSBUILD% (found in the %_Py_MSBuild_Source%) 52@set _Py_MSBuild_Source= 53