Skip to content

Commit bbd7d81

Browse files
committed
Use vswhere to detect installs.
1 parent dfb77f8 commit bbd7d81

1 file changed

Lines changed: 77 additions & 3 deletions

File tree

install_script.bat

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ setlocal enabledelayedexpansion
33

44
REM Defined cript variables
55
set 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

810
REM Store current directory and ensure working directory is the location of current .bat
911
set CALLDIR=%CD%
@@ -33,7 +35,10 @@ REM Check if already running in an environment with VS setup
3335
if 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
51123
REM First check for a environment variable to help locate the VS installation
52124
if defined VS140COMNTOOLS (
53125
if exist "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" (
@@ -115,7 +187,9 @@ if not ERRORLEVEL 1 (
115187
)
116188
set /p MSBUILDDIR=<"%SCRIPTDIR%\msbuild.txt"
117189
del /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

Comments
 (0)