diff options
author | Miguel Costa <miguel.costa@qt.io> | 2023-12-04 17:51:47 +0100 |
---|---|---|
committer | Miguel Costa <miguel.costa@qt.io> | 2023-12-11 12:23:12 +0000 |
commit | 5ca018720a48e70e72aeff09b4b1fcb8896f4d13 (patch) | |
tree | 68b14ec74cc21509b1d8c28ee6183582854d0286 | |
parent | ecfb00c458f2721e8f271458ba1a63559b003b1c (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.cmd | 114 | ||||
-rw-r--r-- | scripts/vstools/banner.cmd | 53 | ||||
-rw-r--r-- | scripts/vstools/clean.cmd | 54 | ||||
-rw-r--r-- | scripts/vstools/deploy.cmd | 25 | ||||
-rw-r--r-- | scripts/vstools/error.cmd | 16 | ||||
-rw-r--r-- | scripts/vstools/globals.cmd | 52 | ||||
-rw-r--r-- | scripts/vstools/info.cmd | 108 | ||||
-rw-r--r-- | scripts/vstools/init.cmd | 41 | ||||
-rw-r--r-- | scripts/vstools/install.cmd | 26 | ||||
-rw-r--r-- | scripts/vstools/log_version.cmd | 19 | ||||
-rw-r--r-- | scripts/vstools/msbuild.cmd | 45 | ||||
-rw-r--r-- | scripts/vstools/startvs.cmd | 14 | ||||
-rw-r--r-- | scripts/vstools/tests.cmd | 59 | ||||
-rw-r--r-- | scripts/vstools/usage.cmd | 66 | ||||
-rw-r--r-- | scripts/vstools/validate.cmd | 92 | ||||
-rw-r--r-- | scripts/vstools/vs_versions.cmd | 145 | ||||
-rw-r--r-- | vstools.bat | 495 | ||||
-rw-r--r-- | vstools.sln | 27 |
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} |