From 39da33ae81c8d6ae4b9136c342e5b606547dde8f Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 28 May 2025 09:41:34 -0400 Subject: [PATCH] CMakeDetermineVSServicePack: Add policy to remove this module It has been documented as deprecated since CMake 3.0. --- Help/manual/cmake-policies.7.rst | 1 + Help/policy/CMP0196.rst | 23 +++++++++++++++++++ .../remove-CMakeDetermineVSServicePack.rst | 6 +++++ Modules/CMakeDetermineVSServicePack.cmake | 14 +++++++++++ Source/cmIncludeCommand.cxx | 1 + Source/cmPolicies.h | 4 +++- .../include/CMP0196-NEW-name-result.txt | 1 + .../include/CMP0196-NEW-name-stderr.txt | 6 +++++ Tests/RunCMake/include/CMP0196-NEW-name.cmake | 2 ++ .../include/CMP0196-NEW-path-result.txt | 1 + .../include/CMP0196-NEW-path-stderr.txt | 6 +++++ Tests/RunCMake/include/CMP0196-NEW-path.cmake | 2 ++ Tests/RunCMake/include/CMP0196-OLD.cmake | 7 ++++++ .../RunCMake/include/CMP0196-WARN-stderr.txt | 8 +++++++ Tests/RunCMake/include/CMP0196-WARN.cmake | 7 ++++++ Tests/RunCMake/include/RunCMakeTest.cmake | 5 ++++ 16 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 Help/policy/CMP0196.rst create mode 100644 Help/release/dev/remove-CMakeDetermineVSServicePack.rst create mode 100644 Tests/RunCMake/include/CMP0196-NEW-name-result.txt create mode 100644 Tests/RunCMake/include/CMP0196-NEW-name-stderr.txt create mode 100644 Tests/RunCMake/include/CMP0196-NEW-name.cmake create mode 100644 Tests/RunCMake/include/CMP0196-NEW-path-result.txt create mode 100644 Tests/RunCMake/include/CMP0196-NEW-path-stderr.txt create mode 100644 Tests/RunCMake/include/CMP0196-NEW-path.cmake create mode 100644 Tests/RunCMake/include/CMP0196-OLD.cmake create mode 100644 Tests/RunCMake/include/CMP0196-WARN-stderr.txt create mode 100644 Tests/RunCMake/include/CMP0196-WARN.cmake diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst index c960828aca..15d5f970eb 100644 --- a/Help/manual/cmake-policies.7.rst +++ b/Help/manual/cmake-policies.7.rst @@ -98,6 +98,7 @@ Policies Introduced by CMake 4.1 .. toctree:: :maxdepth: 1 + CMP0196: The CMakeDetermineVSServicePack module is removed. CMP0195: Swift modules in build trees use the Swift module directory structure. CMP0194: MSVC is not an assembler for language ASM. CMP0193: GNUInstallDirs caches CMAKE_INSTALL_* with leading 'usr/' for install prefix '/'. diff --git a/Help/policy/CMP0196.rst b/Help/policy/CMP0196.rst new file mode 100644 index 0000000000..9dfa3cd432 --- /dev/null +++ b/Help/policy/CMP0196.rst @@ -0,0 +1,23 @@ +CMP0196 +------- + +.. versionadded:: 4.1 + +The :module:`CMakeDetermineVSServicePack` module is removed. + +The ``CMakeDetermineVSServicePack`` module has long been superseded by +the :variable:`CMAKE__COMPILER_VERSION` variable, and the module +has been documented as deprecated since CMake 3.0. CMake 4.1 and above +prefer to not provide the module. This policy provides compatibility +for projects that have not been ported away from it. + +The ``OLD`` behavior of this policy is for +``include(CMakeDetermineVSServicePack)`` to load the deprecated module. +The ``NEW`` behavior halts with a fatal error if anything tries to include +the module. + +.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.1 +.. |WARNS_OR_DOES_NOT_WARN| replace:: warns +.. include:: include/STANDARD_ADVICE.rst + +.. include:: include/DEPRECATED.rst diff --git a/Help/release/dev/remove-CMakeDetermineVSServicePack.rst b/Help/release/dev/remove-CMakeDetermineVSServicePack.rst new file mode 100644 index 0000000000..89d6de5a9b --- /dev/null +++ b/Help/release/dev/remove-CMakeDetermineVSServicePack.rst @@ -0,0 +1,6 @@ +remove-CMakeDetermineVSServicePack +---------------------------------- + +* The :module`:CMakeDetermineVSServicePack` module has been deprecated + via policy :policy:`CMP0196`. Port projects to the + :variable:`CMAKE__COMPILER_VERSION` variable instead. diff --git a/Modules/CMakeDetermineVSServicePack.cmake b/Modules/CMakeDetermineVSServicePack.cmake index 2799608805..c9a9fb988b 100644 --- a/Modules/CMakeDetermineVSServicePack.cmake +++ b/Modules/CMakeDetermineVSServicePack.cmake @@ -5,6 +5,10 @@ CMakeDetermineVSServicePack --------------------------- +.. versionchanged:: 4.1 + + This module is available only if policy :policy:`CMP0196` is not set to ``NEW``. + .. deprecated:: 3.0 This module should no longer be used. The functionality of this module has @@ -59,6 +63,16 @@ Determining the Visual Studio service pack version in a project: endif() #]=======================================================================] +cmake_policy(GET CMP0196 _CMakeDetermineVSServicePack_CMP0196) +if(_CMakeDetermineVSServicePack_CMP0196 STREQUAL "NEW") + message(FATAL_ERROR "The CMakeDetermineVSServicePack module has been removed by policy CMP0196.") +endif() + +if(_CMakeDetermineVSServicePack_testing) + set(_CMakeDetermineVSServicePack_included TRUE) + return() +endif() + if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.8) message(DEPRECATION "This module is deprecated and should not be used. " diff --git a/Source/cmIncludeCommand.cxx b/Source/cmIncludeCommand.cxx index baa2b126e0..0a39824704 100644 --- a/Source/cmIncludeCommand.cxx +++ b/Source/cmIncludeCommand.cxx @@ -19,6 +19,7 @@ bool cmIncludeCommand(std::vector const& args, { static std::map DeprecatedModules; if (DeprecatedModules.empty()) { + DeprecatedModules["CMakeDetermineVSServicePack"] = cmPolicies::CMP0196; DeprecatedModules["CMakeFindFrameworks"] = cmPolicies::CMP0173; DeprecatedModules["Dart"] = cmPolicies::CMP0145; DeprecatedModules["Documentation"] = cmPolicies::CMP0106; diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index c987e6fadd..49ecaa32a1 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -584,7 +584,9 @@ class cmMakefile; SELECT( \ POLICY, CMP0195, \ "Swift modules in build trees use the Swift module directory structure.", \ - 4, 1, 0, WARN) + 4, 1, 0, WARN) \ + SELECT(POLICY, CMP0196, \ + "The CMakeDetermineVSServicePack module is removed.", 4, 1, 0, WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_FOR_EACH_POLICY_ID(POLICY) \ diff --git a/Tests/RunCMake/include/CMP0196-NEW-name-result.txt b/Tests/RunCMake/include/CMP0196-NEW-name-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-NEW-name-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/include/CMP0196-NEW-name-stderr.txt b/Tests/RunCMake/include/CMP0196-NEW-name-stderr.txt new file mode 100644 index 0000000000..d51d3de468 --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-NEW-name-stderr.txt @@ -0,0 +1,6 @@ +^CMake Error at CMP0196-NEW-name\.cmake:[0-9]+ \(include\): + include could not find requested file: + + CMakeDetermineVSServicePack +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/include/CMP0196-NEW-name.cmake b/Tests/RunCMake/include/CMP0196-NEW-name.cmake new file mode 100644 index 0000000000..ca45312884 --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-NEW-name.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0196 NEW) +include(CMakeDetermineVSServicePack) diff --git a/Tests/RunCMake/include/CMP0196-NEW-path-result.txt b/Tests/RunCMake/include/CMP0196-NEW-path-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-NEW-path-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/include/CMP0196-NEW-path-stderr.txt b/Tests/RunCMake/include/CMP0196-NEW-path-stderr.txt new file mode 100644 index 0000000000..d612728b15 --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-NEW-path-stderr.txt @@ -0,0 +1,6 @@ +^CMake Error at [^ +]*/Modules/CMakeDetermineVSServicePack.cmake:[0-9]+ \(message\): + The CMakeDetermineVSServicePack module has been removed by policy CMP0196\. +Call Stack \(most recent call first\): + CMP0196-NEW-path\.cmake:[0-9]+ \(include\) + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/include/CMP0196-NEW-path.cmake b/Tests/RunCMake/include/CMP0196-NEW-path.cmake new file mode 100644 index 0000000000..f12452b3e9 --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-NEW-path.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0196 NEW) +include(${CMAKE_ROOT}/Modules/CMakeDetermineVSServicePack.cmake) diff --git a/Tests/RunCMake/include/CMP0196-OLD.cmake b/Tests/RunCMake/include/CMP0196-OLD.cmake new file mode 100644 index 0000000000..8b969db47d --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-OLD.cmake @@ -0,0 +1,7 @@ +cmake_policy(SET CMP0196 OLD) +set(_CMakeDetermineVSServicePack_testing 1) +include(CMakeDetermineVSServicePack) + +if(NOT _CMakeDetermineVSServicePack_included) + message(FATAL_ERROR "CMakeDetermineVSServicePack.cmake not included") +endif() diff --git a/Tests/RunCMake/include/CMP0196-WARN-stderr.txt b/Tests/RunCMake/include/CMP0196-WARN-stderr.txt new file mode 100644 index 0000000000..ad10bd4917 --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-WARN-stderr.txt @@ -0,0 +1,8 @@ +^CMake Warning \(dev\) at CMP0196-WARN\.cmake:[0-9]+ \(include\): + Policy CMP0196 is not set: The CMakeDetermineVSServicePack module is + removed\. Run "cmake --help-policy CMP0196" for policy details\. Use the + cmake_policy command to set the policy and suppress this warning\. + +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) +This warning is for project developers\. Use -Wno-dev to suppress it\.$ diff --git a/Tests/RunCMake/include/CMP0196-WARN.cmake b/Tests/RunCMake/include/CMP0196-WARN.cmake new file mode 100644 index 0000000000..5a877413f1 --- /dev/null +++ b/Tests/RunCMake/include/CMP0196-WARN.cmake @@ -0,0 +1,7 @@ +# Do not set CMP0196. +set(_CMakeDetermineVSServicePack_testing 1) +include(CMakeDetermineVSServicePack) + +if(NOT _CMakeDetermineVSServicePack_included) + message(FATAL_ERROR "CMakeDetermineVSServicePack.cmake not included") +endif() diff --git a/Tests/RunCMake/include/RunCMakeTest.cmake b/Tests/RunCMake/include/RunCMakeTest.cmake index 47fcf1ee2e..1b0c808e06 100644 --- a/Tests/RunCMake/include/RunCMakeTest.cmake +++ b/Tests/RunCMake/include/RunCMakeTest.cmake @@ -38,3 +38,8 @@ run_cmake(CMP0191-OLD) run_cmake(CMP0191-WARN) run_cmake(CMP0191-NEW-name) run_cmake(CMP0191-NEW-path) + +run_cmake(CMP0196-OLD) +run_cmake(CMP0196-WARN) +run_cmake(CMP0196-NEW-name) +run_cmake(CMP0196-NEW-path)