aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2023-12-04 17:51:47 +0100
committerMiguel Costa <miguel.costa@qt.io>2023-12-11 12:23:12 +0000
commit5ca018720a48e70e72aeff09b4b1fcb8896f4d13 (patch)
tree68b14ec74cc21509b1d8c28ee6183582854d0286
parentecfb00c458f2721e8f271458ba1a63559b003b1c (diff)
Refactor vstools.bat
* Split single large script into component scripts * Added option to run auto-tests after build * Added option to specify 'vcvars' argument (e.g. arm64) * Added option to specify build platform * Additional error checking * Banner utility to print messages inside a frame Change-Id: I21364a2f5b3285f90e30fa7bfc3d7a1b19446bff Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--scripts/vstools/args.cmd114
-rw-r--r--scripts/vstools/banner.cmd53
-rw-r--r--scripts/vstools/clean.cmd54
-rw-r--r--scripts/vstools/deploy.cmd25
-rw-r--r--scripts/vstools/error.cmd16
-rw-r--r--scripts/vstools/globals.cmd52
-rw-r--r--scripts/vstools/info.cmd108
-rw-r--r--scripts/vstools/init.cmd41
-rw-r--r--scripts/vstools/install.cmd26
-rw-r--r--scripts/vstools/log_version.cmd19
-rw-r--r--scripts/vstools/msbuild.cmd45
-rw-r--r--scripts/vstools/startvs.cmd14
-rw-r--r--scripts/vstools/tests.cmd59
-rw-r--r--scripts/vstools/usage.cmd66
-rw-r--r--scripts/vstools/validate.cmd92
-rw-r--r--scripts/vstools/vs_versions.cmd145
-rw-r--r--vstools.bat495
-rw-r--r--vstools.sln27
18 files changed, 967 insertions, 484 deletions
diff --git a/scripts/vstools/args.cmd b/scripts/vstools/args.cmd
new file mode 100644
index 00000000..be53965c
--- /dev/null
+++ b/scripts/vstools/args.cmd
@@ -0,0 +1,114 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::args.cmd
+:: * Parses command-line arguments, sets corresponding variables
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+SET ARGS=%*
+
+:parseArgs
+SET ARG=%1
+IF "%ARG%" == "" GOTO :eof
+IF "%ARG%" == "--" (
+ SET MSBUILD_EXTRAS=%MSBUILD_EXTRAS% %ARGS:* -- =%
+ GOTO :eof
+)
+
+SET ORIGINAL_ARG=%ARG%
+IF "%ARG:~0,2%" == "--" (
+ SET ARG=-%ARG:~2%
+) ELSE IF "%ARG:~0,1%" == "/" (
+ SET ARG=-%ARG:~1%
+)
+
+IF "%ARG%" == "-init" (
+ SET INIT=%TRUE%
+) ELSE IF "%ARG%" == "-build" (
+ REM NOOP
+) ELSE IF "%ARG%" == "-rebuild" (
+ SET REBUILD=%TRUE%
+) ELSE IF "%ARG%" == "-version" (
+ IF "%2" == "" (
+ %##########################%
+ %##% Missing argument after '%ORIGINAL_ARG%' 1>&2
+ %##########################%
+ CALL %SCRIPTLIB%\usage.cmd
+ EXIT /B 1
+ )
+ SET VS_VERSIONS=%VS_VERSIONS%,"-version [%2^,%2.65535]"
+ SET VS_LATEST="-version [%2^,%2.65535]"
+ SHIFT
+ SET VS_VERSIONS_DEFAULT=%FALSE%
+) ELSE IF "%ARG%" == "%FLAG_VS2022%" (
+ SET VS_VERSIONS=%VS_VERSIONS%,%VS2022%
+ SET VS_LATEST=%VS2022%
+ SET VS_VERSIONS_DEFAULT=%FALSE%
+ SET FLAG_VS2022=
+) ELSE IF "%ARG%" == "%FLAG_VS2019%" (
+ SET VS_VERSIONS=%VS_VERSIONS%,%VS2019%
+ SET VS_LATEST=%VS2019%
+ SET VS_VERSIONS_DEFAULT=%FALSE%
+ SET FLAG_VS2019=
+) ELSE IF "%ARG%" == "-startvs" (
+ SET START_VS=%TRUE%
+) ELSE IF "%ARG%" == "-list" (
+ SET LIST_VERSIONS=%TRUE%
+) ELSE IF "%ARG%" == "-vcvars" (
+ IF "%~2" == "" (
+ %##########################%
+ %##% Missing argument after '%ORIGINAL_ARG%' 1>&2
+ %##########################%
+ CALL %SCRIPTLIB%\usage.cmd
+ EXIT /B 1
+ )
+ SET VCVARS_ARCH=%~2
+ SHIFT
+) ELSE IF "%ARG%" == "-config" (
+ IF "%~2" == "" (
+ %##########################%
+ %##% Missing argument after '%ORIGINAL_ARG%' 1>&2
+ %##########################%
+ CALL %SCRIPTLIB%\usage.cmd
+ EXIT /B 1
+ )
+ SET BUILD_CONFIGURATION=%~2
+ SHIFT
+) ELSE IF "%ARG%" == "-platform" (
+ IF "%~2" == "" (
+ %##########################%
+ %##% Missing argument after '%ORIGINAL_ARG%' 1>&2
+ %##########################%
+ CALL %SCRIPTLIB%\usage.cmd
+ EXIT /B 1
+ )
+ SET BUILD_PLATFORM=%~2
+ SHIFT
+) ELSE IF "%ARG%" == "-test" (
+ SET AUTOTEST=%TRUE%
+) ELSE IF "%ARG%" == "-deploy" (
+ SET DEPLOY=%TRUE%
+ SET DEPLOY_DIR=%~f2
+ SHIFT
+) ELSE IF "%ARG%" == "-install" (
+ SET DO_INSTALL=%TRUE%
+) ELSE IF "%ARG%" == "-all" (
+ SET QUERY=%QUERY_ALL%
+) ELSE IF "%ARG%" == "-verbose" (
+ SET VERBOSE=%TRUE%
+) ELSE IF "%ARG%" == "-bl" (
+ SET BINARYLOG=%TRUE%
+) ELSE IF "%ARG%" == "-help" (
+ CALL %SCRIPTLIB%\usage.cmd
+ EXIT /B 1
+) ELSE (
+ %##########################%
+ %##% Unknown argument '%ORIGINAL_ARG%' 1>&2
+ %##########################%
+ CALL %SCRIPTLIB%\usage.cmd
+ EXIT /B 1
+)
+SHIFT
+GOTO :parseArgs
diff --git a/scripts/vstools/banner.cmd b/scripts/vstools/banner.cmd
new file mode 100644
index 00000000..f285ff44
--- /dev/null
+++ b/scripts/vstools/banner.cmd
@@ -0,0 +1,53 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::banner.cmd
+:: * Utility definitions that can be used to print messages inside a frame (i.e. banner).
+:: * Example:
+:: %##########################%
+:: %##% LINE 1
+:: %##% LINE 2
+:: %##% LINE 3
+:: %##########################%
+:: Will print out the following:
+:: ################################################################################
+:: ## LINE 1 ##
+:: ## LINE 2 ##
+:: ## LINE 3 ##
+:: ################################################################################
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+SET BANNER_CHARS=#
+SET BANNER_WIDTH=80
+SET BANNER_FRAME_CHARS=#
+SET BANNER_FRAME_WIDTH=2
+SET BANNER_FILE=%TEMP%\vstools.banner
+
+SET ##########################=%BANNER_CHARS%
+FOR /L %%i IN (2,1,%BANNER_WIDTH%) DO (
+ CALL SET "##########################=%%##########################%%%##########################%"
+)
+ECHO %##########################%>%BANNER_FILE%
+DIR %BANNER_FILE% /A:-D /-C | FOR /F "tokens=3" %%a IN ('FINDSTR /R /C:"^[^ ]"') DO @EXIT /B %%a
+
+SET /A "BANNER_LEN = %ERRORLEVEL% - 2"
+SET /A "BANNER_FILE_SIZE = BANNER_LEN + 1"
+
+SET ##=%BANNER_FRAME_CHARS%
+FOR /L %%i IN (2,1,%BANNER_FRAME_WIDTH%) DO CALL SET "##=%%##%%%##%"
+ECHO %##%>%BANNER_FILE%
+DIR %BANNER_FILE% /A:-D /-C | FOR /F "tokens=3" %%a IN ('FINDSTR /R /C:"^[^ ]"') DO @EXIT /B %%a
+
+SET /A "BANNER_FRAME_LEN = %ERRORLEVEL% - 2"
+SET /A "EMPTY_LEN = BANNER_LEN - (2 * BANNER_FRAME_LEN)"
+
+SET EMPTYLN= &
+FOR /L %%i IN (2,1,%EMPTY_LEN%) DO CALL SET "EMPTYLN=%%EMPTYLN%%%EMPTYLN%"
+ECHO %##%%EMPTYLN%%##%>%BANNER_FILE%
+FSUTIL file seteof %BANNER_FILE% %BANNER_FILE_SIZE% > NUL 2>&1
+
+SET ##########################=ECHO %##########################%
+SET ##=TYPE %BANNER_FILE% ^& ECHO %##%
diff --git a/scripts/vstools/clean.cmd b/scripts/vstools/clean.cmd
new file mode 100644
index 00000000..816e840d
--- /dev/null
+++ b/scripts/vstools/clean.cmd
@@ -0,0 +1,54 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::clean.cmd
+:: * Deletes all build-time outputs (removes all 'bin' and 'obj' directories)
+:: * Generates version log
+:: * Restores NuGet packages
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+IF "%BUILD_PLATFORM%" == "" (
+ SET BUILD_PLATFORM=%VSCMD_ARG_TGT_ARCH%
+)
+
+ECHO.
+%##########################%
+%##% Deleting output files...
+%##########################%
+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
+)
+
+CALL %SCRIPTLIB%\log_version.cmd
+
+ECHO.
+%##########################%
+%##% Restoring packages...
+IF %VERBOSE% (
+ %##% msbuild: vstools.sln
+ %##% msbuild: -t:Restore
+ %##% msbuild: -p:Configuration=%BUILD_CONFIGURATION%
+ %##% msbuild: -p:Platform=%BUILD_PLATFORM%
+ %##% msbuild extras: %MSBUILD_EXTRAS%
+)
+%##########################%
+msbuild ^
+ -nologo ^
+ -verbosity:%MSBUILD_VERBOSITY% ^
+ -t:Restore ^
+ -p:Configuration=%BUILD_CONFIGURATION% ^
+ -p:Platform=%BUILD_PLATFORM% ^
+ %MSBUILD_EXTRAS% ^
+ vstools.sln
+IF %ERRORLEVEL% NEQ 0 (
+ CALL %SCRIPTLIB%\error.cmd %ERRORLEVEL% "ERROR restoring packages!"
+ EXIT /B %ERRORLEVEL%
+)
diff --git a/scripts/vstools/deploy.cmd b/scripts/vstools/deploy.cmd
new file mode 100644
index 00000000..583452fb
--- /dev/null
+++ b/scripts/vstools/deploy.cmd
@@ -0,0 +1,25 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::deploy.cmd
+:: * Copies installation package to deployment directory
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+ECHO.
+%##########################%
+%##% Deploying to %DEPLOY_DIR%...
+%##########################%
+IF "%VERSION_REV%" == "" (
+ ECHO QtVsTools.vsix -^> qt-vsaddin-msvc%VS%-%VERSION%.vsix
+ MD "%DEPLOY_DIR%\%VERSION%.0" > NUL 2>&1
+ COPY /Y QtVsTools.Package\bin\Release\QtVsTools.vsix ^
+ "%DEPLOY_DIR%\%VERSION%.0\qt-vsaddin-msvc%VS%-%VERSION%.vsix"
+) ELSE (
+ ECHO QtVsTools.vsix -^> qt-vsaddin-msvc%VS%-%VERSION%-rev.%VERSION_REV%.vsix
+ MD "%DEPLOY_DIR%\%VERSION%.%VERSION_REV%" > NUL 2>&1
+ COPY /Y QtVsTools.Package\bin\Release\QtVsTools.vsix ^
+ "%DEPLOY_DIR%\%VERSION%.%VERSION_REV%\qt-vsaddin-msvc%VS%-%VERSION%-rev.%VERSION_REV%.vsix"
+)
diff --git a/scripts/vstools/error.cmd b/scripts/vstools/error.cmd
new file mode 100644
index 00000000..17a38786
--- /dev/null
+++ b/scripts/vstools/error.cmd
@@ -0,0 +1,16 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::error.cmd
+:: * Print error message to STDERR
+:: * Preserves %ERRORLEVEL% passed as %1 argument
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+ECHO.
+%##########################%
+%##% %~2 1>&2
+%##########################%
+EXIT /B %1
diff --git a/scripts/vstools/globals.cmd b/scripts/vstools/globals.cmd
new file mode 100644
index 00000000..8e6f7e58
--- /dev/null
+++ b/scripts/vstools/globals.cmd
@@ -0,0 +1,52 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::globals.cmd
+:: * Global definitions
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+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=-latest -prerelease
+SET QUERY_ALL=-prerelease
+SET QUERY=%QUERY_LATEST%
+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 VS_ALL=%VS2022%,%VS2019%
+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 BUILD_CONFIGURATION=Release
+SET DO_INSTALL=%FALSE%
+SET DEPLOY=%FALSE%
+SET AUTOTEST=%FALSE%
+SET TRANSFORM_INCREMENTAL=true
+SET START_VS=%FALSE%
+SET LIST_VERSIONS=%FALSE%
+
+SET FLAG_VS2022=-vs2022
+SET FLAG_VS2019=-vs2019
+
+CALL %SCRIPTLIB%\banner.cmd
diff --git a/scripts/vstools/info.cmd b/scripts/vstools/info.cmd
new file mode 100644
index 00000000..229ee5a7
--- /dev/null
+++ b/scripts/vstools/info.cmd
@@ -0,0 +1,108 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::info.cmd
+:: * Print information, according to %1 param
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+IF "%~1" == "version" CALL :info_version
+IF "%~1" == "vs_version" CALL :info_vs_version
+IF "%~1" == "vars" CALL :info_vars
+IF "%~1" == "args" CALL :info_args
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:info_version
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ECHO.
+%##########################%
+%##% %VS_NAME% ^(%VS_VERSION%^)
+IF NOT "%MSBUILD_VERSION%" == "" (
+ IF "%VSCMD_ARG_HOST_ARCH%" == "%VSCMD_ARG_TGT_ARCH%" (
+ %##% MSBuild v%MSBUILD_VERSION% ^(%VSCMD_ARG_TGT_ARCH%^)
+ ) ELSE (
+ %##% MSBuild v%MSBUILD_VERSION% ^(%VSCMD_ARG_HOST_ARCH% -^> %VSCMD_ARG_TGT_ARCH%^)
+ )
+)
+IF "%VERSION_REV%" == "" (
+ %##% Qt VS Tools version: %VERSION%
+) ELSE (
+ %##% Qt VS Tools version: %VERSION% ^(rev.%VERSION_REV%^)
+)
+IF NOT "%DEPLOY_DIR%" == "" %##% Deploy to: %DEPLOY_DIR%
+%##########################%
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:info_vs_version
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ECHO.
+%##########################%
+%##% %VS_NAME% ^(%VS_VERSION%^)
+%##% %VS_PATH%
+%##########################%
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:info_args
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ECHO.
+%##########################%
+CALL :info_var_string SCRIPT
+CALL :info_var_string ARGS
+CALL :info_var_string ROOT
+CALL :info_var_string SCRIPTLIB
+%##########################%
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:info_vars
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ECHO.
+%##########################%
+CALL :info_var_string VERSION
+CALL :info_var_string VERSION_MAJOR
+CALL :info_var_string VERSION_REV
+CALL :info_var_string VSWHERE
+CALL :info_var_string QUERY
+CALL :info_var_string VS_VERSIONS
+CALL :info_var_string VS_LATEST
+CALL :info_var_string VCVARS_ARCH
+CALL :info_var_string BUILD_CONFIGURATION
+CALL :info_var_string BUILD_PLATFORM
+CALL :info_var_string MSBUILD_TARGETS
+CALL :info_var_string MSBUILD_EXTRAS
+CALL :info_var_string MSBUILD_VERBOSITY
+CALL :info_var_string DEPENDENCIES
+CALL :info_var_string TRANSFORM_INCREMENTAL
+CALL :info_var_string DEPLOY_DIR
+%##########################%
+CALL :info_var_bool INIT
+CALL :info_var_bool CLEAN
+CALL :info_var_bool REBUILD
+CALL :info_var_bool AUTOTEST
+CALL :info_var_bool DEPLOY
+CALL :info_var_bool DO_INSTALL
+CALL :info_var_bool START_VS
+CALL :info_var_bool LIST_VERSIONS
+CALL :info_var_bool BINARYLOG
+CALL :info_var_bool VS_VERSIONS_DEFAULT
+CALL :info_var_bool VERBOSE
+%##########################%
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:info_var_bool
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+CALL CMD /C "IF %%%1%% (%##% [X] %1)"
+CALL CMD /C "IF NOT %%%1%% (%##% [ ] %1)"
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:info_var_string
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+CALL CMD /C "%##% %1 = %%%1%%"
+EXIT /B
diff --git a/scripts/vstools/init.cmd b/scripts/vstools/init.cmd
new file mode 100644
index 00000000..becf9b15
--- /dev/null
+++ b/scripts/vstools/init.cmd
@@ -0,0 +1,41 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::init.cmd
+:: * Build pre-requisites before calling the main build
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+IF "%BUILD_PLATFORM%" == "" (
+ SET BUILD_PLATFORM=%VSCMD_ARG_TGT_ARCH%
+)
+
+ECHO.
+%##########################%
+%##% Building pre-requisites...
+IF %VERBOSE% (
+ %##% msbuild: vstools.sln
+ %##% msbuild: -t:%DEPENDENCIES%
+ %##% msbuild: -p:Configuration=%BUILD_CONFIGURATION%
+ %##% msbuild: -p:Platform=%BUILD_PLATFORM%
+ %##% msbuild: -p:TransformOutOfDateOnly=false
+ %##% msbuild extras: %MSBUILD_EXTRAS%
+)
+%##########################%
+msbuild ^
+ -nologo ^
+ -verbosity:%MSBUILD_VERBOSITY% ^
+ -maxCpuCount ^
+ -t:%DEPENDENCIES% ^
+ -p:Configuration=%BUILD_CONFIGURATION% ^
+ -p:Platform=%BUILD_PLATFORM% ^
+ -p:TransformOutOfDateOnly=false ^
+ %MSBUILD_EXTRAS% ^
+ vstools.sln
+
+IF %ERRORLEVEL% NEQ 0 (
+ CALL %SCRIPTLIB%\error.cmd %ERRORLEVEL% "ERROR building pre-requisites"
+ EXIT /B %ERRORLEVEL%
+)
diff --git a/scripts/vstools/install.cmd b/scripts/vstools/install.cmd
new file mode 100644
index 00000000..7a67a129
--- /dev/null
+++ b/scripts/vstools/install.cmd
@@ -0,0 +1,26 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::install.cmd
+:: * Removes previously installed extension, if any
+:: * Installs newly generated package
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+ECHO.
+%##########################%
+%##% Installing extension package
+%##########################%
+
+ECHO Removing previous installation...
+IF "%VS%" == "2022" (
+ VSIXInstaller /uninstall:QtVsTools.8e827d74-6fc4-40a6-a3aa-faf19652b3b8
+) ELSE IF "%VS%" == "2019" (
+ VSIXInstaller /uninstall:QtVsTools.bf3c71c0-ab41-4427-ada9-9b3813d89ff5
+)
+
+ECHO Installing...
+VSIXInstaller QtVsTools.Package\bin\Release\QtVsTools.vsix
+EXIT /B %ERRORLEVEL%
diff --git a/scripts/vstools/log_version.cmd b/scripts/vstools/log_version.cmd
new file mode 100644
index 00000000..55f68ff8
--- /dev/null
+++ b/scripts/vstools/log_version.cmd
@@ -0,0 +1,19 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::log_version.cmd
+:: * Generates log file with extension version, based on the latest repository tag
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+ECHO.
+%##########################%
+%##% Logging extension version
+%##########################%
+IF "%VERSION_REV%" == "" (
+ ECHO %VERSION%.0 > version.log
+) ELSE (
+ ECHO %VERSION%.%VERSION_REV% > version.log
+)
diff --git a/scripts/vstools/msbuild.cmd b/scripts/vstools/msbuild.cmd
new file mode 100644
index 00000000..b71e40ad
--- /dev/null
+++ b/scripts/vstools/msbuild.cmd
@@ -0,0 +1,45 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::msbuild.cmd
+:: * Solution main build
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+IF "%BUILD_PLATFORM%" == "" (
+ SET BUILD_PLATFORM=%VSCMD_ARG_TGT_ARCH%
+)
+
+ECHO.
+%##########################%
+%##% msbuild: vstools.sln
+%##% msbuild: -t:%MSBUILD_TARGETS%
+%##% msbuild: -p:Configuration=%BUILD_CONFIGURATION%
+%##% msbuild: -p:Platform=%BUILD_PLATFORM%
+IF %VERBOSE% (
+ %##% msbuild: -p:TransformOutOfDateOnly=%TRANSFORM_INCREMENTAL%
+ %##% msbuild: -verbosity:%MSBUILD_VERBOSITY%
+ %##% msbuild extras: %MSBUILD_EXTRAS%
+)
+%##########################%
+msbuild ^
+ -nologo ^
+ -verbosity:%MSBUILD_VERBOSITY% ^
+ -maxCpuCount ^
+ -p:Configuration=%BUILD_CONFIGURATION% ^
+ -p:Platform=%BUILD_PLATFORM% ^
+ -p:TransformOutOfDateOnly=%TRANSFORM_INCREMENTAL% ^
+ -t:%MSBUILD_TARGETS% ^
+ %MSBUILD_EXTRAS% ^
+ vstools.sln
+
+IF %ERRORLEVEL% NEQ 0 (
+ CALL %SCRIPTLIB%\error.cmd %ERRORLEVEL% "ERROR building solution"
+ EXIT /B %ERRORLEVEL%
+)
+
+CALL %SCRIPTLIB%\info.cmd "version"
+%##% Solution build successful.
+%##########################%
diff --git a/scripts/vstools/startvs.cmd b/scripts/vstools/startvs.cmd
new file mode 100644
index 00000000..2ed8e683
--- /dev/null
+++ b/scripts/vstools/startvs.cmd
@@ -0,0 +1,14 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::startvs.cmd
+:: * Opens the vstools solution in the selected instance of VS
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+%##########################%
+%##% Starting Visual Studio...
+%##########################%
+devenv vstools.sln
diff --git a/scripts/vstools/tests.cmd b/scripts/vstools/tests.cmd
new file mode 100644
index 00000000..731c8f3c
--- /dev/null
+++ b/scripts/vstools/tests.cmd
@@ -0,0 +1,59 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::tests.cmd
+:: * Looks for auto-tests generated during build
+:: * Runs the auto-tests that were found
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+ECHO.
+%##########################%
+%##% Finding tests...
+
+DEL %TEMP%\vstools.args > NUL 2>&1
+
+IF %VERBOSE% %##% DIR /S /B /A:D Tests\Test_*
+FOR /F %ALL% %%c IN (`DIR /S /B /A:D Tests\Test_*`) DO (
+IF %VERBOSE% %##% testProject: %%c
+ IF %VERBOSE% %##% WHERE /R %%c\bin\%BUILD_CONFIGURATION% Test_*.dll
+ IF %VERBOSE% WHERE /R %%c\bin\%BUILD_CONFIGURATION% Test_*.dll
+ WHERE /R %%c\bin\%BUILD_CONFIGURATION% Test_*.dll >> %TEMP%\vstools.args 2> NUL
+)
+
+IF %VERBOSE% %##% FINDSTR /C:dll %TEMP%\vstools.args
+IF %VERBOSE% FINDSTR /C:dll %TEMP%\vstools.args
+FINDSTR /C:dll %TEMP%\vstools.args > NUL 2>&1 ^
+&& (
+ FOR /F %%c in ('TYPE %TEMP%\vstools.args') DO %##% * %%~nc
+ %##########################%
+ ECHO.
+ IF %VERBOSE% (
+ %##% vstest.console /logger:console;verbosity=detailed @%TEMP%\vstools.args
+ vstest.console /logger:console;verbosity=detailed @%TEMP%\vstools.args ^
+ || (
+ GOTO :return
+ )
+ ) ELSE (
+ vstest.console @%TEMP%\vstools.args ^
+ || (
+ GOTO :return
+ )
+ )
+) || (
+ %##% * No tests found.
+ %##########################%
+ GOTO :eof
+)
+
+CALL %SCRIPTLIB%\info.cmd "version"
+%##% Tests completed successfully
+%##########################%
+
+:return
+IF %ERRORLEVEL% NEQ 0 (
+ CALL %SCRIPTLIB%\error.cmd %ERRORLEVEL% "Tests failed!"
+ EXIT /B %ERRORLEVEL%
+)
diff --git a/scripts/vstools/usage.cmd b/scripts/vstools/usage.cmd
new file mode 100644
index 00000000..c188b88b
--- /dev/null
+++ b/scripts/vstools/usage.cmd
@@ -0,0 +1,66 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::usage.cmd
+:: * Print tool usage instructions
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ECHO.
+%##########################%
+%##%
+%##% Usage:
+%##%
+%##% %SCRIPT% [VS Versions] [Operation] [Options] [ -- ^<MSBuild Options^> ]
+%##%
+%##########################%
+%##%
+%##% == 'VS Versions' can be one or more of the following:
+%##% -vs2022 ................ Select the latest version of Visual Studio 2022
+%##% -vs2019 ................ Select the latest version of Visual Studio 2019
+%##% -version ^<X^>.^<Y^> ....... Select version X.Y of Visual Studio
+%##% Can be specified several times
+%##%
+%##% If no version is specified, the most recent version of VS is selected.
+%##%
+%##% == 'Operation' can be one of the following:
+%##% -build .... Incremental build of solution
+%##% -rebuild .. Clean build of solution
+%##% -init ..... Initialize vstools solution for the specified version of VS
+%##% If multiple versions are specified, the last one is selected
+%##% -startvs .. Open vstools solution in selected VS version
+%##% -list ..... Print list of Visual Studio installations
+%##% -help ..... Print tool usage instructions
+%##%
+%##% If no operation is specified, -build is assumed by default.
+%##%
+%##% == 'Options' can be one or more of the following
+%##% -vcvars ^<ARCH^> ......... Select ARCH as the argument to the vcvars script
+%##% Can be one of: x86, amd64, x86_amd64, x86_arm,
+%##% x86_arm64, amd64_x86, amd64_arm, amd64_arm64
+%##% -config ^<NAME^> ......... Select NAME as the build configuration
+%##% Defaults to the 'Release' configuration
+%##% Only valid with -build or -rebuild
+%##% -platform ^<NAME^> ....... Select NAME as the build platform
+%##% Only valid with -build or -rebuild
+%##% -test .................. Run auto-tests after successful build
+%##% Only valid with -build or -rebuild
+%##% -deploy ^<DEPLOY_DIR^> ... Deploy installation package to DEPLOY_DIR
+%##% Only valid with -build or -rebuild
+%##% -install ............... Install extension to selected VS version(s)
+%##% Pops up VSIX installer dialog for confirmation
+%##% -startvs ............... Open vstools solution in selected VS version
+%##% If multiple versions are specified, the last one
+%##% is selected
+%##% -all ................... Include all VS installations
+%##% By default, the latest installation is selected
+%##% -verbose ............... Print more detailed log information
+%##% -bl .................... Generate MSBuild binary log
+%##% Only valid with -build or -rebuild
+%##%
+%##% == All arguments after '--' are passed verbatim to MSBuild
+%##% Example:
+%##% vstools -version 17.4 -rebuild -- -p:WarningLevel=3
+%##%
+%##########################%
diff --git a/scripts/vstools/validate.cmd b/scripts/vstools/validate.cmd
new file mode 100644
index 00000000..bc74b336
--- /dev/null
+++ b/scripts/vstools/validate.cmd
@@ -0,0 +1,92 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::validate.cmd
+:: * Calculates additional definitions based on arguments passed to the script
+:: * Checks if all requirements are present to build the solution
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+IF %VERBOSE% CALL %SCRIPTLIB%\info.cmd "args"
+
+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
+)
+
+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% %##% 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
+)
+
+WHERE /Q git.exe || (
+ ECHO Error: could not find git.
+ EXIT /B 1
+)
+IF %VERBOSE% %##% git describe --tags
+FOR /F "tokens=1,2,3,4 delims=v.- usebackq" %%q IN (`git describe --tags`) DO (
+ SET VERSION_MAJOR=%%~q
+ SET VERSION=%%~q.%%~r.%%~s
+ SET VERSION_REV=%%~t
+)
+
+IF %VERBOSE% CALL %SCRIPTLIB%\info.cmd "vars"
diff --git a/scripts/vstools/vs_versions.cmd b/scripts/vstools/vs_versions.cmd
new file mode 100644
index 00000000..215167ae
--- /dev/null
+++ b/scripts/vstools/vs_versions.cmd
@@ -0,0 +1,145 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+::vs_versions.cmd
+:: * Loops through all selected VS versions
+:: * Invokes requested operations for each version
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+IF %VERBOSE% %##% VS versions: %VS_VERSIONS%
+
+SETLOCAL
+SET ERRORCODE=0
+SET BREAKLOOP=%FALSE%
+SET EMPTY_LOOP=%TRUE%
+FOR %%v IN (%VS_VERSIONS%) DO (
+ CALL :loop_vs_versions %%v
+)
+IF %EMPTY_LOOP% (
+ %##########################%
+ %##% No matching Visual Studio instances were found
+ %##########################%
+ EXIT /B 1
+)
+
+EXIT /B %ERRORCODE%
+ENDLOCAL
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:loop_vs_versions
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+SET VERSION_QUERY=%~1
+IF %VERBOSE% %##% Querying VS version: %VERSION_QUERY%
+
+IF %VERBOSE% %##% %VSWHERE% %QUERY% %VERSION_QUERY% -property installationPath
+FOR /F %ALL% %%p IN (`"%VSWHERE% %QUERY% %VERSION_QUERY% -property installationPath"`) DO (
+IF %VERBOSE% %##% installationPath: %%p
+
+IF %VERBOSE% %##% %VSWHERE% -path "%%p" -property catalog_productLineVersion
+FOR /F %ALL% %%e IN (`"%VSWHERE% -path "%%p" -property catalog_productLineVersion"`) DO (
+IF %VERBOSE% %##% catalog_productLineVersion: %%e
+
+IF %VERBOSE% %##% %VSWHERE% -path "%%p" -property displayName
+FOR /F %ALL% %%u IN (`"%VSWHERE% -path "%%p" -property displayName"`) DO (
+IF %VERBOSE% %##% displayName: %%u
+
+IF %VERBOSE% %##% %VSWHERE% -path "%%p" -property isPrerelease
+FOR /F %ALL% %%b IN (`"%VSWHERE% -path "%%p" -property isPrerelease"`) DO (
+IF %VERBOSE% %##% isPrerelease: %%b
+
+FOR /F %ALL% %%n IN (`"(ECHO %%b | FINDSTR /C:1 > NUL) && (ECHO %%u PREVIEW) || ECHO %%u"`) DO (
+IF %VERBOSE% %##% friendlyName: %%n
+
+IF %VERBOSE% %##% %VSWHERE% -path "%%p" -property installationVersion
+FOR /F %ALL% %%i IN (`"%VSWHERE% -path "%%p" -property installationVersion"`) DO (
+IF %VERBOSE% %##% installationVersion: %%i
+
+CALL :vs_version "%%~e" "%%~p" "%%~n" "%%~b" "%%~i"
+
+))))))
+EXIT /B
+
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:vs_version
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+IF %ERRORCODE% NEQ 0 EXIT /B
+IF %BREAKLOOP% EXIT /B
+SET EMPTY_LOOP=%FALSE%
+SETLOCAL
+SET VS=%~1
+SET VS_PATH=%~2
+SET VS_NAME=%~3
+SET VS_PREVIEW=%~4
+SET VS_VERSION=%~5
+IF %VERBOSE% %##% VS instance: %VS_VERSION%
+
+IF %LIST_VERSIONS% (
+ CALL %SCRIPTLIB%\info.cmd "vs_version"
+ ENDLOCAL
+ EXIT /B
+)
+
+IF "%VCVARS_ARCH%" == "" (
+ IF "%VS%" == "2022" (
+ SET VCVARS_ARCH=x64
+ ) ELSE (
+ SET VCVARS_ARCH=x86
+ )
+)
+
+IF %VERBOSE% %##% CALL "%VS_PATH%\VC\Auxiliary\Build\vcvarsall.bat %VCVARS_ARCH%"
+CALL "%VS_PATH%\VC\Auxiliary\Build\vcvars64.bat" %VCVARS_ARCH% > NUL
+
+WHERE /Q msbuild && (
+ FOR /F %ALL% %%m IN (`msbuild -version -nologo`) DO SET MSBUILD_VERSION=%%m
+) || (
+ ECHO ERRORCODE: msbuild not found
+ ENDLOCAL
+ SET ERRORCODE=3
+ EXIT /B
+)
+
+CALL %SCRIPTLIB%\info.cmd "version"
+IF %VERBOSE% SET
+
+IF NOT %INIT% IF NOT %REBUILD% IF %START_VS% (
+ CALL %SCRIPTLIB%\startvs.cmd
+ ENDLOCAL
+ SET BREAKLOOP=%TRUE%
+ EXIT /B
+)
+
+IF %CLEAN% CALL %SCRIPTLIB%\clean.cmd
+IF %ERRORLEVEL% NEQ 0 GOTO :return
+
+IF NOT EXIST version.log CALL %SCRIPTLIB%\log_version.cmd
+
+IF %INIT% CALL %SCRIPTLIB%\init.cmd
+IF %ERRORLEVEL% NEQ 0 GOTO :return
+
+CALL %SCRIPTLIB%\msbuild.cmd
+IF %ERRORLEVEL% NEQ 0 GOTO :return
+
+IF %AUTOTEST% CALL %SCRIPTLIB%\tests.cmd
+IF %ERRORLEVEL% NEQ 0 GOTO :return
+
+IF %DEPLOY% CALL %SCRIPTLIB%\deploy.cmd
+IF %ERRORLEVEL% NEQ 0 GOTO :return
+
+IF %DO_INSTALL% CALL %SCRIPTLIB%\install.cmd
+IF %ERRORLEVEL% NEQ 0 GOTO :return
+
+IF %START_VS% (
+ CALL %SCRIPTLIB%\startvs.cmd
+ ENDLOCAL
+ SET BREAKLOOP=%TRUE%
+ EXIT /B
+)
+
+:return
+ENDLOCAL
+SET ERRORCODE=%ERRORLEVEL%
+EXIT /B
diff --git a/vstools.bat b/vstools.bat
index 24f0cdf0..ce8d68c6 100644
--- a/vstools.bat
+++ b/vstools.bat
@@ -1,491 +1,20 @@
+::**************************************************************************************************
+::Copyright (C) 2023 The Qt Company Ltd.
+::SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+::**************************************************************************************************
@ECHO OFF
SETLOCAL
SET SCRIPT=%~n0
-SET ROOT=%CD%
+SET SCRIPTLIB=%CD%\scripts\%SCRIPT%
-SET TRUE="0"=="0"
-SET FALSE="0"=="1"
-SET ALL="tokens=* usebackq"
+CALL %SCRIPTLIB%\globals.cmd
-SET VSWHERE_EXE="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
-SET VSWHERE=%VSWHERE_EXE%
-SET VSWHERE=%VSWHERE:(=^(%
-SET VSWHERE=%VSWHERE:)=^)%
-SET QUERY_LATEST=-latest -prerelease
-SET QUERY_ALL=-prerelease
-SET QUERY=%QUERY_LATEST%
-SET VSWHERE_MAJOR=2
-SET VSWHERE_MINOR=7
-SET VSWHERE_PATCH=1
-SET VSWHERE_VERSION=%VSWHERE_MAJOR%.%VSWHERE_MINOR%.%VSWHERE_PATCH%
+CALL %SCRIPTLIB%\args.cmd %*
+IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
-SET DEPENDENCIES=QtVsTools_RegExpr;QtMsBuild:TransformAll
+CALL %SCRIPTLIB%\validate.cmd
+IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
-SET VS2022="-version [17.0^,18.0^)"
-SET VS2019="-version [16.0^,17.0^)"
-SET VS_ALL=%VS2022%,%VS2019%
-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 DEPLOY=%FALSE%
-SET TRANSFORM_INCREMENTAL=true
-SET START_VS=%FALSE%
-SET LIST_VERSIONS=%FALSE%
-
-SET PLATFORM_VS2019="Any CPU"
-SET PLATFORM_VS2022="x64"
-
-SET FLAG_VS2022=-vs2022
-SET FLAG_VS2019=-vs2019
-
-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 DEPLOY=%TRUE%
- SET DEPLOY_DIR=%~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"=="-list" (
- SET LIST_VERSIONS=%TRUE%
- ) ELSE IF "%1"=="-all" (
- SET QUERY=%QUERY_ALL%
- ) 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
-)
-
-WHERE /Q git.exe || (
- ECHO Error: could not find git.
- 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% %%u IN (`"%VSWHERE% -path "%%p" -property displayName"`) DO (
- IF %VERBOSE% ECHO ## displayName: %%u
-
- IF %VERBOSE% ECHO ## %VSWHERE% -path "%%p" -property isPrerelease
- FOR /F %ALL% %%b IN (`"%VSWHERE% -path "%%p" -property isPrerelease"`) DO (
- IF %VERBOSE% ECHO ## isPrerelease: %%b
-
- FOR /F %ALL% %%n IN (`"(ECHO %%b | FINDSTR /C:1 > NUL) && (ECHO %%u PREVIEW) || ECHO %%u"`) DO (
- IF %VERBOSE% ECHO ## friendlyName: %%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 %VERBOSE% ECHO ## git describe --tags
- FOR /F "tokens=1,2,3,4 delims=v.- usebackq" %%q IN (`git describe --tags`) DO (
- IF %VERBOSE% ECHO ## ^( %%q, %%r, %%s, %%t ^)
-
- IF %LIST_VERSIONS% (
- IF %VERBOSE% ECHO ## listVersion
- ECHO %%n ^(%%i^)
- ECHO ^[%%p^]
- ) ELSE (
-
- 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 "%%t"=="" (
- ECHO ## Qt VSTools version: %%q.%%r.%%s
- ) ELSE (
- ECHO ## Qt VSTools version: %%q.%%r.%%s ^(rev.%%t^)
- )
- IF NOT "%DEPLOY_DIR%"=="" ECHO ## Deploy to: %DEPLOY_DIR%
- 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 ## Logging extension version
- ECHO ###############################################################################
- IF "%%t"=="" (
- ECHO %%q.%%r.%%s.0 > version.log
- ) ELSE (
- ECHO %%q.%%r.%%s.%%t > version.log
- )
- 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 NOT EXIST version.log (
- ECHO ###############################################################################
- ECHO ## Logging extension version
- ECHO ###############################################################################
- IF "%%t"=="" (
- ECHO %%q.%%r.%%s.0 > version.log
- ) ELSE (
- ECHO %%q.%%r.%%s.%%t > version.log
- )
- )
-
- 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^)
- IF "%%t"=="" (
- ECHO ## Qt VSTools version: %%q.%%r.%%s
- ) ELSE (
- ECHO ## Qt VSTools version: %%q.%%r.%%s ^(rev.%%t^)
- )
- ECHO ## Solution build successful.
- ECHO ################################################################################
- ECHO.
- ) || (
- ECHO ################################################################################
- ECHO ## %%n ^(%%i^)
- ECHO ## ERROR building solution 1>&2
- ECHO ################################################################################
- EXIT /B %ERRORLEVEL%
- )
-
- IF %DEPLOY% (
- ECHO ################################################################################
- ECHO ## Deploying to %DEPLOY_DIR%...
- ECHO ################################################################################
- IF "%%t"=="" (
- ECHO QtVsTools.vsix -^> qt-vsaddin-msvc%%e-%%q.%%r.%%s.vsix
- MD "%DEPLOY_DIR%\%%q.%%r.%%s.0" > NUL 2>&1
- COPY /Y QtVsTools.Package\bin\Release\QtVsTools.vsix ^
- "%DEPLOY_DIR%\%%q.%%r.%%s.0\qt-vsaddin-msvc%%e-%%q.%%r.%%s.vsix"
- ) ELSE (
- ECHO QtVsTools.vsix -^> qt-vsaddin-msvc%%e-%%q.%%r.%%s-rev.%%t.vsix
- MD "%DEPLOY_DIR%\%%q.%%r.%%s.%%t" > NUL 2>&1
- COPY /Y QtVsTools.Package\bin\Release\QtVsTools.vsix ^
- "%DEPLOY_DIR%\%%q.%%r.%%s.%%t\qt-vsaddin-msvc%%e-%%q.%%r.%%s-rev.%%t.vsix"
- )
- ECHO.
- )
-
- IF %DO_INSTALL% (
- ECHO ################################################################################
- ECHO ## Installing extension 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
- )
- 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 -version ^<X^>.^<Y^> ....... 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 -list .......... Print list of Visual Studio installations
-ECHO -help .......... Print tool usage instructions
-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 ^<CONFIG_NAME^> ....... Select CONFIG_NAME as the build configuration
-ECHO Defaults to the 'Release' configuration
-ECHO Only valid with -build or -rebuild
-ECHO -deploy ^<DEPLOY_DIR^> ........ 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 If multiple versions are specified, the last one is selected
-ECHO -all ........................ Include all VS installations
-ECHO By default, the latest installation is selected
-ECHO -verbose .................... Print more detailed log information
-ECHO -bl ......................... Generate MSBuild binary log
-ECHO Only valid with -build or -rebuild
-ECHO.
-
-EXIT /B 1
+CALL %SCRIPTLIB%\vs_versions.cmd
+EXIT /B %ERRORLEVEL%
diff --git a/vstools.sln b/vstools.sln
index 53aba545..d63effa2 100644
--- a/vstools.sln
+++ b/vstools.sln
@@ -76,7 +76,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Deployment", "Deployment",
Changelog = Changelog
version.log = version.log
version.targets = version.targets
- vstools.bat = vstools.bat
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Testing", "Testing", "{F96D578B-D78E-47F4-86DA-FE472B9942F0}"
@@ -112,6 +111,31 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vsconfig", "vsconfig", "{3C
vsconfig\2022.vsconfig = vsconfig\2022.vsconfig
EndProjectSection
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scripts", "Scripts", "{4C13509A-C229-41AD-BCF0-86A8370F4B2F}"
+ ProjectSection(SolutionItems) = preProject
+ vstools.bat = vstools.bat
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vstools", "vstools", "{E11ADC3E-FFB9-46B8-B5DE-18919026A0B7}"
+ ProjectSection(SolutionItems) = preProject
+ scripts\vstools\args.cmd = scripts\vstools\args.cmd
+ scripts\vstools\banner.cmd = scripts\vstools\banner.cmd
+ scripts\vstools\clean.cmd = scripts\vstools\clean.cmd
+ scripts\vstools\deploy.cmd = scripts\vstools\deploy.cmd
+ scripts\vstools\error.cmd = scripts\vstools\error.cmd
+ scripts\vstools\globals.cmd = scripts\vstools\globals.cmd
+ scripts\vstools\info.cmd = scripts\vstools\info.cmd
+ scripts\vstools\init.cmd = scripts\vstools\init.cmd
+ scripts\vstools\install.cmd = scripts\vstools\install.cmd
+ scripts\vstools\log_version.cmd = scripts\vstools\log_version.cmd
+ scripts\vstools\msbuild.cmd = scripts\vstools\msbuild.cmd
+ scripts\vstools\startvs.cmd = scripts\vstools\startvs.cmd
+ scripts\vstools\tests.cmd = scripts\vstools\tests.cmd
+ scripts\vstools\usage.cmd = scripts\vstools\usage.cmd
+ scripts\vstools\validate.cmd = scripts\vstools\validate.cmd
+ scripts\vstools\vs_versions.cmd = scripts\vstools\vs_versions.cmd
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -540,6 +564,7 @@ Global
{202F4A6D-77CD-4992-AA53-01B585463287} = {A7918293-56E9-465A-AE1C-0724576ADD66}
{4B8FC08C-4901-45D4-BC00-C0C461292FF2} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
{AFD33401-2F15-4E72-AB35-42C3EE12E897} = {D6FB29A4-8921-46F5-B170-B15538AB4D69}
+ {E11ADC3E-FFB9-46B8-B5DE-18919026A0B7} = {4C13509A-C229-41AD-BCF0-86A8370F4B2F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {17FF4AFE-273C-47CD-8D84-F0D023B10BE5}