@ECHO OFF SETLOCAL SET SCRIPT=%~n0 SET ROOT=%CD% SET TRUE="0"=="0" SET FALSE="0"=="1" SET ALL="tokens=* usebackq" SET VSWHERE_EXE="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" SET VSWHERE=%VSWHERE_EXE% SET VSWHERE=%VSWHERE:(=^(% SET VSWHERE=%VSWHERE:)=^)% SET QUERY=-latest -prerelease SET VSWHERE_MAJOR=2 SET VSWHERE_MINOR=7 SET VSWHERE_PATCH=1 SET VSWHERE_VERSION=%VSWHERE_MAJOR%.%VSWHERE_MINOR%.%VSWHERE_PATCH% SET DEPENDENCIES=QtVsTools_RegExpr;QtMsBuild:TransformAll SET VS2022="-version [17.0^,18.0^)" SET VS2019="-version [16.0^,17.0^)" SET VS2017="-version [15.0^,16.0^)" SET VS_ALL=%VS2022%,%VS2019%,%VS2017% SET VS_LATEST="-all" SET VS_VERSIONS= SET VS_VERSIONS_DEFAULT=%TRUE% SET VERBOSE=%FALSE% SET REBUILD=%FALSE% SET INIT=%FALSE% SET CLEAN=%FALSE% SET BINARYLOG=%FALSE% SET CONFIGURATION=Release SET DO_INSTALL=%FALSE% SET TRANSFORM_INCREMENTAL=true SET START_VS=%FALSE% SET PLATFORM_VS2017="Any CPU" SET PLATFORM_VS2019="Any CPU" SET PLATFORM_VS2022="x64" SET FLAG_VS2022=-vs2022 SET FLAG_VS2019=-vs2019 SET FLAG_VS2017=-vs2017 REM /////////////////////////////////////////////////////////////////////////////////////////////// REM // Process command line arguments :parseArgs SET NEXT_ARG=%2 SET NEXT_ARG_FIRST_TOKEN=%NEXT_ARG:~0,1% IF NOT "%1"=="" ( IF "%1"=="-init" ( SET INIT=%TRUE% ) ELSE IF "%1"=="-rebuild" ( SET REBUILD=%TRUE% ) ELSE IF "%1"=="-config" ( IF NOT "%NEXT_ARG_FIRST_TOKEN%"=="-" ( IF "%NEXT_ARG%"=="" ( ECHO Unknown argument '%2' 1>&2 GOTO :usage ) SET CONFIGURATION=%NEXT_ARG% SHIFT ) ) ELSE IF "%1"=="-deploy" ( SET QtVSToolsDeployTarget=%~f2 SHIFT ) ELSE IF "%1"=="-install" ( SET DO_INSTALL=%TRUE% ) ELSE IF "%1"=="-build" ( REM NOOP ) ELSE IF "%1"=="-verbose" ( SET VERBOSE=%TRUE% ) ELSE IF "%1"=="-bl" ( SET BINARYLOG=%TRUE% ) ELSE IF "%1"=="-startvs" ( SET START_VS=%TRUE% ) ELSE IF "%1"=="-version" ( SET VS_VERSIONS=%VS_VERSIONS%,"-version [%2^,%2.65535]" SET VS_LATEST="-version [%2^,%2.65535]" SHIFT SET VS_LATEST="-version [%2^,%2.65535]" SET VS_VERSIONS_DEFAULT=%FALSE% ) ELSE IF "%1"=="%FLAG_VS2022%" ( SET VS_VERSIONS=%VS_VERSIONS%,%VS2022% SET VS_LATEST=%VS2022% SET VS_VERSIONS_DEFAULT=%FALSE% SET FLAG_VS2022= ) ELSE IF "%1"=="%FLAG_VS2019%" ( SET VS_VERSIONS=%VS_VERSIONS%,%VS2019% SET VS_LATEST=%VS2019% SET VS_VERSIONS_DEFAULT=%FALSE% SET FLAG_VS2019= ) ELSE IF "%1"=="%FLAG_VS2017%" ( SET VS_VERSIONS=%VS_VERSIONS%,%VS2017% SET VS_LATEST=%VS2017% SET VS_VERSIONS_DEFAULT=%FALSE% SET FLAG_VS2017= ) ELSE IF "%1"=="-help" ( GOTO :usage ) ELSE ( ECHO Unknown argument '%1' 1>&2 GOTO :usage ) SHIFT GOTO :parseArgs ) IF NOT EXIST vstools.sln ( ECHO Error: could not find Qt VS Tools solution file. EXIT /B 1 ) IF %INIT% ( SET CLEAN=%TRUE% SET MSBUILD_TARGETS=Clean SET MSBUILD_EXTRAS=%MSBUILD_EXTRAS% -p:CleanDependsOn=TransformDuringBuild SET VS_VERSIONS=%VS_LATEST% SET DO_INSTALL=%FALSE% SET TRANSFORM_INCREMENTAL=false ) ELSE IF %REBUILD% ( SET CLEAN=%TRUE% SET INIT=%TRUE% SET MSBUILD_TARGETS=Rebuild IF %VS_VERSIONS_DEFAULT% SET VS_VERSIONS=%VS_ALL% SET TRANSFORM_INCREMENTAL=false ) ELSE ( SET MSBUILD_TARGETS=Build IF %VS_VERSIONS_DEFAULT% SET VS_VERSIONS=%VS_ALL% ) IF %VERBOSE% ( SET MSBUILD_VERBOSITY=normal ) ELSE ( SET MSBUILD_VERBOSITY=minimal ) IF %BINARYLOG% ( SET MSBUILD_EXTRAS=%MSBUILD_EXTRAS% -bl ) REM /////////////////////////////////////////////////////////////////////////////////////////////// REM // Check requirements IF %VERBOSE% ECHO ## root: %ROOT% IF NOT EXIST vstools.sln ( ECHO Error: could not find Qt VS Tools solution file. EXIT /B 1 ) IF NOT EXIST %VSWHERE_EXE% ( ECHO Error: could not find Visual Studio Locator tool. EXIT /B 1 ) FOR /F %ALL% %%v IN (`"%VSWHERE% -help"`) DO ( SET VSWHERE_LOGO=%%v GOTO :break_vswhere_help ) :break_vswhere_help IF %VERBOSE% ECHO ## vswhere: %VSWHERE_LOGO% SET VSWHERE_OK=%TRUE% FOR /F "tokens=5,6,7 delims=.+ " %%v IN ("%VSWHERE_LOGO%") DO ( IF %%v LSS %VSWHERE_MAJOR% ( SET VSWHERE_OK=%FALSE% ) ELSE IF %%v EQU %VSWHERE_MAJOR% ( IF %%w LSS %VSWHERE_MINOR% ( SET VSWHERE_OK=%FALSE% ) ELSE IF %%w EQU %VSWHERE_MINOR% IF %%x LSS %VSWHERE_PATCH% ( SET VSWHERE_OK=%FALSE% ) ) ) IF NOT %VSWHERE_OK% ( ECHO Error: Visual Studio Locator version must be %VSWHERE_VERSION% or greater. EXIT /B 1 ) REM /////////////////////////////////////////////////////////////////////////////////////////////// REM // Cycle through installed VS products IF %VERBOSE% ECHO ## VS versions: %VS_VERSIONS% FOR %%v IN (%VS_VERSIONS%) DO ( SETLOCAL IF %VERBOSE% ECHO ## Querying VS version: %%v IF %VERBOSE% ECHO ## %VSWHERE% %QUERY% %%~v -property installationPath FOR /F %ALL% %%p IN (`"%VSWHERE% %QUERY% %%~v -property installationPath"`) DO ( IF %VERBOSE% ECHO ## installationPath: %%p IF %VERBOSE% ECHO ## %VSWHERE% -path "%%p" -property catalog_productLineVersion FOR /F %ALL% %%e IN (`"%VSWHERE% -path "%%p" -property catalog_productLineVersion"`) DO ( IF %VERBOSE% ECHO ## catalog_productLineVersion: %%e IF %VERBOSE% ECHO ## %VSWHERE% -path "%%p" -property displayName FOR /F %ALL% %%n IN (`"%VSWHERE% -path "%%p" -property displayName"`) DO ( IF %VERBOSE% ECHO ## displayName: %%n IF %VERBOSE% ECHO ## %VSWHERE% -path "%%p" -property installationVersion FOR /F %ALL% %%i IN (`"%VSWHERE% -path "%%p" -property installationVersion"`) DO ( IF %VERBOSE% ECHO ## installationVersion: %%i FOR /F %ALL% %%f IN (`CMD /C "ECHO %%PLATFORM_VS%%e%%"`) DO ( IF %VERBOSE% ECHO ## platform: %%f IF "%%e"=="2022" ( IF %VERBOSE% ECHO ## CALL "%%p\VC\Auxiliary\Build\vcvars64.bat" CALL "%%p\VC\Auxiliary\Build\vcvars64.bat" > NUL ) ELSE ( IF %VERBOSE% ECHO ## CALL "%%p\VC\Auxiliary\Build\vcvars32.bat" CALL "%%p\VC\Auxiliary\Build\vcvars32.bat" > NUL ) ECHO ################################################################################ ECHO ## %%n ^(%%i^) WHERE /Q msbuild && ( FOR /F %ALL% %%m IN (`msbuild -version -nologo`) DO ( ECHO ## msbuild v%%m ) ) || ( ECHO Error: msbuild not found EXIT /B 3 ) IF NOT "%QtVSToolsDeployTarget%"=="" ECHO ## Deploy to: %QtVSToolsDeployTarget% ECHO ################################################################################ ECHO. IF NOT %INIT% ( IF NOT %REBUILD% ( IF %START_VS% ( ECHO ############################################################################### ECHO ## Starting Visual Studio... ECHO ############################################################################### devenv vstools.sln EXIT /B 0 ))) IF %CLEAN% ( ECHO ############################################################################### ECHO ## Deleting output files... ECHO ############################################################################### RD /S /Q bin > NUL 2>&1 FOR /F %ALL% %%d IN (`DIR /A:D /B /S bin 2^> NUL`) DO ( RD /S /Q %%d > NUL 2>&1 ) RD /S /Q obj > NUL 2>&1 FOR /F %ALL% %%d IN (`DIR /A:D /B /S obj 2^> NUL`) DO ( RD /S /Q %%d > NUL 2>&1 ) ECHO. ECHO ############################################################################### ECHO ## Restoring packages... ECHO ############################################################################### msbuild ^ -nologo ^ -verbosity:%MSBUILD_VERBOSITY% ^ -t:Restore ^ && ( ECHO. ) || ( ECHO ############################################################################### ECHO ## ERROR restoring packages! 1>&2 ECHO ############################################################################### EXIT /B %ERRORLEVEL% ) ) IF %INIT% ( ECHO ################################################################################ ECHO ## Building pre-requisites... IF %VERBOSE% ( ECHO ## msbuild: vstools.sln ECHO ## msbuild: -t:%DEPENDENCIES% ECHO ## msbuild: -p:Configuration=%CONFIGURATION% ECHO ## msbuild: -p:Platform=%%f ECHO ## msbuild: -p:TransformOutOfDateOnly=false ECHO ## msbuild extras: %MSBUILD_EXTRAS% ) ECHO ################################################################################ msbuild ^ -nologo ^ -verbosity:%MSBUILD_VERBOSITY% ^ -maxCpuCount ^ -t:%DEPENDENCIES% ^ -p:Configuration=%CONFIGURATION% ^ -p:Platform=%%f ^ -p:TransformOutOfDateOnly=false ^ %MSBUILD_EXTRAS% ^ vstools.sln ^ && ( ECHO. ) || ( ECHO ############################################################################### ECHO ## ERROR building pre-requisites 1>&2 ECHO ############################################################################### EXIT /B %ERRORLEVEL% ) ) ECHO ################################################################################ ECHO ## msbuild: vstools.sln ECHO ## msbuild: -t:%MSBUILD_TARGETS% ECHO ## msbuild: -p:Configuration=%CONFIGURATION% ECHO ## msbuild: -p:Platform=%%f IF %VERBOSE% ( ECHO ## msbuild: -p:TransformOutOfDateOnly=%TRANSFORM_INCREMENTAL% ECHO ## msbuild: -verbosity:%MSBUILD_VERBOSITY% ECHO ## msbuild extras: %MSBUILD_EXTRAS% ) ECHO ################################################################################ msbuild ^ -nologo ^ -verbosity:%MSBUILD_VERBOSITY% ^ -maxCpuCount ^ -p:Configuration=%CONFIGURATION% ^ -p:Platform=%%f ^ -p:TransformOutOfDateOnly=%TRANSFORM_INCREMENTAL% ^ -t:%MSBUILD_TARGETS% ^ %MSBUILD_EXTRAS% ^ vstools.sln ^ && ( ECHO ################################################################################ ECHO ## %%n ^(%%i^) ECHO ## Solution build successful. ECHO ################################################################################ ECHO. ) || ( ECHO ################################################################################ ECHO ## %%n ^(%%i^) ECHO ## ERROR building solution 1>&2 ECHO ################################################################################ EXIT /B %ERRORLEVEL% ) IF %DO_INSTALL% ( ECHO ################################################################################ ECHO ## Installing VSIX package ECHO ################################################################################ ECHO Removing previous installation... IF "%%e"=="2022" ( VSIXInstaller /uninstall:QtVsTools.8e827d74-6fc4-40a6-a3aa-faf19652b3b8 ) ELSE IF "%%e"=="2019" ( VSIXInstaller /uninstall:QtVsTools.bf3c71c0-ab41-4427-ada9-9b3813d89ff5 ) ELSE IF "%%e"=="2017" ( VSIXInstaller /uninstall:QtVsTools.13121978-cd02-4fd0-89bd-e36f85abe16a ) ECHO Installing... VSIXInstaller QtVsTools.Package\bin\Release\QtVsTools.vsix ECHO. ) IF %START_VS% ( ECHO ############################################################################### ECHO ## Starting Visual Studio... ECHO ############################################################################### devenv vstools.sln EXIT /B 0 ) ECHO. ) )))) ENDLOCAL ) EXIT /B 0 :usage ECHO Usage: ECHO. ECHO %SCRIPT% [VS Versions] [Operation] [Options] ECHO. ECHO == 'VS Versions' can be one or more of the following: ECHO -vs2022 ................ Select the latest version of Visual Studio 2022 ECHO -vs2019 ................ Select the latest version of Visual Studio 2019 ECHO -vs2017 ................ Select the latest version of Visual Studio 2017 ECHO -version ^.^ ....... Select version X.Y of Visual Studio ECHO Can be specified several times ECHO. ECHO If no version is specified, the most recent version of VS is selected. ECHO. ECHO == 'Operation' can be one of the following: ECHO -build ......... Incremental build of solution ECHO -rebuild ....... Clean build of solution ECHO -init .......... Initialize vstools solution for the specified version of VS ECHO If multiple versions are specified, the last one is selected ECHO -startvs ....... Open vstools solution in selected VS version ECHO. ECHO If no operation is specified, -build is assumed by default. ECHO. ECHO == 'Options' can be one or more of the following ECHO -config ^ ....... Select CONFIG_NAME as the build configuration ECHO Defaults to the 'Release' configuration ECHO Only valid with -build or -rebuild ECHO -deploy ^ ........ Deploy installation package to DEPLOY_DIR ECHO Only valid with -build or -rebuild ECHO -install .................... Install extension to selected VS version(s) ECHO Only valid with -build or -rebuild ECHO -startvs .................... Open vstools solution in selected VS version ECHO -verbose .................... Print more detailed log information ECHO -bl ......................... Generate MSBuild binary log ECHO Only valid with -build or -rebuild ECHO. EXIT /B 1