171 lines
4.3 KiB
Batchfile
Executable File
171 lines
4.3 KiB
Batchfile
Executable File
@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%
|
|
) ELSE (
|
|
IF EXIST "%%i\VC\Auxiliary\Build\vcvars64.bat" (
|
|
CALL "%%i\VC\Auxiliary\Build\vcvars64.bat" && nmake MSDEV="%PremakeVsVersion%" -f Bootstrap.mak windows
|
|
EXIT /B %ERRORLEVEL%
|
|
)
|
|
)
|
|
)
|
|
|
|
ECHO Could not find vcvars32.bat or vcvars64.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
|