123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- @ECHO OFF
- SETLOCAL
- SETLOCAL ENABLEDELAYEDEXPANSION
- REM ===========================================================================
- SET SelfPath="%0"
- SET VsWherePath="C:/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe"
- REM ===========================================================================
- SET vsversion=%1
- IF "%vsversion%" == "" (
- CALL :BootstrapLatest
- EXIT /B %ERRORLEVEL%
- )
- IF "%vsversion%" == "vs2010" (
- CALL :LegacyVisualBootstrap "%vsversion%" "100"
- ) ELSE IF "%vsversion%" == "vs2012" (
- CALL :LegacyVisualBootstrap "%vsversion%" "110"
- ) ELSE IF "%vsversion%" == "vs2013" (
- CALL :LegacyVisualBootstrap "%vsversion%" "120"
- ) ELSE IF "%vsversion%" == "vs2015" (
- CALL :LegacyVisualBootstrap "%vsversion%" "140"
- ) ELSE IF "%vsversion%" == "vs2017" (
- CALL :VsWhereVisualBootstrap "%vsversion%" "15.0" "16.0"
- ) ELSE IF "%vsversion%" == "vs2019" (
- CALL :VsWhereVisualBootstrap "%vsversion%" "16.0" "17.0"
- ) ELSE IF "%vsversion%" == "vs2022" (
- CALL :VsWhereVisualBootstrap "%vsversion%" "17.0" "18.0"
- ) ELSE (
- ECHO Unrecognized Visual Studio version %vsversion%
- EXIT /B 2
- )
- REM On error, pause to allow user to notice it if script was launched through explorer
- IF %ERRORLEVEL% NEQ 0 (
- PAUSE
- )
- EXIT /B %ERRORLEVEL%
- REM ===========================================================================
- REM Utils
- REM ===========================================================================
- REM %1: PremakeVsVersion -> ex: vs2015
- REM %2: VsVersion envvar -> ex: 140
- :LegacyVisualBootstrap
- SET "VsVersion_NoPoint=%~2"
- SET "VsEnvVar=VS%VsVersion_NoPoint%COMNTOOLS"
- SET "VsPath=!%VsEnvVar%!"
- IF NOT EXIST "%VsPath%vsdevcmd.bat" (
- ECHO Could not find vsdevcmd.bat to setup Visual Studio environment
- EXIT /B 2
- )
- CALL "%VsPath%vsdevcmd.bat" && nmake MSDEV="%~1" -f Bootstrap.mak windows
- EXIT /B %ERRORLEVEL%
- REM :LegacyVisualBootstrap
- REM ===========================================================================
- REM %1: PremakeVsVersion -> ex: vs2010
- REM %2: VisualStudio-style VSversionMin -> ex: 15.0
- REM %3: VisualStudio-style VSversionMax -> ex: 16.0
- :VsWhereVisualBootstrap
- SET "PremakeVsVersion=%~1"
- SET "VsVersionMin=%~2"
- SET "VsVersionMax=%~3"
- REM ref: https://github.com/Microsoft/vswhere/wiki/Start-Developer-Command-Prompt
- IF NOT EXIST %VsWherePath% (
- ECHO Could not find vswhere.exe
- EXIT /B 2
- )
- SET VsWhereCmdLine="!VsWherePath! -nologo -latest -version [%VsVersionMin%,%VsVersionMax%) -property installationPath"
- FOR /F "usebackq delims=" %%i in (`!VsWhereCmdLine!`) DO (
- IF EXIST "%%i\VC\Auxiliary\Build\vcvars32.bat" (
- CALL "%%i\VC\Auxiliary\Build\vcvars32.bat" && nmake MSDEV="%PremakeVsVersion%" -f Bootstrap.mak windows
- EXIT /B %ERRORLEVEL%
- )
- )
- ECHO Could not find vcvars32.bat to setup Visual Studio environment
- EXIT /B 2
- REM :VsWhereVisualBootstrap
- REM ===========================================================================
- :BootstrapLatest
- IF EXIST %VsWherePath% (
- REM First try for not legacy Visual Studios ( >vs2017 )
- SET VsWhereCmdLine="!VsWherePath! -nologo -latest -property catalog.productLineVersion"
- FOR /F "usebackq delims=" %%i in (`!VsWhereCmdLine!`) DO (
- CALL %SelfPath% vs%%i
- EXIT /B %ERRORLEVEL%
- )
- )
- SET LegacyVSVersions=
- REM Get latest Visual Studio legacy version
- REM For all env var starting with VS
- FOR /F "usebackq delims==" %%i in (`SET VS`) DO (
- REM Check if env var match pattern VS*COMNTOOLS (ie: VS140COMNTOOLS)
- ECHO "%%i" | FINDSTR /R /C:VS.*COMNTOOLS >nul && (
- SET "LegacyVSVersions=%%i"
- )
- )
- REM Strip VS
- SET LegacyVSVersions=%LegacyVSVersions:VS=%
- REM Strip COMNTOOLS
- SET LegacyVSVersions=%LegacyVSVersions:COMNTOOLS=%
- SET "VsVersionMap=140-vs2015;120-vs2013;110-vs2012;100-vs2010"
- CALL SET PremakeVsVersion=%%VsVersionMap:*%LegacyVSVersions%-=%%
- SET PremakeVsVersion=%PremakeVsVersion:;=&REM.%
- IF NOT "%PremakeVsVersion%" == "" (
- CALL %SelfPath% %PremakeVsVersion%
- EXIT /B %ERRORLEVEL%
- )
- ECHO Could not find a Visual Studio installation
- EXIT /B 2
- REM :BootstrapLatest
- REM ===========================================================================
- REM SETLOCAL ENABLEDELAYEDEXPANSION
- ENDLOCAL
- REM SETLOCAL
- ENDLOCAL
|