@@ -3,7 +3,9 @@ setlocal enabledelayedexpansion
33
44REM Defined cript variables
55set NASMDL = http://www.nasm.us/pub/nasm/releasebuilds
6- set NASMVERSION = 2.13.03
6+ set NASMVERSION = 2.14.02
7+ set VSWHEREDL = https://github.com/Microsoft/vswhere/releases/download
8+ set VSWHEREVERSION = 2.5.9
79
810REM Store current directory and ensure working directory is the location of current .bat
911set CALLDIR = %CD%
@@ -33,7 +35,10 @@ REM Check if already running in an environment with VS setup
3335if defined VCINSTALLDIR (
3436 if defined VisualStudioVersion (
3537 echo Existing Visual Studio environment detected...
36- if " %VisualStudioVersion% " == " 15.0" (
38+ if " %VisualStudioVersion% " == " 16.0" (
39+ set MSVC_VER = 16
40+ goto MSVCVarsDone
41+ ) else if " %VisualStudioVersion% " == " 15.0" (
3742 set MSVC_VER = 15
3843 goto MSVCVarsDone
3944 ) else if " %VisualStudioVersion% " == " 14.0" (
@@ -48,6 +53,73 @@ if defined VCINSTALLDIR (
4853 )
4954)
5055
56+ REM Get vswhere to detect VS installs
57+ if exist " %SCRIPTDIR% \vswhere.exe" (
58+ echo Using existing vswhere binary...
59+ goto VSwhereDetection
60+ )
61+ set VSWHEREDOWNLOAD = %VSWHEREDL% /%VSWHEREVERSION% /vswhere.exe
62+ echo Downloading required vswhere release binary...
63+ powershell.exe -Command (New-Object Net.WebClient).DownloadFile('%VSWHEREDOWNLOAD% ', '%SCRIPTDIR% \vswhere.exe') > nul 2 >& 1
64+ if not exist " %SCRIPTDIR% \vswhere.exe" (
65+ echo Error: Failed to download required vswhere binary!
66+ echo The following link could not be resolved " %VSWHEREDOWNLOAD% "
67+ echo Now trying fallback detection..."
68+ goto MSVCRegDetection
69+ )
70+
71+ :VSwhereDetection
72+ REM Use vswhere to list detected installs
73+ for /f " usebackq tokens=1* delims=: " %%i in (`vswhere -prerelease -requires Microsoft.Component.MSBuild`) do (
74+ if /i " %%i " == " installationPath" set VSINSTALLDIR = %%j
75+ )
76+ if not " !VSINSTALLDIR! " == " " (
77+ for /f " delims=" %%a in ('echo !VSINSTALLDIR! ^ | find " 2019" ') do ( set VCVER = %%a )
78+ if not " !VCVER! " == " " (
79+ echo Visual Studio 2019 environment detected...
80+ set MSVC_VER = 16
81+ )
82+ set VCVER =
83+ for /f " delims=" %%a in ('echo !VSINSTALLDIR! ^ | find " 2017" ') do ( set VCVER = %%a )
84+ if not " !VCVER! " == " " (
85+ echo Visual Studio 2017 environment detected...
86+ set MSVC_VER = 15
87+ )
88+ call " !VSINSTALLDIR! \VC\Auxiliary\Build\vcvars%SYSARCH% .bat" > nul 2 >& 1
89+ goto MSVCVarsDone
90+ )
91+
92+ REM Try and use vswhere to detect legacy installs
93+ if " %SYSARCH% " == " 32" (
94+ set MSVCVARSDIR =
95+ ) else if " %SYSARCH% " == " 64" (
96+ set MSVCVARSDIR = \amd64
97+ ) else (
98+ goto Terminate
99+ )
100+ for /f " usebackq tokens=1* delims=: " %%i in (`vswhere -legacy`) do (
101+ if /i " %%i " == " installationPath" set VSINSTALLDIR = %%j
102+ )
103+ if not " !VSINSTALLDIR! " == " " (
104+ for /f " delims=" %%a in ('echo !VSINSTALLDIR! ^ | find " 2015" ') do ( set VCVER = %%a )
105+ if not " !VCVER! " == " " (
106+ echo Visual Studio 2015 environment detected...
107+ set MSVC_VER = 13
108+ )
109+ set VCVER =
110+ for /f " delims=" %%a in ('echo !VSINSTALLDIR! ^ | find " 2013" ') do ( set VCVER = %%a )
111+ if not " !VCVER! " == " " (
112+ echo Visual Studio 2013 environment detected...
113+ set MSVC_VER = 12
114+ )
115+ call " !VSINSTALLDIR! \VC\bin%MSVCVARSDIR% \vcvars%SYSARCH% .bat" > nul 2 >& 1
116+ goto MSVCVarsDone
117+ ) else (
118+ echo Error: Failed to detect VS installations using vswhere!
119+ echo Now trying fallback detection..."
120+ )
121+
122+ :MSVCRegDetection
51123REM First check for a environment variable to help locate the VS installation
52124if defined VS140COMNTOOLS (
53125 if exist " %VS140COMNTOOLS% \..\..\VC\vcvarsall.bat" (
@@ -115,7 +187,9 @@ if not ERRORLEVEL 1 (
115187)
116188set /p MSBUILDDIR = < " %SCRIPTDIR% \msbuild.txt"
117189del /F /Q " %SCRIPTDIR% \msbuild.txt" > nul 2 >& 1
118- if " %MSVC_VER% " == " 15" (
190+ if " %MSVC_VER% " == " 16" (
191+ set VCTargetsPath = " ..\..\..\Common7\IDE\VC\VCTargets"
192+ ) else if " %MSVC_VER% " == " 15" (
119193 set VCTargetsPath = " ..\..\..\Common7\IDE\VC\VCTargets"
120194) else (
121195 if " %MSBUILDDIR% " == " %MSBUILDDIR:amd64 =% " (
0 commit comments