diff --git a/Help/command/DEPRECATED_POLICY_VERSIONS.txt b/Help/command/DEPRECATED_POLICY_VERSIONS.txt index f5104d336b..dbcbfc404c 100644 --- a/Help/command/DEPRECATED_POLICY_VERSIONS.txt +++ b/Help/command/DEPRECATED_POLICY_VERSIONS.txt @@ -1,3 +1,11 @@ +.. versionchanged:: 4.0 + + Compatibility with versions of CMake older than 2.8.0 is removed. + Calls to :command:`cmake_minimum_required(VERSION)` or + :command:`cmake_policy(VERSION)` that do not specify at least + 2.8.0 as their policy version (optionally via ``...``) + will produce an error in CMake 4.0 and above. + .. versionchanged:: 3.31 Compatibility with versions of CMake older than 3.10 is deprecated. diff --git a/Help/release/dev/remove-old-compatibility.rst b/Help/release/dev/remove-old-compatibility.rst new file mode 100644 index 0000000000..2d828977d8 --- /dev/null +++ b/Help/release/dev/remove-old-compatibility.rst @@ -0,0 +1,10 @@ +remove-old-compatibility +------------------------ + +* Compatibility with versions of CMake older than 2.8.0 has been removed. + Calls to :command:`cmake_minimum_required` or :command:`cmake_policy` + that set the policy version to an older value now issue an error. + Note that calls to those commands can still support older versions of + CMake by using their ``VERSION`` arguments' ``...`` syntax. + This requires only the ```` version of CMake, but when running a + newer version, sets policies up to the ```` version. diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 00ff634c9d..88d3c0c041 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1744,7 +1744,7 @@ void cmMakefile::Configure() this->SetCheckCMP0000(true); // Implicitly set the version for the user. - cmPolicies::ApplyPolicyVersion(this, 2, 4, 0, + cmPolicies::ApplyPolicyVersion(this, 2, 8, 0, cmPolicies::WarnCompat::Off); } } diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx index 5407715f67..f506f09b98 100644 --- a/Source/cmPolicies.cxx +++ b/Source/cmPolicies.cxx @@ -294,12 +294,24 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile* mf, unsigned int majorVer, unsigned int patchVer, WarnCompat warnCompat) { - // Warn about policy versions for which support will be removed. - if (warnCompat == WarnCompat::On && - (majorVer < 3 || (majorVer == 3 && minorVer < 10)) && + // Error on policy versions for which support has been removed. + if (majorVer < 2 || (majorVer == 2 && minorVer < 8)) { + if (IsFromLegacyInstallEXPORT(mf, majorVer, minorVer, patchVer)) { // Silently tolerate cmake_policy calls generated by install(EXPORT) // in CMake versions prior to 3.18. - !IsFromLegacyInstallEXPORT(mf, majorVer, minorVer, patchVer)) { + majorVer = 2; + minorVer = 8; + patchVer = 0; + } else { + mf->IssueMessage(MessageType::FATAL_ERROR, + "Compatibility with CMake < 2.8.0 has been removed " + "from CMake.\n" ADVICE_UPDATE_VERSION_ARGUMENT); + cmSystemTools::SetFatalErrorOccurred(); + return false; + } + } else if ((majorVer < 3 || (majorVer == 3 && minorVer < 10)) && + warnCompat == WarnCompat::On) { + // Warn about policy versions for which support will be removed. mf->IssueMessage( MessageType::DEPRECATION_WARNING, "Compatibility with CMake < 3.10 will be removed from " diff --git a/Tests/RunCMake/cmake_minimum_required/Before24-stderr.txt b/Tests/RunCMake/cmake_minimum_required/Before24-stderr.txt deleted file mode 100644 index 4a6f16dc30..0000000000 --- a/Tests/RunCMake/cmake_minimum_required/Before24-stderr.txt +++ /dev/null @@ -1,5 +0,0 @@ -CMake Warning \(dev\) at Before24.cmake:1 \(cmake_minimum_required\): - Compatibility with CMake < 2.4 is not supported by CMake >= 3.0. -Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\) -This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/cmake_minimum_required/Before24.cmake b/Tests/RunCMake/cmake_minimum_required/Before24.cmake deleted file mode 100644 index c28fc8a9d2..0000000000 --- a/Tests/RunCMake/cmake_minimum_required/Before24.cmake +++ /dev/null @@ -1 +0,0 @@ -cmake_minimum_required(VERSION 2.2) diff --git a/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated-stderr.txt b/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated-stderr.txt index 5af7abb83d..0a796b9caa 100644 --- a/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated-stderr.txt +++ b/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated-stderr.txt @@ -8,17 +8,7 @@ Call Stack \(most recent call first\): CMakeLists.txt:3 \(include\) + -CMake Deprecation Warning at BeforeVersionDeprecated\.cmake:2 \(cmake_policy\): - Compatibility with CMake < 3\.10 will be removed from a future version of - CMake\. - - Update the VERSION argument value\. Or, use the \.\.\. syntax - to tell CMake that the project requires at least but has been updated - to work with policies introduced by or earlier\. -Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\) -+ -CMake Deprecation Warning at BeforeVersionDeprecated\.cmake:6 \(cmake_policy\): +CMake Deprecation Warning at BeforeVersionDeprecated\.cmake:5 \(cmake_policy\): Compatibility with CMake < 3\.10 will be removed from a future version of CMake\. diff --git a/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated.cmake b/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated.cmake index 0b010ef870..ff2389885c 100644 --- a/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated.cmake +++ b/Tests/RunCMake/cmake_minimum_required/BeforeVersionDeprecated.cmake @@ -1,5 +1,4 @@ cmake_minimum_required(VERSION 3.9) -cmake_policy(VERSION 2.6) cmake_policy(PUSH) cmake_policy(VERSION 2.6) # simulate pre-3.18 install(EXPORT)-generated call cmake_policy(POP) diff --git a/Tests/RunCMake/cmake_minimum_required/CompatBefore24-result.txt b/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved-result.txt similarity index 100% rename from Tests/RunCMake/cmake_minimum_required/CompatBefore24-result.txt rename to Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved-result.txt diff --git a/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved-stderr.txt b/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved-stderr.txt new file mode 100644 index 0000000000..040a7c32c1 --- /dev/null +++ b/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved-stderr.txt @@ -0,0 +1,8 @@ +^CMake Error at BeforeVersionRemoved\.cmake:1 \(cmake_minimum_required\): + Compatibility with CMake < 2\.8\.0 has been removed from CMake\. + + Update the VERSION argument value\. Or, use the \.\.\. syntax + to tell CMake that the project requires at least but has been updated + to work with policies introduced by or earlier\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved.cmake b/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved.cmake new file mode 100644 index 0000000000..d20c1c8d5f --- /dev/null +++ b/Tests/RunCMake/cmake_minimum_required/BeforeVersionRemoved.cmake @@ -0,0 +1 @@ +cmake_minimum_required(VERSION 2.6.4) diff --git a/Tests/RunCMake/cmake_minimum_required/CompatBefore24-stderr.txt b/Tests/RunCMake/cmake_minimum_required/CompatBefore24-stderr.txt deleted file mode 100644 index 1363d09222..0000000000 --- a/Tests/RunCMake/cmake_minimum_required/CompatBefore24-stderr.txt +++ /dev/null @@ -1,15 +0,0 @@ -^CMake Deprecation Warning at CompatBefore24\.cmake:1 \(cmake_minimum_required\): - Compatibility with CMake < 3\.10 will be removed from a future version of - CMake\. - - Update the VERSION argument value\. Or, use the \.\.\. syntax - to tell CMake that the project requires at least but has been updated - to work with policies introduced by or earlier\. -Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\) -+ -CMake Error in CMakeLists.txt: - You have set CMAKE_BACKWARDS_COMPATIBILITY to a CMake version less than - 2.4. This version of CMake only supports backwards compatibility with - CMake 2.4 or later. For compatibility with older versions please use any - CMake 2.8.x release or lower. diff --git a/Tests/RunCMake/cmake_minimum_required/CompatBefore24.cmake b/Tests/RunCMake/cmake_minimum_required/CompatBefore24.cmake deleted file mode 100644 index ca0cb1ded8..0000000000 --- a/Tests/RunCMake/cmake_minimum_required/CompatBefore24.cmake +++ /dev/null @@ -1,2 +0,0 @@ -cmake_minimum_required(VERSION 2.4) -set(CMAKE_BACKWARDS_COMPATIBILITY 2.2) diff --git a/Tests/RunCMake/cmake_minimum_required/PolicyBefore24-stderr.txt b/Tests/RunCMake/cmake_minimum_required/PolicyBefore24-stderr.txt deleted file mode 100644 index 840211a3b9..0000000000 --- a/Tests/RunCMake/cmake_minimum_required/PolicyBefore24-stderr.txt +++ /dev/null @@ -1,6 +0,0 @@ -CMake Error at PolicyBefore24.cmake:2 \(cmake_policy\): - Compatibility with CMake < 2.4 is not supported by CMake >= 3.0. For - compatibility with older versions please use any CMake 2.8.x release or - lower. -Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/cmake_minimum_required/PolicyBefore24.cmake b/Tests/RunCMake/cmake_minimum_required/PolicyBefore24.cmake deleted file mode 100644 index 62d3836132..0000000000 --- a/Tests/RunCMake/cmake_minimum_required/PolicyBefore24.cmake +++ /dev/null @@ -1,2 +0,0 @@ -cmake_minimum_required(VERSION 2.4) -cmake_policy(VERSION 2.2) diff --git a/Tests/RunCMake/cmake_minimum_required/PolicyBefore24-result.txt b/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved-result.txt similarity index 100% rename from Tests/RunCMake/cmake_minimum_required/PolicyBefore24-result.txt rename to Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved-result.txt diff --git a/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved-stderr.txt b/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved-stderr.txt new file mode 100644 index 0000000000..6824d8f203 --- /dev/null +++ b/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved-stderr.txt @@ -0,0 +1,8 @@ +^CMake Error at PolicyBeforeVersionRemoved\.cmake:1 \(cmake_policy\): + Compatibility with CMake < 2\.8\.0 has been removed from CMake\. + + Update the VERSION argument value\. Or, use the \.\.\. syntax + to tell CMake that the project requires at least but has been updated + to work with policies introduced by or earlier\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved.cmake b/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved.cmake new file mode 100644 index 0000000000..1a41499365 --- /dev/null +++ b/Tests/RunCMake/cmake_minimum_required/PolicyBeforeVersionRemoved.cmake @@ -0,0 +1 @@ +cmake_policy(VERSION 2.6.4) diff --git a/Tests/RunCMake/cmake_minimum_required/RunCMakeTest.cmake b/Tests/RunCMake/cmake_minimum_required/RunCMakeTest.cmake index 6de792e611..cd63093c4e 100644 --- a/Tests/RunCMake/cmake_minimum_required/RunCMakeTest.cmake +++ b/Tests/RunCMake/cmake_minimum_required/RunCMakeTest.cmake @@ -1,9 +1,8 @@ include(RunCMake) -run_cmake(Before24) -run_cmake(CompatBefore24) +run_cmake(BeforeVersionRemoved) +run_cmake(PolicyBeforeVersionRemoved) run_cmake(Future) -run_cmake(PolicyBefore24) run_cmake(BeforeVersionDeprecated) run_cmake(Range) run_cmake(RangeBad)