summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml56
-rwxr-xr-x.gitlab/ci/borland.ps137
-rw-r--r--.gitlab/ci/configure_windows_borland5.5.cmake1
-rw-r--r--.gitlab/ci/configure_windows_borland5.8.cmake1
-rw-r--r--.gitlab/ci/configure_windows_borland_common.cmake2
-rw-r--r--.gitlab/ci/configure_windows_openwatcom1.9.cmake1
-rw-r--r--.gitlab/ci/configure_windows_openwatcom_common.cmake2
-rwxr-xr-x.gitlab/ci/openwatcom.ps125
-rw-r--r--.gitlab/os-windows.yml61
-rw-r--r--Auxiliary/vim/syntax/cmake.vim1
-rw-r--r--CMakeLists.txt2
-rw-r--r--Help/cpack_gen/ifw.rst44
-rw-r--r--Help/cpack_gen/wix.rst8
-rw-r--r--Help/manual/cmake-properties.7.rst1
-rw-r--r--Help/manual/cmake-variables.7.rst1
-rw-r--r--Help/manual/ctest.1.rst7
-rw-r--r--Help/prop_tgt/IMPORTED_NO_SYSTEM.rst17
-rw-r--r--Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst3
-rw-r--r--Help/release/dev/0-sample-topic.rst7
-rw-r--r--Help/release/dev/cpack-wix-skip-ui-ext.rst5
-rw-r--r--Help/release/dev/cpackifw-package-disable-command-line-interface.rst8
-rw-r--r--Help/release/dev/cpackifw-package-product-images.rst8
-rw-r--r--Help/release/dev/cpackifw-package-run-program.rst10
-rw-r--r--Help/release/dev/ctest_submit-inactivity-timeout.rst5
-rw-r--r--Help/release/dev/imported-no-system.rst7
-rw-r--r--Help/release/index.rst2
-rw-r--r--Help/variable/CTEST_SUBMIT_INACTIVITY_TIMEOUT.rst5
-rw-r--r--Modules/DartConfiguration.tcl.in1
-rw-r--r--Source/CMakeVersion.cmake4
-rw-r--r--Source/CPack/IFW/cmCPackIFWGenerator.cxx363
-rw-r--r--Source/CPack/IFW/cmCPackIFWGenerator.h6
-rw-r--r--Source/CPack/IFW/cmCPackIFWInstaller.cxx237
-rw-r--r--Source/CPack/IFW/cmCPackIFWInstaller.h17
-rw-r--r--Source/CPack/WiX/cmCPackWIXGenerator.cxx4
-rw-r--r--Source/CPack/cmCPackGenerator.cxx2
-rw-r--r--Source/CTest/cmCTestSubmitCommand.cxx3
-rw-r--r--Source/CTest/cmCTestSubmitHandler.cxx33
-rw-r--r--Source/CTest/cmCTestSubmitHandler.h1
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx2
-rw-r--r--Source/cmCMakePresetsFile.h18
-rw-r--r--Source/cmExportFileGenerator.cxx10
-rw-r--r--Source/cmFileTime.h2
-rw-r--r--Source/cmGeneratorTarget.cxx3
-rw-r--r--Source/cmMakefile.cxx5
-rw-r--r--Source/cmSearchPath.h3
-rw-r--r--Source/cm_codecvt.cxx6
-rw-r--r--Source/cm_codecvt.hxx6
-rw-r--r--Source/kwsys/CTestConfig.cmake4
-rw-r--r--Source/kwsys/MD5.c3
-rw-r--r--Source/kwsys/SystemTools.cxx26
-rw-r--r--Source/kwsys/SystemTools.hxx.in7
-rw-r--r--Source/kwsys/testSystemTools.cxx10
-rw-r--r--Tests/CMakeLib/testUVRAII.cxx13
-rw-r--r--Tests/CMakeLists.txt2
-rw-r--r--Tests/ExportImport/Export/CMakeLists.txt15
-rw-r--r--Tests/ExportImport/Export/include/testInterfaceIncludeUser/testInterfaceInclude.h1
-rw-r--r--Tests/ExportImport/Import/A/CMakeLists.txt8
-rw-r--r--Tests/ExportImport/Import/A/imp_testInterfaceInclude1.c6
-rw-r--r--Tests/ExportImport/Import/A/testInterfaceIncludeSystem/testInterfaceInclude.h1
-rw-r--r--Tests/IncludeDirectories/CMakeLists.txt7
-rw-r--r--Tests/RunCMake/BuildDepends/MakeDependencies.step1.cmake7
-rw-r--r--Tests/RunCMake/FindBoost/CMP0093-OLD-stderr.txt10
-rw-r--r--Tests/RunCMake/MSVCRuntimeLibrary/CMP0091-OLD-stderr.txt10
-rw-r--r--Tests/RunCMake/MSVCWarningFlags/CMP0092-OLD-stderr.txt10
-rw-r--r--Utilities/Doxygen/CMakeLists.txt2
-rw-r--r--Utilities/Sphinx/CMakeLists.txt2
66 files changed, 910 insertions, 287 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 708d80a..ed57278 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -52,7 +52,7 @@ prep:doc-package:
- .cmake_doc_artifacts
- .run_only_for_package
-.upload:source-package:
+upload:source-package:
extends:
- .rsync_upload_binary
- .run_only_for_package
@@ -70,7 +70,7 @@ build:help:master:
- .cmake_org_help
- .run_only_for_continuous_master
-.upload:help:master:
+upload:help:master:
extends:
- .rsync_upload_help
- .run_only_for_continuous_master
@@ -86,7 +86,7 @@ build:help:stage:
- .cmake_org_help
- .run_only_for_continuous_stage
-.upload:help:stage:
+upload:help:stage:
extends:
- .rsync_upload_help
- .run_only_for_continuous_stage
@@ -522,7 +522,7 @@ build:linux-x86_64-package:
needs:
- prep:doc-package
-.upload:linux-x86_64-package:
+upload:linux-x86_64-package:
extends:
- .rsync_upload_binary
- .run_only_for_package
@@ -546,7 +546,7 @@ build:linux-aarch64-package:
needs:
- prep:doc-package
-.upload:linux-aarch64-package:
+upload:linux-aarch64-package:
extends:
- .rsync_upload_binary
- .run_only_for_package
@@ -687,7 +687,7 @@ build:macos-package:
needs:
- prep:doc-package
-.upload:macos-package:
+upload:macos-package:
extends:
- .rsync_upload_binary
- .run_only_for_package
@@ -710,7 +710,7 @@ build:macos10.10-package:
needs:
- prep:doc-package
-.upload:macos10.10-package:
+upload:macos10.10-package:
extends:
- .rsync_upload_binary
- .run_only_for_package
@@ -754,3 +754,45 @@ test:windows-vs2019-x64:
- test:windows-vs2019-x64-ninja
needs:
- test:windows-vs2019-x64-ninja
+
+test:windows-borland5.5:
+ extends:
+ - .windows_borland5.5
+ - .cmake_test_windows_borland
+ - .windows_builder_ext_tags
+ - .cmake_junit_artifacts
+ - .run_dependent
+ dependencies:
+ - test:windows-vs2019-x64-ninja
+ needs:
+ - test:windows-vs2019-x64-ninja
+ variables:
+ CMAKE_CI_JOB_NIGHTLY: "true"
+
+test:windows-borland5.8:
+ extends:
+ - .windows_borland5.8
+ - .cmake_test_windows_borland
+ - .windows_builder_ext_tags
+ - .cmake_junit_artifacts
+ - .run_dependent
+ dependencies:
+ - test:windows-vs2019-x64-ninja
+ needs:
+ - test:windows-vs2019-x64-ninja
+ variables:
+ CMAKE_CI_JOB_NIGHTLY: "true"
+
+test:windows-openwatcom1.9:
+ extends:
+ - .windows_openwatcom1.9
+ - .cmake_test_windows_openwatcom
+ - .windows_builder_ext_tags
+ - .cmake_junit_artifacts
+ - .run_dependent
+ dependencies:
+ - test:windows-vs2019-x64-ninja
+ needs:
+ - test:windows-vs2019-x64-ninja
+ variables:
+ CMAKE_CI_JOB_NIGHTLY: "true"
diff --git a/.gitlab/ci/borland.ps1 b/.gitlab/ci/borland.ps1
new file mode 100755
index 0000000..146a047
--- /dev/null
+++ b/.gitlab/ci/borland.ps1
@@ -0,0 +1,37 @@
+$erroractionpreference = "stop"
+
+if ("$env:CMAKE_CONFIGURATION".Contains("borland5.5")) {
+ # Borland C++ 5.5 Free Command-line Tools
+ # https://web.archive.org/web/20110402064356/https://www.embarcadero.com/products/cbuilder/free-compiler
+ $filename = "bcc5.5-1"
+ $sha256sum = "895B76F8F1AD8030F31ACE239EBC623DC7379C121A540F55F611B93F3CB9AF52"
+} elseif ("$env:CMAKE_CONFIGURATION".Contains("borland5.8")) {
+ # Borland C++ Builder 2006
+ # https://web.archive.org/web/20060303030019/https://www.borland.com/us/products/cbuilder/index.html
+ $filename = "bcc5.8-1"
+ $sha256sum = "C30981BFD540C933E76D82D873DEE05E7482F34F68E309065DE0D181C95F77E3"
+} else {
+ throw ('unknown CMAKE_CONFIGURATION: ' + "$env:CMAKE_CONFIGURATION")
+}
+$tarball = "$filename.zip"
+
+$outdir = $pwd.Path
+$outdir = "$outdir\.gitlab"
+$ProgressPreference = 'SilentlyContinue'
+# This URL is only visible inside of Kitware's network. See above filename table.
+Invoke-WebRequest -Uri "https://cmake.org/files/dependencies/internal/$tarball" -OutFile "$outdir\$tarball"
+$hash = Get-FileHash "$outdir\$tarball" -Algorithm SHA256
+if ($hash.Hash -ne $sha256sum) {
+ exit 1
+}
+
+Add-Type -AssemblyName System.IO.Compression.FileSystem
+[System.IO.Compression.ZipFile]::ExtractToDirectory("$outdir\$tarball", "$outdir")
+Move-Item -Path "$outdir\$filename" -Destination "$outdir\bcc"
+
+$tools = "bcc32", "ilink32"
+foreach ($tool in $tools) {
+ $cfg = Get-Content -path "$outdir\bcc\bin\$tool.cfg.in" -Raw
+ $cfg = $cfg -replace "@BCC_ROOT@","$outdir\bcc"
+ $cfg | Set-Content -path "$outdir\bcc\bin\$tool.cfg"
+}
diff --git a/.gitlab/ci/configure_windows_borland5.5.cmake b/.gitlab/ci/configure_windows_borland5.5.cmake
new file mode 100644
index 0000000..82c4178
--- /dev/null
+++ b/.gitlab/ci/configure_windows_borland5.5.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_borland_common.cmake")
diff --git a/.gitlab/ci/configure_windows_borland5.8.cmake b/.gitlab/ci/configure_windows_borland5.8.cmake
new file mode 100644
index 0000000..82c4178
--- /dev/null
+++ b/.gitlab/ci/configure_windows_borland5.8.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_borland_common.cmake")
diff --git a/.gitlab/ci/configure_windows_borland_common.cmake b/.gitlab/ci/configure_windows_borland_common.cmake
new file mode 100644
index 0000000..6d66a05
--- /dev/null
+++ b/.gitlab/ci/configure_windows_borland_common.cmake
@@ -0,0 +1,2 @@
+set(configure_no_sccache 1)
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_windows_openwatcom1.9.cmake b/.gitlab/ci/configure_windows_openwatcom1.9.cmake
new file mode 100644
index 0000000..f29c3f4
--- /dev/null
+++ b/.gitlab/ci/configure_windows_openwatcom1.9.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_openwatcom_common.cmake")
diff --git a/.gitlab/ci/configure_windows_openwatcom_common.cmake b/.gitlab/ci/configure_windows_openwatcom_common.cmake
new file mode 100644
index 0000000..6d66a05
--- /dev/null
+++ b/.gitlab/ci/configure_windows_openwatcom_common.cmake
@@ -0,0 +1,2 @@
+set(configure_no_sccache 1)
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/openwatcom.ps1 b/.gitlab/ci/openwatcom.ps1
new file mode 100755
index 0000000..4f1012c
--- /dev/null
+++ b/.gitlab/ci/openwatcom.ps1
@@ -0,0 +1,25 @@
+$erroractionpreference = "stop"
+
+if ("$env:CMAKE_CONFIGURATION".Contains("openwatcom1.9")) {
+ # Open Watcom 1.9
+ # https://web.archive.org/web/20210312132437/http://www.openwatcom.org/download.php
+ $filename = "open-watcom-1.9-1"
+ $sha256sum = "FFE6F5BBA200912697C6EC26C4D3B2623A0358FBE7CBB23BD264CBF7D54E4988"
+} else {
+ throw ('unknown CMAKE_CONFIGURATION: ' + "$env:CMAKE_CONFIGURATION")
+}
+$tarball = "$filename.zip"
+
+$outdir = $pwd.Path
+$outdir = "$outdir\.gitlab"
+$ProgressPreference = 'SilentlyContinue'
+# This URL is only visible inside of Kitware's network. See above filename table.
+Invoke-WebRequest -Uri "https://cmake.org/files/dependencies/internal/$tarball" -OutFile "$outdir\$tarball"
+$hash = Get-FileHash "$outdir\$tarball" -Algorithm SHA256
+if ($hash.Hash -ne $sha256sum) {
+ exit 1
+}
+
+Add-Type -AssemblyName System.IO.Compression.FileSystem
+[System.IO.Compression.ZipFile]::ExtractToDirectory("$outdir\$tarball", "$outdir")
+Move-Item -Path "$outdir\$filename" -Destination "$outdir\watcom"
diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml
index 8037b33..15d883d 100644
--- a/.gitlab/os-windows.yml
+++ b/.gitlab/os-windows.yml
@@ -52,6 +52,42 @@
CMAKE_GENERATOR_TOOLSET: "v142,version=14.29.30133"
CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+.windows_borland:
+ extends: .windows
+
+ variables:
+ CMAKE_GENERATOR: "Borland Makefiles"
+ CMAKE_CI_BUILD_TYPE: Release
+ CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+
+.windows_borland5.5:
+ extends: .windows_borland
+
+ variables:
+ CMAKE_CONFIGURATION: windows_borland5.5
+
+.windows_borland5.8:
+ extends: .windows_borland
+
+ variables:
+ CMAKE_CONFIGURATION: windows_borland5.8
+
+.windows_openwatcom:
+ extends: .windows
+
+ variables:
+ # Watcom does not support spaces in the path.
+ GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake-ci-ext\\$CI_CONCURRENT_ID"
+ CMAKE_GENERATOR: "Watcom WMake"
+ CMAKE_CI_BUILD_TYPE: Release
+ CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+
+.windows_openwatcom1.9:
+ extends: .windows_openwatcom
+
+ variables:
+ CMAKE_CONFIGURATION: windows_openwatcom1.9
+
## Tags
.windows_builder_tags:
@@ -123,3 +159,28 @@
- build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
interruptible: true
+
+.cmake_test_windows_borland:
+ stage: test-ext
+
+ script:
+ - Invoke-Expression -Command .gitlab/ci/borland.ps1
+ - $pwdpath = $pwd.Path
+ - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\bcc\bin;$env:PATH"
+ - build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
+
+ interruptible: true
+
+.cmake_test_windows_openwatcom:
+ stage: test-ext
+
+ script:
+ - Invoke-Expression -Command .gitlab/ci/openwatcom.ps1
+ - $pwdpath = $pwd.Path
+ - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\watcom\binnt;$pwdpath\.gitlab\watcom\binw;$env:PATH"
+ - Set-Item -Force -Path "env:INCLUDE" -Value "$pwdpath\.gitlab\watcom\h;$pwdpath\.gitlab\watcom\h\nt"
+ - Set-Item -Force -Path "env:EDPATH" -Value "$pwdpath\.gitlab\watcom\eddat"
+ - Set-Item -Force -Path "env:WATCOM" -Value "$pwdpath\.gitlab\watcom"
+ - build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
+
+ interruptible: true
diff --git a/Auxiliary/vim/syntax/cmake.vim b/Auxiliary/vim/syntax/cmake.vim
index 7a3e4ed..e09ecf3 100644
--- a/Auxiliary/vim/syntax/cmake.vim
+++ b/Auxiliary/vim/syntax/cmake.vim
@@ -1608,6 +1608,7 @@ syn keyword cmakeVariable contained
\ CTEST_SCP_COMMAND
\ CTEST_SITE
\ CTEST_SOURCE_DIRECTORY
+ \ CTEST_SUBMIT_INACTIVITY_TIMEOUT
\ CTEST_SUBMIT_URL
\ CTEST_SVN_COMMAND
\ CTEST_SVN_OPTIONS
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fdfe456..a0eae59 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
-cmake_minimum_required(VERSION 3.1...3.20 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.1...3.21 FATAL_ERROR)
set(CMAKE_USER_MAKE_RULES_OVERRIDE_C ${CMAKE_CURRENT_SOURCE_DIR}/Source/Modules/OverrideC.cmake)
set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/Source/Modules/OverrideCXX.cmake)
project(CMake)
diff --git a/Help/cpack_gen/ifw.rst b/Help/cpack_gen/ifw.rst
index 6817eac..6b8bc26 100644
--- a/Help/cpack_gen/ifw.rst
+++ b/Help/cpack_gen/ifw.rst
@@ -195,6 +195,14 @@ Package
Is ``ON`` for QtIFW less 2.0 tools.
+.. variable:: CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE
+
+ .. versionadded:: 3.23
+
+ Set to ``ON`` if command line interface features should be disabled.
+
+ Is ``OFF`` by default, but will only have an effect if using QtIFW 4.0 or later.
+
.. variable:: CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH
.. versionadded:: 3.3
@@ -248,6 +256,42 @@ Package
By default is ``OFF`` or used value
from ``CPACK_DOWNLOAD_ALL`` if set
+.. variable:: CPACK_IFW_PACKAGE_PRODUCT_IMAGES
+
+ .. versionadded:: 3.23
+
+ A list of images to be shown on the ``PerformInstallationPage``.
+
+ This feature is available for QtIFW 4.0.0 or newer.
+
+.. variable:: CPACK_IFW_PACKAGE_RUN_PROGRAM
+
+ .. versionadded:: 3.23
+
+ Command executed after the installer is done if the user accepts the action.
+ Provide the full path to the application.
+
+ This feature is available for QtIFW 4.0.0 and newer.
+
+.. variable:: CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS
+
+ .. versionadded:: 3.23
+
+ List of arguments passed to the program specified in
+ :variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM`.
+
+ This feature is available for QtIFW 4.0.0 and newer.
+
+.. variable:: CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION
+
+ .. versionadded:: 3.23
+
+ Text shown next to the check box for running the program after the
+ installation. If :variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM` is set but no
+ description provided, the UI will display ``Run <Name> now``. instead.
+
+ This feature is available for QtIFW 4.0.0 and newer.
+
Components
""""""""""
diff --git a/Help/cpack_gen/wix.rst b/Help/cpack_gen/wix.rst
index 79f835e..e9d5af6 100644
--- a/Help/cpack_gen/wix.rst
+++ b/Help/cpack_gen/wix.rst
@@ -320,3 +320,11 @@ Windows using WiX.
name is the plain namespace without the usual xmlns: prefix and url is an unquoted
namespace url. A list of commonly known WiX schemata can be found here:
https://wixtoolset.org/documentation/manual/v3/xsd/
+
+.. variable:: CPACK_WIX_SKIP_WIX_UI_EXTENSION
+
+ .. versionadded:: 3.23
+
+ If this variable is set then the inclusion of WixUIExtensions is skipped,
+ i.e. the ``-ext "WixUIExtension"`` command line is not included during
+ the execution of the WiX light tool.
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index bb5dba3..435b2c6 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -239,6 +239,7 @@ Properties on Targets
/prop_tgt/IMPORTED_LOCATION_CONFIG
/prop_tgt/IMPORTED_NO_SONAME
/prop_tgt/IMPORTED_NO_SONAME_CONFIG
+ /prop_tgt/IMPORTED_NO_SYSTEM
/prop_tgt/IMPORTED_OBJECTS
/prop_tgt/IMPORTED_OBJECTS_CONFIG
/prop_tgt/IMPORTED_SONAME
diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst
index a2103f7..ad96c09 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -665,6 +665,7 @@ Variables for CTest
/variable/CTEST_SCP_COMMAND
/variable/CTEST_SCRIPT_DIRECTORY
/variable/CTEST_SITE
+ /variable/CTEST_SUBMIT_INACTIVITY_TIMEOUT
/variable/CTEST_SUBMIT_URL
/variable/CTEST_SOURCE_DIRECTORY
/variable/CTEST_SVN_COMMAND
diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst
index 03d8bf6..52e8009 100644
--- a/Help/manual/ctest.1.rst
+++ b/Help/manual/ctest.1.rst
@@ -1349,6 +1349,13 @@ Configuration settings include:
* :module:`CTest` module variable: ``SUBMIT_URL`` if set,
else ``CTEST_SUBMIT_URL``
+``SubmitInactivityTimeout``
+ The time to wait for the submission after which it is canceled
+ if not completed. Specify a zero value to disable timeout.
+
+ * `CTest Script`_ variable: :variable:`CTEST_SUBMIT_INACTIVITY_TIMEOUT`
+ * :module:`CTest` module variable: ``CTEST_SUBMIT_INACTIVITY_TIMEOUT``
+
``TriggerSite``
Legacy option. Not used.
diff --git a/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst b/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst
new file mode 100644
index 0000000..cc726d1
--- /dev/null
+++ b/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst
@@ -0,0 +1,17 @@
+IMPORTED_NO_SYSTEM
+------------------
+
+Specifies that an :ref:`Imported Target <Imported Targets>` is not
+a ``SYSTEM`` library. This has the following effects:
+
+* Entries of :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` are not treated
+ as ``SYSTEM`` include directories when compiling consumers, as they
+ would be by default.
+
+This property can also be enabled on a non-imported target. Doing so does
+not affect the build system, but does tell the :command:`install(EXPORT)` and
+:command:`export` commands to enable it on the imported targets they generate.
+
+See the :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target property to set this
+behavior on the target consuming the include directories rather than
+providing them.
diff --git a/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst b/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst
index 880343d..e5cc09b 100644
--- a/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst
+++ b/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst
@@ -13,3 +13,6 @@ imported targets as system includes.
This property is initialized by the value of the
:variable:`CMAKE_NO_SYSTEM_FROM_IMPORTED` variable if it is set when a target
is created.
+
+See the :prop_tgt:`IMPORTED_NO_SYSTEM` target property to set this behavior
+on the target providing the include directories rather than consuming them.
diff --git a/Help/release/dev/0-sample-topic.rst b/Help/release/dev/0-sample-topic.rst
new file mode 100644
index 0000000..e4cc01e
--- /dev/null
+++ b/Help/release/dev/0-sample-topic.rst
@@ -0,0 +1,7 @@
+0-sample-topic
+--------------
+
+* This is a sample release note for the change in a topic.
+ Developers should add similar notes for each topic branch
+ making a noteworthy change. Each document should be named
+ and titled to match the topic name to avoid merge conflicts.
diff --git a/Help/release/dev/cpack-wix-skip-ui-ext.rst b/Help/release/dev/cpack-wix-skip-ui-ext.rst
new file mode 100644
index 0000000..e139469
--- /dev/null
+++ b/Help/release/dev/cpack-wix-skip-ui-ext.rst
@@ -0,0 +1,5 @@
+cpack-wix-skip-ui-ext
+---------------------
+
+* An option to the WiX Generator was added to be able to skip
+ the inclusion of the WixUIExtensions
diff --git a/Help/release/dev/cpackifw-package-disable-command-line-interface.rst b/Help/release/dev/cpackifw-package-disable-command-line-interface.rst
new file mode 100644
index 0000000..2de222e
--- /dev/null
+++ b/Help/release/dev/cpackifw-package-disable-command-line-interface.rst
@@ -0,0 +1,8 @@
+cpackifw-package-disable-command-line-interface
+-----------------------------------------------
+
+* The :cpack_gen:`CPack IFW Generator` gained new
+ :variable:`CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE` variable to
+ prevents the user from passing any consumer command to installer, like
+ ``install``, ``update``, and ``remove``.
+ This feature is available for QtIFW 4.0 and newer.
diff --git a/Help/release/dev/cpackifw-package-product-images.rst b/Help/release/dev/cpackifw-package-product-images.rst
new file mode 100644
index 0000000..3a02534
--- /dev/null
+++ b/Help/release/dev/cpackifw-package-product-images.rst
@@ -0,0 +1,8 @@
+
+cpackifw-package-product-images
+-------------------------------
+
+* The :cpack_gen:`CPack IFW Generator` gained the new
+ :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGES` variable for adding a list of
+ images to be shown on the ``PerformInstallationPage``.
+ This feature is available for QtIFW 4.0 and newer.
diff --git a/Help/release/dev/cpackifw-package-run-program.rst b/Help/release/dev/cpackifw-package-run-program.rst
new file mode 100644
index 0000000..5d6f1b2
--- /dev/null
+++ b/Help/release/dev/cpackifw-package-run-program.rst
@@ -0,0 +1,10 @@
+
+cpackifw-package-run-program
+----------------------------
+
+* The :cpack_gen:`CPack IFW Generator` gained the new
+ :variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM`,
+ :variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS`, and
+ :variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION` variables for executing
+ a command after the installer is done if the user accepts the action.
+ This feature is available for QtIFW 4.0 and newer.
diff --git a/Help/release/dev/ctest_submit-inactivity-timeout.rst b/Help/release/dev/ctest_submit-inactivity-timeout.rst
new file mode 100644
index 0000000..3d4c408
--- /dev/null
+++ b/Help/release/dev/ctest_submit-inactivity-timeout.rst
@@ -0,0 +1,5 @@
+ctest_submit-inactivity-timeout
+-------------------------------
+
+* :manual:`ctest(1)` gained a new :variable:`CTEST_SUBMIT_INACTIVITY_TIMEOUT`
+ variable, which can be used to specify a timeout for submission inactivity.
diff --git a/Help/release/dev/imported-no-system.rst b/Help/release/dev/imported-no-system.rst
new file mode 100644
index 0000000..a35e8bb
--- /dev/null
+++ b/Help/release/dev/imported-no-system.rst
@@ -0,0 +1,7 @@
+imported-no-system
+------------------
+
+* The :prop_tgt:`IMPORTED_NO_SYSTEM` target property was added to
+ specify that an :ref:`Imported Target <Imported Targets>` should
+ not be treated as a system library (i.e. its include directories
+ are not automatically ``SYSTEM``).
diff --git a/Help/release/index.rst b/Help/release/index.rst
index 3d2ed43..131595a 100644
--- a/Help/release/index.rst
+++ b/Help/release/index.rst
@@ -7,6 +7,8 @@ CMake Release Notes
This file should include the adjacent "dev.txt" file
in development versions but not in release versions.
+.. include:: dev.txt
+
Releases
========
diff --git a/Help/variable/CTEST_SUBMIT_INACTIVITY_TIMEOUT.rst b/Help/variable/CTEST_SUBMIT_INACTIVITY_TIMEOUT.rst
new file mode 100644
index 0000000..65976fa
--- /dev/null
+++ b/Help/variable/CTEST_SUBMIT_INACTIVITY_TIMEOUT.rst
@@ -0,0 +1,5 @@
+CTEST_SUBMIT_INACTIVITY_TIMEOUT
+-------------------------------
+
+Specify the CTest ``SubmitInactivityTimeout`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/Modules/DartConfiguration.tcl.in b/Modules/DartConfiguration.tcl.in
index e5b1e5d..afa36f7 100644
--- a/Modules/DartConfiguration.tcl.in
+++ b/Modules/DartConfiguration.tcl.in
@@ -21,6 +21,7 @@ LabelsForSubprojects: @CTEST_LABELS_FOR_SUBPROJECTS@
# Submission information
SubmitURL: @SUBMIT_URL@
+SubmitInactivityTimeout: @CTEST_SUBMIT_INACTIVITY_TIMEOUT@
# Dashboard start time
NightlyStartTime: @NIGHTLY_START_TIME@
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 0c01b00..8f707d1 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,8 +1,8 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 22)
-set(CMake_VERSION_PATCH 0)
-set(CMake_VERSION_RC 1)
+set(CMake_VERSION_PATCH 20211019)
+#set(CMake_VERSION_RC 0)
set(CMake_VERSION_IS_DIRTY 0)
# Start with the full version number used in tags. It has no dev info.
diff --git a/Source/CPack/IFW/cmCPackIFWGenerator.cxx b/Source/CPack/IFW/cmCPackIFWGenerator.cxx
index b375ba6..9b33eec 100644
--- a/Source/CPack/IFW/cmCPackIFWGenerator.cxx
+++ b/Source/CPack/IFW/cmCPackIFWGenerator.cxx
@@ -38,202 +38,233 @@ int cmCPackIFWGenerator::PackageFiles()
std::string ifwTLD = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
std::string ifwTmpFile = cmStrCat(ifwTLD, "/IFWOutput.log");
- // Run repogen
- if (!this->Installer.RemoteRepositories.empty()) {
- std::vector<std::string> ifwCmd;
- std::string ifwArg;
+ // Create repositories
+ if (!this->RunRepogen(ifwTmpFile)) {
+ return 0;
+ }
- ifwCmd.emplace_back(this->RepoGen);
+ // Create installer
+ if (!this->RunBinaryCreator(ifwTmpFile)) {
+ return 0;
+ }
- if (this->IsVersionLess("2.0.0")) {
- ifwCmd.emplace_back("-c");
- ifwCmd.emplace_back(this->toplevel + "/config/config.xml");
- }
+ return 1;
+}
- ifwCmd.emplace_back("-p");
- ifwCmd.emplace_back(this->toplevel + "/packages");
+std::vector<std::string> cmCPackIFWGenerator::BuildRepogenCommand()
+{
+ std::vector<std::string> ifwCmd;
+ std::string ifwArg;
- if (!this->PkgsDirsVector.empty()) {
- for (std::string const& it : this->PkgsDirsVector) {
- ifwCmd.emplace_back("-p");
- ifwCmd.emplace_back(it);
- }
+ ifwCmd.emplace_back(this->RepoGen);
+
+ if (this->IsVersionLess("2.0.0")) {
+ ifwCmd.emplace_back("-c");
+ ifwCmd.emplace_back(this->toplevel + "/config/config.xml");
+ }
+
+ ifwCmd.emplace_back("-p");
+ ifwCmd.emplace_back(this->toplevel + "/packages");
+
+ if (!this->PkgsDirsVector.empty()) {
+ for (std::string const& it : this->PkgsDirsVector) {
+ ifwCmd.emplace_back("-p");
+ ifwCmd.emplace_back(it);
}
+ }
- if (!this->RepoDirsVector.empty()) {
- if (!this->IsVersionLess("3.1")) {
- for (std::string const& rd : this->RepoDirsVector) {
- ifwCmd.emplace_back("--repository");
- ifwCmd.emplace_back(rd);
- }
- } else {
- cmCPackIFWLogger(WARNING,
- "The \"CPACK_IFW_REPOSITORIES_DIRECTORIES\" "
- << "variable is set, but content will be skipped, "
- << "because this feature available only since "
- << "QtIFW 3.1. Please update your QtIFW instance."
- << std::endl);
+ if (!this->RepoDirsVector.empty()) {
+ if (!this->IsVersionLess("3.1")) {
+ for (std::string const& rd : this->RepoDirsVector) {
+ ifwCmd.emplace_back("--repository");
+ ifwCmd.emplace_back(rd);
}
+ } else {
+ cmCPackIFWLogger(WARNING,
+ "The \"CPACK_IFW_REPOSITORIES_DIRECTORIES\" "
+ << "variable is set, but content will be skipped, "
+ << "because this feature available only since "
+ << "QtIFW 3.1. Please update your QtIFW instance."
+ << std::endl);
}
+ }
- if (!this->OnlineOnly && !this->DownloadedPackages.empty()) {
- ifwCmd.emplace_back("-i");
- auto it = this->DownloadedPackages.begin();
- ifwArg = (*it)->Name;
+ if (!this->OnlineOnly && !this->DownloadedPackages.empty()) {
+ ifwCmd.emplace_back("-i");
+ auto it = this->DownloadedPackages.begin();
+ ifwArg = (*it)->Name;
+ ++it;
+ while (it != this->DownloadedPackages.end()) {
+ ifwArg += "," + (*it)->Name;
++it;
- while (it != this->DownloadedPackages.end()) {
- ifwArg += "," + (*it)->Name;
- ++it;
- }
- ifwCmd.emplace_back(ifwArg);
- }
- ifwCmd.emplace_back(this->toplevel + "/repository");
- cmCPackIFWLogger(VERBOSE,
- "Execute: " << cmSystemTools::PrintSingleCommand(ifwCmd)
- << std::endl);
- std::string output;
- int retVal = 1;
- cmCPackIFWLogger(OUTPUT, "- Generate repository" << std::endl);
- bool res = cmSystemTools::RunSingleCommand(
- ifwCmd, &output, &output, &retVal, nullptr, this->GeneratorVerbose,
- cmDuration::zero());
- if (!res || retVal) {
- cmGeneratedFileStream ofs(ifwTmpFile);
- ofs << "# Run command: " << cmSystemTools::PrintSingleCommand(ifwCmd)
- << std::endl
- << "# Output:" << std::endl
- << output << std::endl;
- cmCPackIFWLogger(
- ERROR,
- "Problem running IFW command: "
- << cmSystemTools::PrintSingleCommand(ifwCmd) << std::endl
- << "Please check \"" << ifwTmpFile << "\" for errors" << std::endl);
- return 0;
}
+ ifwCmd.emplace_back(ifwArg);
+ }
+ ifwCmd.emplace_back(this->toplevel + "/repository");
- if (!this->Repository.RepositoryUpdate.empty() &&
- !this->Repository.PatchUpdatesXml()) {
- cmCPackIFWLogger(WARNING,
- "Problem patch IFW \"Updates\" "
- << "file: \"" << this->toplevel
- << "/repository/Updates.xml\"" << std::endl);
- }
+ return ifwCmd;
+}
- cmCPackIFWLogger(OUTPUT,
- "- repository: \"" << this->toplevel
- << "/repository\" generated"
- << std::endl);
+int cmCPackIFWGenerator::RunRepogen(const std::string& ifwTmpFile)
+{
+ if (this->Installer.RemoteRepositories.empty()) {
+ return 1;
+ }
+
+ std::vector<std::string> ifwCmd = this->BuildRepogenCommand();
+ cmCPackIFWLogger(VERBOSE,
+ "Execute: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+ << std::endl);
+ std::string output;
+ int retVal = 1;
+ cmCPackIFWLogger(OUTPUT, "- Generate repository" << std::endl);
+ bool res = cmSystemTools::RunSingleCommand(ifwCmd, &output, &output, &retVal,
+ nullptr, this->GeneratorVerbose,
+ cmDuration::zero());
+ if (!res || retVal) {
+ cmGeneratedFileStream ofs(ifwTmpFile);
+ ofs << "# Run command: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+ << std::endl
+ << "# Output:" << std::endl
+ << output << std::endl;
+ cmCPackIFWLogger(
+ ERROR,
+ "Problem running IFW command: "
+ << cmSystemTools::PrintSingleCommand(ifwCmd) << std::endl
+ << "Please check \"" << ifwTmpFile << "\" for errors" << std::endl);
+ return 0;
}
- // Run binary creator
- {
- std::vector<std::string> ifwCmd;
- std::string ifwArg;
-
- ifwCmd.emplace_back(this->BinCreator);
+ if (!this->Repository.RepositoryUpdate.empty() &&
+ !this->Repository.PatchUpdatesXml()) {
+ cmCPackIFWLogger(WARNING,
+ "Problem patch IFW \"Updates\" "
+ << "file: \"" << this->toplevel
+ << "/repository/Updates.xml\"" << std::endl);
+ }
- ifwCmd.emplace_back("-c");
- ifwCmd.emplace_back(this->toplevel + "/config/config.xml");
+ cmCPackIFWLogger(OUTPUT,
+ "- repository: \"" << this->toplevel
+ << "/repository\" generated"
+ << std::endl);
+ return 1;
+}
- if (!this->Installer.Resources.empty()) {
- ifwCmd.emplace_back("-r");
- auto it = this->Installer.Resources.begin();
- std::string path = this->toplevel + "/resources/";
- ifwArg = path + *it;
+std::vector<std::string> cmCPackIFWGenerator::BuildBinaryCreatorCommmand()
+{
+ std::vector<std::string> ifwCmd;
+ std::string ifwArg;
+
+ ifwCmd.emplace_back(this->BinCreator);
+
+ ifwCmd.emplace_back("-c");
+ ifwCmd.emplace_back(this->toplevel + "/config/config.xml");
+
+ if (!this->Installer.Resources.empty()) {
+ ifwCmd.emplace_back("-r");
+ auto it = this->Installer.Resources.begin();
+ std::string path = this->toplevel + "/resources/";
+ ifwArg = path + *it;
+ ++it;
+ while (it != this->Installer.Resources.end()) {
+ ifwArg += "," + path + *it;
++it;
- while (it != this->Installer.Resources.end()) {
- ifwArg += "," + path + *it;
- ++it;
- }
- ifwCmd.emplace_back(ifwArg);
}
+ ifwCmd.emplace_back(ifwArg);
+ }
- ifwCmd.emplace_back("-p");
- ifwCmd.emplace_back(this->toplevel + "/packages");
+ ifwCmd.emplace_back("-p");
+ ifwCmd.emplace_back(this->toplevel + "/packages");
- if (!this->PkgsDirsVector.empty()) {
- for (std::string const& it : this->PkgsDirsVector) {
- ifwCmd.emplace_back("-p");
- ifwCmd.emplace_back(it);
- }
+ if (!this->PkgsDirsVector.empty()) {
+ for (std::string const& it : this->PkgsDirsVector) {
+ ifwCmd.emplace_back("-p");
+ ifwCmd.emplace_back(it);
}
+ }
- if (!this->RepoDirsVector.empty()) {
- if (!this->IsVersionLess("3.1")) {
- for (std::string const& rd : this->RepoDirsVector) {
- ifwCmd.emplace_back("--repository");
- ifwCmd.emplace_back(rd);
- }
- } else {
- cmCPackIFWLogger(WARNING,
- "The \"CPACK_IFW_REPOSITORIES_DIRECTORIES\" "
- << "variable is set, but content will be skipped, "
- << "because this feature available only since "
- << "QtIFW 3.1. Please update your QtIFW instance."
- << std::endl);
+ if (!this->RepoDirsVector.empty()) {
+ if (!this->IsVersionLess("3.1")) {
+ for (std::string const& rd : this->RepoDirsVector) {
+ ifwCmd.emplace_back("--repository");
+ ifwCmd.emplace_back(rd);
}
+ } else {
+ cmCPackIFWLogger(WARNING,
+ "The \"CPACK_IFW_REPOSITORIES_DIRECTORIES\" "
+ << "variable is set, but content will be skipped, "
+ << "because this feature available only since "
+ << "QtIFW 3.1. Please update your QtIFW instance."
+ << std::endl);
}
+ }
- if (this->OnlineOnly) {
- ifwCmd.emplace_back("--online-only");
- } else if (!this->DownloadedPackages.empty() &&
- !this->Installer.RemoteRepositories.empty()) {
- ifwCmd.emplace_back("-e");
- auto it = this->DownloadedPackages.begin();
- ifwArg = (*it)->Name;
+ if (this->OnlineOnly) {
+ ifwCmd.emplace_back("--online-only");
+ } else if (!this->DownloadedPackages.empty() &&
+ !this->Installer.RemoteRepositories.empty()) {
+ ifwCmd.emplace_back("-e");
+ auto it = this->DownloadedPackages.begin();
+ ifwArg = (*it)->Name;
+ ++it;
+ while (it != this->DownloadedPackages.end()) {
+ ifwArg += "," + (*it)->Name;
++it;
- while (it != this->DownloadedPackages.end()) {
- ifwArg += "," + (*it)->Name;
- ++it;
- }
- ifwCmd.emplace_back(ifwArg);
- } else if (!this->DependentPackages.empty()) {
- ifwCmd.emplace_back("-i");
- ifwArg.clear();
- // Binary
- auto bit = this->BinaryPackages.begin();
- while (bit != this->BinaryPackages.end()) {
- ifwArg += (*bit)->Name + ",";
- ++bit;
- }
- // Depend
- auto it = this->DependentPackages.begin();
- ifwArg += it->second.Name;
- ++it;
- while (it != this->DependentPackages.end()) {
- ifwArg += "," + it->second.Name;
- ++it;
- }
- ifwCmd.emplace_back(ifwArg);
}
- // TODO: set correct name for multipackages
- if (!this->packageFileNames.empty()) {
- ifwCmd.emplace_back(this->packageFileNames[0]);
- } else {
- ifwCmd.emplace_back("installer" + this->OutputExtension);
+ ifwCmd.emplace_back(ifwArg);
+ } else if (!this->DependentPackages.empty()) {
+ ifwCmd.emplace_back("-i");
+ ifwArg.clear();
+ // Binary
+ auto bit = this->BinaryPackages.begin();
+ while (bit != this->BinaryPackages.end()) {
+ ifwArg += (*bit)->Name + ",";
+ ++bit;
}
- cmCPackIFWLogger(VERBOSE,
- "Execute: " << cmSystemTools::PrintSingleCommand(ifwCmd)
- << std::endl);
- std::string output;
- int retVal = 1;
- cmCPackIFWLogger(OUTPUT, "- Generate package" << std::endl);
- bool res = cmSystemTools::RunSingleCommand(
- ifwCmd, &output, &output, &retVal, nullptr, this->GeneratorVerbose,
- cmDuration::zero());
- if (!res || retVal) {
- cmGeneratedFileStream ofs(ifwTmpFile);
- ofs << "# Run command: " << cmSystemTools::PrintSingleCommand(ifwCmd)
- << std::endl
- << "# Output:" << std::endl
- << output << std::endl;
- cmCPackIFWLogger(
- ERROR,
- "Problem running IFW command: "
- << cmSystemTools::PrintSingleCommand(ifwCmd) << std::endl
- << "Please check \"" << ifwTmpFile << "\" for errors" << std::endl);
- return 0;
+ // Depend
+ auto it = this->DependentPackages.begin();
+ ifwArg += it->second.Name;
+ ++it;
+ while (it != this->DependentPackages.end()) {
+ ifwArg += "," + it->second.Name;
+ ++it;
}
+ ifwCmd.emplace_back(ifwArg);
+ }
+ // TODO: set correct name for multipackages
+ if (!this->packageFileNames.empty()) {
+ ifwCmd.emplace_back(this->packageFileNames[0]);
+ } else {
+ ifwCmd.emplace_back("installer" + this->OutputExtension);
+ }
+
+ return ifwCmd;
+}
+
+int cmCPackIFWGenerator::RunBinaryCreator(const std::string& ifwTmpFile)
+{
+ std::vector<std::string> ifwCmd = this->BuildBinaryCreatorCommmand();
+ cmCPackIFWLogger(VERBOSE,
+ "Execute: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+ << std::endl);
+ std::string output;
+ int retVal = 1;
+ cmCPackIFWLogger(OUTPUT, "- Generate package" << std::endl);
+ bool res = cmSystemTools::RunSingleCommand(ifwCmd, &output, &output, &retVal,
+ nullptr, this->GeneratorVerbose,
+ cmDuration::zero());
+ if (!res || retVal) {
+ cmGeneratedFileStream ofs(ifwTmpFile);
+ ofs << "# Run command: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+ << std::endl
+ << "# Output:" << std::endl
+ << output << std::endl;
+ cmCPackIFWLogger(
+ ERROR,
+ "Problem running IFW command: "
+ << cmSystemTools::PrintSingleCommand(ifwCmd) << std::endl
+ << "Please check \"" << ifwTmpFile << "\" for errors" << std::endl);
+ return 0;
}
return 1;
diff --git a/Source/CPack/IFW/cmCPackIFWGenerator.h b/Source/CPack/IFW/cmCPackIFWGenerator.h
index 024d25d..902ebaf 100644
--- a/Source/CPack/IFW/cmCPackIFWGenerator.h
+++ b/Source/CPack/IFW/cmCPackIFWGenerator.h
@@ -140,6 +140,12 @@ protected:
std::map<cmCPackComponentGroup*, cmCPackIFWPackage*> GroupPackages;
private:
+ std::vector<std::string> BuildRepogenCommand();
+ int RunRepogen(const std::string& ifwTmpFile);
+
+ std::vector<std::string> BuildBinaryCreatorCommmand();
+ int RunBinaryCreator(const std::string& ifwTmpFile);
+
std::string RepoGen;
std::string BinCreator;
std::string FrameworkVersion;
diff --git a/Source/CPack/IFW/cmCPackIFWInstaller.cxx b/Source/CPack/IFW/cmCPackIFWInstaller.cxx
index 7ee6300..a94ca48 100644
--- a/Source/CPack/IFW/cmCPackIFWInstaller.cxx
+++ b/Source/CPack/IFW/cmCPackIFWInstaller.cxx
@@ -254,6 +254,16 @@ void cmCPackIFWInstaller::ConfigureFromOptions()
}
}
+ // DisableCommandLineInterface
+ if (this->GetOption("CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE")) {
+ if (this->IsOn("CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE")) {
+ this->DisableCommandLineInterface = "true";
+ } else if (this->IsSetToOff(
+ "CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE")) {
+ this->DisableCommandLineInterface = "false";
+ }
+ }
+
// Space in path
if (this->GetOption("CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH")) {
if (this->IsOn("CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH")) {
@@ -275,6 +285,27 @@ void cmCPackIFWInstaller::ConfigureFromOptions()
this->Resources.clear();
cmExpandList(optIFW_PACKAGE_RESOURCES, this->Resources);
}
+
+ // ProductImages
+ if (cmValue productImages =
+ this->GetOption("CPACK_IFW_PACKAGE_PRODUCT_IMAGES")) {
+ this->ProductImages.clear();
+ cmExpandList(productImages, this->ProductImages);
+ }
+
+ // Run program, run program arguments, and run program description
+ if (cmValue program = this->GetOption("CPACK_IFW_PACKAGE_RUN_PROGRAM")) {
+ this->RunProgram = *program;
+ }
+ if (cmValue arguments =
+ this->GetOption("CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS")) {
+ this->RunProgramArguments.clear();
+ cmExpandList(arguments, this->RunProgramArguments);
+ }
+ if (cmValue description =
+ this->GetOption("CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION")) {
+ this->RunProgramDescription = *description;
+ }
}
/** \class cmCPackIFWResourcesParser
@@ -362,29 +393,11 @@ void cmCPackIFWInstaller::GenerateInstallerFile()
xout.Element("ProductUrl", this->ProductUrl);
}
- // ApplicationIcon
- if (!this->InstallerApplicationIcon.empty()) {
- std::string name =
- cmSystemTools::GetFilenameName(this->InstallerApplicationIcon);
- std::string path = this->Directory + "/config/" + name;
- name = cmSystemTools::GetFilenameWithoutExtension(name);
- cmsys::SystemTools::CopyFileIfDifferent(this->InstallerApplicationIcon,
- path);
- xout.Element("InstallerApplicationIcon", name);
- }
-
- // WindowIcon
- if (!this->InstallerWindowIcon.empty()) {
- std::string name =
- cmSystemTools::GetFilenameName(this->InstallerWindowIcon);
- std::string path = this->Directory + "/config/" + name;
- cmsys::SystemTools::CopyFileIfDifferent(this->InstallerWindowIcon, path);
- xout.Element("InstallerWindowIcon", name);
- }
-
// Logo
if (!this->Logo.empty()) {
- std::string name = cmSystemTools::GetFilenameName(this->Logo);
+ std::string srcName = cmSystemTools::GetFilenameName(this->Logo);
+ std::string suffix = cmSystemTools::GetFilenameLastExtension(srcName);
+ std::string name = "cm_logo." + suffix;
std::string path = this->Directory + "/config/" + name;
cmsys::SystemTools::CopyFileIfDifferent(this->Logo, path);
xout.Element("Logo", name);
@@ -414,42 +427,81 @@ void cmCPackIFWInstaller::GenerateInstallerFile()
xout.Element("Background", name);
}
- // WizardStyle
- if (!this->WizardStyle.empty()) {
- xout.Element("WizardStyle", this->WizardStyle);
- }
+ // Attributes introduced in QtIFW 1.4.0
+ if (!this->IsVersionLess("1.4")) {
+ // ApplicationIcon
+ if (!this->InstallerApplicationIcon.empty()) {
+ std::string srcName =
+ cmSystemTools::GetFilenameName(this->InstallerApplicationIcon);
+ std::string suffix = cmSystemTools::GetFilenameLastExtension(srcName);
+ std::string name = "cm_appicon." + suffix;
+ std::string path = this->Directory + "/config/" + name;
+ cmsys::SystemTools::CopyFileIfDifferent(this->InstallerApplicationIcon,
+ path);
+ // The actual file is looked up by attaching a '.icns' (macOS),
+ // '.ico' (Windows). No functionality on Unix.
+ name = cmSystemTools::GetFilenameWithoutExtension(name);
+ xout.Element("InstallerApplicationIcon", name);
+ }
- // Stylesheet
- if (!this->StyleSheet.empty()) {
- std::string name = cmSystemTools::GetFilenameName(this->StyleSheet);
- std::string path = this->Directory + "/config/" + name;
- cmsys::SystemTools::CopyFileIfDifferent(this->StyleSheet, path);
- xout.Element("StyleSheet", name);
+ // WindowIcon
+ if (!this->InstallerWindowIcon.empty()) {
+ std::string srcName =
+ cmSystemTools::GetFilenameName(this->InstallerWindowIcon);
+ std::string suffix = cmSystemTools::GetFilenameLastExtension(srcName);
+ std::string name = "cm_winicon." + suffix;
+ std::string path = this->Directory + "/config/" + name;
+ cmsys::SystemTools::CopyFileIfDifferent(this->InstallerWindowIcon, path);
+ xout.Element("InstallerWindowIcon", name);
+ }
}
- // WizardDefaultWidth
- if (!this->WizardDefaultWidth.empty()) {
- xout.Element("WizardDefaultWidth", this->WizardDefaultWidth);
- }
+ // Attributes introduced in QtIFW 2.0.0
+ if (!this->IsVersionLess("2.0")) {
+ // WizardDefaultWidth
+ if (!this->WizardDefaultWidth.empty()) {
+ xout.Element("WizardDefaultWidth", this->WizardDefaultWidth);
+ }
- // WizardDefaultHeight
- if (!this->WizardDefaultHeight.empty()) {
- xout.Element("WizardDefaultHeight", this->WizardDefaultHeight);
- }
+ // WizardDefaultHeight
+ if (!this->WizardDefaultHeight.empty()) {
+ xout.Element("WizardDefaultHeight", this->WizardDefaultHeight);
+ }
- // WizardShowPageList
- if (!this->IsVersionLess("4.0") && !this->WizardShowPageList.empty()) {
- xout.Element("WizardShowPageList", this->WizardShowPageList);
- }
+ // Start menu directory
+ if (!this->StartMenuDir.empty()) {
+ xout.Element("StartMenuDir", this->StartMenuDir);
+ }
- // TitleColor
- if (!this->TitleColor.empty()) {
- xout.Element("TitleColor", this->TitleColor);
- }
+ // Maintenance tool
+ if (!this->MaintenanceToolName.empty()) {
+ xout.Element("MaintenanceToolName", this->MaintenanceToolName);
+ }
- // Start menu
- if (!this->IsVersionLess("2.0")) {
- xout.Element("StartMenuDir", this->StartMenuDir);
+ // Maintenance tool ini file
+ if (!this->MaintenanceToolIniFile.empty()) {
+ xout.Element("MaintenanceToolIniFile", this->MaintenanceToolIniFile);
+ }
+
+ if (!this->AllowNonAsciiCharacters.empty()) {
+ xout.Element("AllowNonAsciiCharacters", this->AllowNonAsciiCharacters);
+ }
+ if (!this->AllowSpaceInPath.empty()) {
+ xout.Element("AllowSpaceInPath", this->AllowSpaceInPath);
+ }
+
+ // Control script (copy to config dir)
+ if (!this->ControlScript.empty()) {
+ std::string name = cmSystemTools::GetFilenameName(this->ControlScript);
+ std::string path = this->Directory + "/config/" + name;
+ cmsys::SystemTools::CopyFileIfDifferent(this->ControlScript, path);
+ xout.Element("ControlScript", name);
+ }
+ } else {
+ // CPack IFW default policy
+ xout.Comment("CPack IFW default policy for QtIFW less 2.0");
+ xout.Element("AllowNonAsciiCharacters", "true");
+ xout.Element("AllowSpaceInPath", "true");
}
// Target dir
@@ -471,41 +523,74 @@ void cmCPackIFWInstaller::GenerateInstallerFile()
xout.EndElement();
}
- // Maintenance tool
- if (!this->IsVersionLess("2.0") && !this->MaintenanceToolName.empty()) {
- xout.Element("MaintenanceToolName", this->MaintenanceToolName);
+ // Attributes introduced in QtIFW 3.0.0
+ if (!this->IsVersionLess("3.0")) {
+ // WizardStyle
+ if (!this->WizardStyle.empty()) {
+ xout.Element("WizardStyle", this->WizardStyle);
+ }
+
+ // Stylesheet (copy to config dir)
+ if (!this->StyleSheet.empty()) {
+ std::string name = cmSystemTools::GetFilenameName(this->StyleSheet);
+ std::string path = this->Directory + "/config/" + name;
+ cmsys::SystemTools::CopyFileIfDifferent(this->StyleSheet, path);
+ xout.Element("StyleSheet", name);
+ }
+
+ // TitleColor
+ if (!this->TitleColor.empty()) {
+ xout.Element("TitleColor", this->TitleColor);
+ }
}
- // Maintenance tool ini file
- if (!this->IsVersionLess("2.0") && !this->MaintenanceToolIniFile.empty()) {
- xout.Element("MaintenanceToolIniFile", this->MaintenanceToolIniFile);
+ // Attributes introduced in QtIFW 4.0.0
+ if (!this->IsVersionLess("4.0")) {
+ // WizardShowPageList
+ if (!this->WizardShowPageList.empty()) {
+ xout.Element("WizardShowPageList", this->WizardShowPageList);
+ }
+
+ // DisableCommandLineInterface
+ if (!this->DisableCommandLineInterface.empty()) {
+ xout.Element("DisableCommandLineInterface",
+ this->DisableCommandLineInterface);
+ }
+
+ // RunProgram
+ if (!this->RunProgram.empty()) {
+ xout.Element("RunProgram", this->RunProgram);
+ }
+
+ // RunProgramArguments
+ if (!this->RunProgramArguments.empty()) {
+ xout.StartElement("RunProgramArguments");
+ for (const auto& arg : this->RunProgramArguments) {
+ xout.Element("Argument", arg);
+ }
+ xout.EndElement();
+ }
+
+ // RunProgramDescription
+ if (!this->RunProgramDescription.empty()) {
+ xout.Element("RunProgramDescription", this->RunProgramDescription);
+ }
}
if (!this->RemoveTargetDir.empty()) {
xout.Element("RemoveTargetDir", this->RemoveTargetDir);
}
- // Different allows
- if (this->IsVersionLess("2.0")) {
- // CPack IFW default policy
- xout.Comment("CPack IFW default policy for QtIFW less 2.0");
- xout.Element("AllowNonAsciiCharacters", "true");
- xout.Element("AllowSpaceInPath", "true");
- } else {
- if (!this->AllowNonAsciiCharacters.empty()) {
- xout.Element("AllowNonAsciiCharacters", this->AllowNonAsciiCharacters);
- }
- if (!this->AllowSpaceInPath.empty()) {
- xout.Element("AllowSpaceInPath", this->AllowSpaceInPath);
+ // Product images (copy to config dir)
+ if (!this->IsVersionLess("4.0") && !this->ProductImages.empty()) {
+ xout.StartElement("ProductImages");
+ for (auto const& srcImg : this->ProductImages) {
+ std::string name = cmSystemTools::GetFilenameName(srcImg);
+ std::string dstImg = this->Directory + "/config/" + name;
+ cmsys::SystemTools::CopyFileIfDifferent(srcImg, dstImg);
+ xout.Element("Image", name);
}
- }
-
- // Control script (copy to config dir)
- if (!this->IsVersionLess("2.0") && !this->ControlScript.empty()) {
- std::string name = cmSystemTools::GetFilenameName(this->ControlScript);
- std::string path = this->Directory + "/config/" + name;
- cmsys::SystemTools::CopyFileIfDifferent(this->ControlScript, path);
- xout.Element("ControlScript", name);
+ xout.EndElement();
}
// Resources (copy to resources dir)
diff --git a/Source/CPack/IFW/cmCPackIFWInstaller.h b/Source/CPack/IFW/cmCPackIFWInstaller.h
index a031fc2..0ace099 100644
--- a/Source/CPack/IFW/cmCPackIFWInstaller.h
+++ b/Source/CPack/IFW/cmCPackIFWInstaller.h
@@ -109,6 +109,9 @@ public:
/// uninstalling
std::string RemoveTargetDir;
+ /// Set to true if command line interface features should be disabled
+ std::string DisableCommandLineInterface;
+
/// Set to false if the installation path cannot contain space characters
std::string AllowSpaceInPath;
@@ -118,6 +121,20 @@ public:
/// List of resources to include in the installer binary
std::vector<std::string> Resources;
+ /// A list of images to be shown on PerformInstallationPage.
+ std::vector<std::string> ProductImages;
+
+ /// Command executed after the installer is done if the user accepts the
+ /// action
+ std::string RunProgram;
+
+ /// Arguments passed to the program specified in <RunProgram>
+ std::vector<std::string> RunProgramArguments;
+
+ /// Text shown next to the check box for running the program after the
+ /// installation
+ std::string RunProgramDescription;
+
public:
// Internal implementation
diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx
index d03239b..6a0095b 100644
--- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx
+++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx
@@ -219,7 +219,9 @@ bool cmCPackWIXGenerator::InitializeWiXConfiguration()
CollectExtensions("CPACK_WIX_EXTENSIONS", this->CandleExtensions);
CollectExtensions("CPACK_WIX_CANDLE_EXTENSIONS", this->CandleExtensions);
- this->LightExtensions.insert("WixUIExtension");
+ if (!cmIsOn(GetOption("CPACK_WIX_SKIP_WIX_UI_EXTENSION"))) {
+ this->LightExtensions.insert("WixUIExtension");
+ }
CollectExtensions("CPACK_WIX_EXTENSIONS", this->LightExtensions);
CollectExtensions("CPACK_WIX_LIGHT_EXTENSIONS", this->LightExtensions);
CollectXmlNamespaces("CPACK_WIX_CUSTOM_XMLNS", this->CustomXmlNamespaces);
diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx
index 2f700b4..7ddb103 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -186,7 +186,7 @@ int cmCPackGenerator::InstallProject()
std::string bareTempInstallDirectory =
this->GetOption("CPACK_TEMPORARY_INSTALL_DIRECTORY");
std::string tempInstallDirectoryStr = bareTempInstallDirectory;
- bool setDestDir = cmIsOn(this->GetOption("CPACK_SET_DESTDIR")) |
+ bool setDestDir = cmIsOn(this->GetOption("CPACK_SET_DESTDIR")) ||
cmIsInternallyOn(this->GetOption("CPACK_SET_DESTDIR"));
if (!setDestDir) {
tempInstallDirectoryStr += this->GetPackagingInstallPrefix();
diff --git a/Source/CTest/cmCTestSubmitCommand.cxx b/Source/CTest/cmCTestSubmitCommand.cxx
index c4f87e9..a2dc615 100644
--- a/Source/CTest/cmCTestSubmitCommand.cxx
+++ b/Source/CTest/cmCTestSubmitCommand.cxx
@@ -58,6 +58,9 @@ cmCTestGenericHandler* cmCTestSubmitCommand::InitializeHandler()
this->CTest->SetCTestConfigurationFromCMakeVariable(
this->Makefile, "CurlOptions", "CTEST_CURL_OPTIONS", this->Quiet);
+ this->CTest->SetCTestConfigurationFromCMakeVariable(
+ this->Makefile, "SubmitInactivityTimeout",
+ "CTEST_SUBMIT_INACTIVITY_TIMEOUT", this->Quiet);
cmValue notesFilesVariable =
this->Makefile->GetDefinition("CTEST_NOTES_FILES");
diff --git a/Source/CTest/cmCTestSubmitHandler.cxx b/Source/CTest/cmCTestSubmitHandler.cxx
index b99bb79..fae5e30 100644
--- a/Source/CTest/cmCTestSubmitHandler.cxx
+++ b/Source/CTest/cmCTestSubmitHandler.cxx
@@ -7,6 +7,7 @@
#include <cstdlib>
#include <sstream>
+#include <cm/iomanip>
#include <cmext/algorithm>
#include <cm3p/curl/curl.h>
@@ -216,8 +217,11 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP(
// if there is little to no activity for too long stop submitting
::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1);
- ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME,
- SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT);
+ auto submitInactivityTimeout = this->GetSubmitInactivityTimeout();
+ if (submitInactivityTimeout != 0) {
+ ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME,
+ submitInactivityTimeout);
+ }
/* HTTP PUT please */
::curl_easy_setopt(curl, CURLOPT_PUT, 1);
@@ -499,7 +503,10 @@ int cmCTestSubmitHandler::HandleCDashUploadFile(std::string const& file,
std::string curlopt(this->CTest->GetCTestConfiguration("CurlOptions"));
std::vector<std::string> args = cmExpandedList(curlopt);
curl.SetCurlOptions(args);
- curl.SetTimeOutSeconds(SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT);
+ auto submitInactivityTimeout = this->GetSubmitInactivityTimeout();
+ if (submitInactivityTimeout != 0) {
+ curl.SetTimeOutSeconds(submitInactivityTimeout);
+ }
curl.SetHttpHeaders(this->HttpHeaders);
std::string url = this->CTest->GetSubmitURL();
if (!cmHasLiteralPrefix(url, "http://") &&
@@ -893,6 +900,26 @@ void cmCTestSubmitHandler::SelectParts(std::set<cmCTest::Part> const& parts)
}
}
+int cmCTestSubmitHandler::GetSubmitInactivityTimeout()
+{
+ int submitInactivityTimeout = SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT;
+ std::string const& timeoutStr =
+ this->CTest->GetCTestConfiguration("SubmitInactivityTimeout");
+ if (!timeoutStr.empty()) {
+ unsigned long timeout;
+ if (cmStrToULong(timeoutStr, &timeout)) {
+ submitInactivityTimeout = static_cast<int>(timeout);
+ } else {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "SubmitInactivityTimeout is invalid: "
+ << cm::quoted(timeoutStr) << "."
+ << " Using a default value of "
+ << SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT << "." << std::endl);
+ }
+ }
+ return submitInactivityTimeout;
+}
+
void cmCTestSubmitHandler::SelectFiles(std::set<std::string> const& files)
{
this->Files.insert(files.begin(), files.end());
diff --git a/Source/CTest/cmCTestSubmitHandler.h b/Source/CTest/cmCTestSubmitHandler.h
index 809c615..0c7253c 100644
--- a/Source/CTest/cmCTestSubmitHandler.h
+++ b/Source/CTest/cmCTestSubmitHandler.h
@@ -63,6 +63,7 @@ private:
void ParseResponse(cmCTestSubmitHandlerVectorOfChar chunk);
std::string GetSubmitResultsPrefix();
+ int GetSubmitInactivityTimeout();
class ResponseParser;
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index 6e97a83..34088d2 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -59,6 +59,8 @@ public:
}
virtual ~cmCTestCommand() = default;
+ cmCTestCommand(const cmCTestCommand&) = default;
+ cmCTestCommand& operator=(const cmCTestCommand&) = default;
bool operator()(std::vector<cmListFileArgument> const& args,
cmExecutionStatus& status)
diff --git a/Source/cmCMakePresetsFile.h b/Source/cmCMakePresetsFile.h
index 7aa9b6a..c48a1f8 100644
--- a/Source/cmCMakePresetsFile.h
+++ b/Source/cmCMakePresetsFile.h
@@ -60,18 +60,20 @@ public:
class Preset
{
public:
-#if __cplusplus < 201703L && (!defined(_MSVC_LANG) || _MSVC_LANG < 201703L)
+ Preset() = default;
+ Preset(Preset&& /*other*/) = default;
+ Preset(const Preset& /*other*/) = default;
+ Preset& operator=(const Preset& /*other*/) = default;
+ virtual ~Preset() = default;
+#if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
+ Preset& operator=(Preset&& /*other*/) = default;
+#else
// The move assignment operators for several STL classes did not become
// noexcept until C++17, which causes some tools to warn about this move
- // assignment operator throwing an exception when it shouldn't. Disable the
- // move assignment operator until C++17 is enabled.
- // Explicitly defining a copy assignment operator prevents the compiler
- // from automatically generating a move assignment operator.
- Preset& operator=(const Preset& /*other*/) = default;
+ // assignment operator throwing an exception when it shouldn't.
+ Preset& operator=(Preset&& /*other*/) = delete;
#endif
- virtual ~Preset() = default;
-
std::string Name;
std::vector<std::string> Inherits;
bool Hidden;
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index 8ca9a66..0eda92c 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -924,13 +924,13 @@ void cmExportFileGenerator::GeneratePolicyHeaderCode(std::ostream& os)
// Isolate the file policy level.
// Support CMake versions as far back as 2.6 but also support using NEW
- // policy settings for up to CMake 3.20 (this upper limit may be reviewed
+ // policy settings for up to CMake 3.21 (this upper limit may be reviewed
// and increased from time to time). This reduces the opportunity for CMake
// warnings when an older export file is later used with newer CMake
// versions.
/* clang-format off */
os << "cmake_policy(PUSH)\n"
- << "cmake_policy(VERSION 2.6...3.20)\n";
+ << "cmake_policy(VERSION 2.6...3.21)\n";
/* clang-format on */
}
@@ -1072,6 +1072,12 @@ void cmExportFileGenerator::GenerateImportTargetCode(
os << "set_property(TARGET " << targetName << " PROPERTY DEPRECATION "
<< cmExportFileGeneratorEscape(target->GetDeprecation()) << ")\n";
}
+
+ if (target->GetPropertyAsBool("IMPORTED_NO_SYSTEM")) {
+ os << "set_property(TARGET " << targetName
+ << " PROPERTY IMPORTED_NO_SYSTEM 1)\n";
+ }
+
os << "\n";
}
diff --git a/Source/cmFileTime.h b/Source/cmFileTime.h
index 4419880..ccc9633 100644
--- a/Source/cmFileTime.h
+++ b/Source/cmFileTime.h
@@ -24,6 +24,8 @@ public:
#endif
cmFileTime() = default;
~cmFileTime() = default;
+ cmFileTime(const cmFileTime&) = default;
+ cmFileTime& operator=(const cmFileTime&) = default;
/**
* @brief Loads the file time of fileName from the file system
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 8033ef5..fc02a47 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -747,6 +747,9 @@ void handleSystemIncludesDep(cmLocalGenerator* lg,
if (!depTgt->IsImported() || excludeImported) {
return;
}
+ if (depTgt->GetPropertyAsBool("IMPORTED_NO_SYSTEM")) {
+ return;
+ }
if (cmValue dirs = depTgt->GetProperty("INTERFACE_INCLUDE_DIRECTORIES")) {
cmExpandList(cmGeneratorExpression::Evaluate(*dirs, lg, config, headTarget,
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 83984f7..23b97ed 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -4427,11 +4427,12 @@ bool cmMakefile::SetPolicy(cmPolicies::PolicyID id,
}
// Deprecate old policies.
- if (status == cmPolicies::OLD && id <= cmPolicies::CMP0088 &&
+ if (status == cmPolicies::OLD && id <= cmPolicies::CMP0094 &&
!(this->GetCMakeInstance()->GetIsInTryCompile() &&
(
// Policies set by cmCoreTryCompile::TryCompileCode.
- id == cmPolicies::CMP0065 || id == cmPolicies::CMP0083))) {
+ id == cmPolicies::CMP0065 || id == cmPolicies::CMP0083 ||
+ id == cmPolicies::CMP0091))) {
this->IssueMessage(MessageType::DEPRECATION_WARNING,
cmPolicies::GetPolicyDeprecatedWarning(id));
}
diff --git a/Source/cmSearchPath.h b/Source/cmSearchPath.h
index c15cb97..09f9722 100644
--- a/Source/cmSearchPath.h
+++ b/Source/cmSearchPath.h
@@ -26,6 +26,9 @@ public:
cmSearchPath(cmFindCommon* findCmd = nullptr);
~cmSearchPath();
+ cmSearchPath(const cmSearchPath&) = default;
+ cmSearchPath& operator=(const cmSearchPath&) = default;
+
const std::vector<std::string>& GetPaths() const { return this->Paths; }
std::size_t size() const { return this->Paths.size(); }
diff --git a/Source/cm_codecvt.cxx b/Source/cm_codecvt.cxx
index 216d3f0..df4440f 100644
--- a/Source/cm_codecvt.cxx
+++ b/Source/cm_codecvt.cxx
@@ -42,7 +42,7 @@ codecvt::codecvt(Encoding e)
codecvt::~codecvt() = default;
-bool codecvt::do_always_noconv() const throw()
+bool codecvt::do_always_noconv() const noexcept
{
return this->m_noconv;
}
@@ -234,12 +234,12 @@ void codecvt::BufferPartial(mbstate_t& state, int size,
}
#endif
-int codecvt::do_max_length() const throw()
+int codecvt::do_max_length() const noexcept
{
return 4;
}
-int codecvt::do_encoding() const throw()
+int codecvt::do_encoding() const noexcept
{
return 0;
}
diff --git a/Source/cm_codecvt.hxx b/Source/cm_codecvt.hxx
index b73204f..9af083f 100644
--- a/Source/cm_codecvt.hxx
+++ b/Source/cm_codecvt.hxx
@@ -24,14 +24,14 @@ public:
protected:
~codecvt() override;
- bool do_always_noconv() const throw() override;
+ bool do_always_noconv() const noexcept override;
result do_out(mbstate_t& state, const char* from, const char* from_end,
const char*& from_next, char* to, char* to_end,
char*& to_next) const override;
result do_unshift(mbstate_t& state, char* to, char*,
char*& to_next) const override;
- int do_max_length() const throw() override;
- int do_encoding() const throw() override;
+ int do_max_length() const noexcept override;
+ int do_encoding() const noexcept override;
private:
// The mbstate_t argument to do_out and do_unshift is responsible
diff --git a/Source/kwsys/CTestConfig.cmake b/Source/kwsys/CTestConfig.cmake
index 12347b6..6484cc2 100644
--- a/Source/kwsys/CTestConfig.cmake
+++ b/Source/kwsys/CTestConfig.cmake
@@ -3,9 +3,7 @@
set(CTEST_PROJECT_NAME "KWSys")
set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
-if (NOT CTEST_DROP_METHOD STREQUAL "https")
- set(CTEST_DROP_METHOD "http")
-endif ()
+set(CTEST_DROP_METHOD "https")
set(CTEST_DROP_SITE "open.cdash.org")
set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/Source/kwsys/MD5.c b/Source/kwsys/MD5.c
index fb18a5b..76995e2 100644
--- a/Source/kwsys/MD5.c
+++ b/Source/kwsys/MD5.c
@@ -10,6 +10,7 @@
#endif
#include <stddef.h> /* size_t */
+#include <stdint.h> /* uintptr_t */
#include <stdlib.h> /* malloc, free */
#include <string.h> /* memcpy, strlen */
@@ -202,7 +203,7 @@ static void md5_process(md5_state_t* pms, const md5_byte_t* data /*[64]*/)
* On little-endian machines, we can process properly aligned
* data without copying it.
*/
- if (!((data - (const md5_byte_t*)0) & 3)) {
+ if (!((uintptr_t)data & 3)) {
/* data are properly aligned */
X = (const md5_word_t*)data;
} else {
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 930d84c..bd900fe 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -3767,6 +3767,32 @@ bool SystemTools::Split(const std::string& str,
return true;
}
+std::string SystemTools::Join(const std::vector<std::string>& list,
+ const std::string& separator)
+{
+ std::string result;
+ if (list.empty()) {
+ return result;
+ }
+
+ size_t total_size = separator.size() * (list.size() - 1);
+ for (const std::string& string : list) {
+ total_size += string.size();
+ }
+
+ result.reserve(total_size);
+ bool needs_separator = false;
+ for (const std::string& string : list) {
+ if (needs_separator) {
+ result += separator;
+ }
+ result += string;
+ needs_separator = true;
+ }
+
+ return result;
+}
+
/**
* Return path of a full filename (no trailing slashes).
* Warning: returned path is converted to Unix slashes format.
diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in
index e5d115e..dd0cb3b 100644
--- a/Source/kwsys/SystemTools.hxx.in
+++ b/Source/kwsys/SystemTools.hxx.in
@@ -214,6 +214,13 @@ public:
char separator);
/**
+ * Joins a vector of strings into a single string, with separator in between
+ * each string.
+ */
+ static std::string Join(const std::vector<std::string>& list,
+ const std::string& separator);
+
+ /**
* Return string with space added between capitalized words
* (i.e. EatMyShorts becomes Eat My Shorts )
* (note that IEatShorts becomes IEat Shorts)
diff --git a/Source/kwsys/testSystemTools.cxx b/Source/kwsys/testSystemTools.cxx
index 6ccc7a7..f96bd71 100644
--- a/Source/kwsys/testSystemTools.cxx
+++ b/Source/kwsys/testSystemTools.cxx
@@ -626,6 +626,16 @@ static bool CheckStringOperations()
res = false;
}
+ std::vector<std::string> linesToJoin = { "Mary", "Had", "A", "Little",
+ "Lamb." };
+ std::string joinResult = kwsys::SystemTools::Join(linesToJoin, " ");
+ if (joinResult != "Mary Had A Little Lamb.") {
+ std::cerr << "Problem with Join "
+ "\"Mary Had A Little Lamb.\""
+ << std::endl;
+ res = false;
+ }
+
if (kwsys::SystemTools::ConvertToWindowsOutputPath(
"L://Local Mojo/Hex Power Pack/Iffy Voodoo") !=
"\"L:\\Local Mojo\\Hex Power Pack\\Iffy Voodoo\"") {
diff --git a/Tests/CMakeLib/testUVRAII.cxx b/Tests/CMakeLib/testUVRAII.cxx
index 7d21959..fd88e24 100644
--- a/Tests/CMakeLib/testUVRAII.cxx
+++ b/Tests/CMakeLib/testUVRAII.cxx
@@ -221,10 +221,15 @@ static bool testLoopDestructor()
int testUVRAII(int, char** const)
{
- if ((testAsyncShutdown() &&
- testAsyncDtor() & testAsyncMove() & testCrossAssignment() &
- testAllMoves() & testLoopReset() & testLoopDestructor()) == 0) {
+ if (!testAsyncShutdown()) {
return -1;
}
- return 0;
+ bool passed = true;
+ passed = testAsyncDtor() && passed;
+ passed = testAsyncMove() && passed;
+ passed = testCrossAssignment() && passed;
+ passed = testAllMoves() && passed;
+ passed = testLoopReset() && passed;
+ passed = testLoopDestructor() && passed;
+ return passed ? 0 : -1;
}
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index d1f7b69..bb92c14 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -2019,7 +2019,7 @@ if(BUILD_TESTING)
)
endif()
- if(MAKE_SUPPORTS_SPACES AND NOT CMAKE_GENERATOR STREQUAL "Xcode")
+ if(MAKE_SUPPORTS_SPACES AND NOT CMAKE_GENERATOR STREQUAL "Xcode" AND NOT CMAKE_GENERATOR STREQUAL "Watcom WMake")
add_test(SubDirSpaces ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/SubDirSpaces"
diff --git a/Tests/ExportImport/Export/CMakeLists.txt b/Tests/ExportImport/Export/CMakeLists.txt
index a2968d4..7b33277 100644
--- a/Tests/ExportImport/Export/CMakeLists.txt
+++ b/Tests/ExportImport/Export/CMakeLists.txt
@@ -145,6 +145,19 @@ set_property(TARGET testLibCycleA PROPERTY LINK_INTERFACE_MULTIPLICITY 3)
add_library(testLibNoSONAME SHARED testLibNoSONAME.c)
set_property(TARGET testLibNoSONAME PROPERTY NO_SONAME 1)
+add_library(testInterfaceIncludeUser INTERFACE)
+target_include_directories(testInterfaceIncludeUser
+ INTERFACE
+ "$<INSTALL_INTERFACE:include/testInterfaceIncludeUser>"
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/testInterfaceIncludeUser>"
+)
+set_property(TARGET testInterfaceIncludeUser PROPERTY IMPORTED_NO_SYSTEM 1)
+install(
+ FILES
+ "${CMAKE_CURRENT_SOURCE_DIR}/include/testInterfaceIncludeUser/testInterfaceInclude.h"
+ DESTINATION include/testInterfaceIncludeUser
+)
+
cmake_policy(PUSH)
cmake_policy(SET CMP0022 NEW)
# Test exporting dependent libraries into different exports
@@ -531,6 +544,7 @@ install(
cmp0022NEW cmp0022OLD
TopDirLib SubDirLinkA
systemlib
+ testInterfaceIncludeUser
EXPORT exp
RUNTIME DESTINATION $<1:bin>$<0:/wrong>
LIBRARY DESTINATION $<1:lib>$<0:/wrong> NAMELINK_SKIP
@@ -590,6 +604,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
cmp0022NEW cmp0022OLD
TopDirLib SubDirLinkA
systemlib
+ testInterfaceIncludeUser
NAMESPACE bld_
FILE ExportBuildTree.cmake
)
diff --git a/Tests/ExportImport/Export/include/testInterfaceIncludeUser/testInterfaceInclude.h b/Tests/ExportImport/Export/include/testInterfaceIncludeUser/testInterfaceInclude.h
new file mode 100644
index 0000000..fa882cb
--- /dev/null
+++ b/Tests/ExportImport/Export/include/testInterfaceIncludeUser/testInterfaceInclude.h
@@ -0,0 +1 @@
+/* empty file */
diff --git a/Tests/ExportImport/Import/A/CMakeLists.txt b/Tests/ExportImport/Import/A/CMakeLists.txt
index 3cb3833..0cd703f 100644
--- a/Tests/ExportImport/Import/A/CMakeLists.txt
+++ b/Tests/ExportImport/Import/A/CMakeLists.txt
@@ -70,6 +70,10 @@ target_link_libraries(imp_testExe1
exp_testLibPerConfigDest
)
+add_library(imp_testInterfaceInclude1 STATIC imp_testInterfaceInclude1.c)
+target_include_directories(imp_testInterfaceInclude1 SYSTEM PRIVATE testInterfaceIncludeSystem)
+target_link_libraries(imp_testInterfaceInclude1 PRIVATE exp_testInterfaceIncludeUser)
+
# Try building a plugin to an executable imported from the install tree.
add_library(imp_mod1 MODULE imp_mod1.c)
target_link_libraries(imp_mod1 exp_testExe2)
@@ -110,6 +114,10 @@ target_link_libraries(imp_testExe1b
bld_testLibPerConfigDest
)
+add_library(imp_testInterfaceInclude1b STATIC imp_testInterfaceInclude1.c)
+target_include_directories(imp_testInterfaceInclude1b SYSTEM PRIVATE testInterfaceIncludeSystem)
+target_link_libraries(imp_testInterfaceInclude1b PRIVATE bld_testInterfaceIncludeUser)
+
add_custom_target(check_testLib1_genex ALL
COMMAND ${CMAKE_COMMAND} -DtestLib1=$<TARGET_FILE:exp_testLib1>
-Dprefix=${CMAKE_INSTALL_PREFIX}
diff --git a/Tests/ExportImport/Import/A/imp_testInterfaceInclude1.c b/Tests/ExportImport/Import/A/imp_testInterfaceInclude1.c
new file mode 100644
index 0000000..88a49b5
--- /dev/null
+++ b/Tests/ExportImport/Import/A/imp_testInterfaceInclude1.c
@@ -0,0 +1,6 @@
+#include "testInterfaceInclude.h"
+
+int imp_testInterfaceInclude1(void)
+{
+ return 0;
+}
diff --git a/Tests/ExportImport/Import/A/testInterfaceIncludeSystem/testInterfaceInclude.h b/Tests/ExportImport/Import/A/testInterfaceIncludeSystem/testInterfaceInclude.h
new file mode 100644
index 0000000..2beeb8b
--- /dev/null
+++ b/Tests/ExportImport/Import/A/testInterfaceIncludeSystem/testInterfaceInclude.h
@@ -0,0 +1 @@
+#error testInterfaceInclude.h included from testInterfaceIncludeSystem
diff --git a/Tests/IncludeDirectories/CMakeLists.txt b/Tests/IncludeDirectories/CMakeLists.txt
index 4c488e6..efbcb7e 100644
--- a/Tests/IncludeDirectories/CMakeLists.txt
+++ b/Tests/IncludeDirectories/CMakeLists.txt
@@ -115,6 +115,13 @@ add_library(ordertest ordertest.cpp)
target_include_directories(ordertest SYSTEM PUBLIC SystemIncludeDirectories/systemlib)
target_include_directories(ordertest PUBLIC SystemIncludeDirectories/userlib)
+add_library(ordertest2 ordertest.cpp)
+target_include_directories(ordertest2 SYSTEM PRIVATE SystemIncludeDirectories/systemlib)
+target_link_libraries(ordertest2 PRIVATE ordertest2_userlib)
+add_library(ordertest2_userlib INTERFACE IMPORTED)
+target_include_directories(ordertest2_userlib INTERFACE SystemIncludeDirectories/userlib)
+set_property(TARGET ordertest2_userlib PROPERTY IMPORTED_NO_SYSTEM 1)
+
add_subdirectory(StandardIncludeDirectories)
add_subdirectory(TargetIncludeDirectories)
diff --git a/Tests/RunCMake/BuildDepends/MakeDependencies.step1.cmake b/Tests/RunCMake/BuildDepends/MakeDependencies.step1.cmake
index c74f033..04cd698 100644
--- a/Tests/RunCMake/BuildDepends/MakeDependencies.step1.cmake
+++ b/Tests/RunCMake/BuildDepends/MakeDependencies.step1.cmake
@@ -1,5 +1,10 @@
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/main.c")
-foreach(i RANGE 1 20000)
+if(RunCMake_GENERATOR STREQUAL "Borland Makefiles")
+ set(num_headers 2000)
+else()
+ set(num_headers 20000)
+endif()
+foreach(i RANGE 1 ${num_headers})
file(WRITE "${RunCMake_TEST_BINARY_DIR}/temp_header_file_${i}.h"
"#define HEADER_${i} ${i}\n"
)
diff --git a/Tests/RunCMake/FindBoost/CMP0093-OLD-stderr.txt b/Tests/RunCMake/FindBoost/CMP0093-OLD-stderr.txt
new file mode 100644
index 0000000..899122e
--- /dev/null
+++ b/Tests/RunCMake/FindBoost/CMP0093-OLD-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at CMP0093-OLD.cmake:[0-9]+ \(cmake_policy\):
+ The OLD behavior for policy CMP0093 will be removed from a future version
+ of CMake.
+
+ The cmake-policies\(7\) manual explains that the OLD behaviors of all
+ policies are deprecated and that a policy should be set to OLD only under
+ specific short-term circumstances. Projects should be ported to the NEW
+ behavior and not rely on setting a policy to OLD.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/MSVCRuntimeLibrary/CMP0091-OLD-stderr.txt b/Tests/RunCMake/MSVCRuntimeLibrary/CMP0091-OLD-stderr.txt
new file mode 100644
index 0000000..3984a78
--- /dev/null
+++ b/Tests/RunCMake/MSVCRuntimeLibrary/CMP0091-OLD-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at CMP0091-OLD.cmake:[0-9] \(cmake_policy\):
+ The OLD behavior for policy CMP0091 will be removed from a future version
+ of CMake.
+
+ The cmake-policies\(7\) manual explains that the OLD behaviors of all
+ policies are deprecated and that a policy should be set to OLD only under
+ specific short-term circumstances. Projects should be ported to the NEW
+ behavior and not rely on setting a policy to OLD.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/MSVCWarningFlags/CMP0092-OLD-stderr.txt b/Tests/RunCMake/MSVCWarningFlags/CMP0092-OLD-stderr.txt
new file mode 100644
index 0000000..535b997
--- /dev/null
+++ b/Tests/RunCMake/MSVCWarningFlags/CMP0092-OLD-stderr.txt
@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at CMP0092-OLD.cmake:[0-9]+ \(cmake_policy\):
+ The OLD behavior for policy CMP0092 will be removed from a future version
+ of CMake.
+
+ The cmake-policies\(7\) manual explains that the OLD behaviors of all
+ policies are deprecated and that a policy should be set to OLD only under
+ specific short-term circumstances. Projects should be ported to the NEW
+ behavior and not rely on setting a policy to OLD.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:[0-9]+ \(include\)$
diff --git a/Utilities/Doxygen/CMakeLists.txt b/Utilities/Doxygen/CMakeLists.txt
index 69b4e2f..72cfc05 100644
--- a/Utilities/Doxygen/CMakeLists.txt
+++ b/Utilities/Doxygen/CMakeLists.txt
@@ -3,7 +3,7 @@
if(NOT CMake_SOURCE_DIR)
set(CMakeDeveloperReference_STANDALONE 1)
- cmake_minimum_required(VERSION 3.1...3.20 FATAL_ERROR)
+ cmake_minimum_required(VERSION 3.1...3.21 FATAL_ERROR)
get_filename_component(tmp "${CMAKE_CURRENT_SOURCE_DIR}" PATH)
get_filename_component(CMake_SOURCE_DIR "${tmp}" PATH)
include(${CMake_SOURCE_DIR}/Modules/CTestUseLaunchers.cmake)
diff --git a/Utilities/Sphinx/CMakeLists.txt b/Utilities/Sphinx/CMakeLists.txt
index c8a970d..165d557 100644
--- a/Utilities/Sphinx/CMakeLists.txt
+++ b/Utilities/Sphinx/CMakeLists.txt
@@ -3,7 +3,7 @@
if(NOT CMake_SOURCE_DIR)
set(CMakeHelp_STANDALONE 1)
- cmake_minimum_required(VERSION 3.1...3.20 FATAL_ERROR)
+ cmake_minimum_required(VERSION 3.1...3.21 FATAL_ERROR)
get_filename_component(tmp "${CMAKE_CURRENT_SOURCE_DIR}" PATH)
get_filename_component(CMake_SOURCE_DIR "${tmp}" PATH)
include(${CMake_SOURCE_DIR}/Modules/CTestUseLaunchers.cmake)