diff options
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) |
