Pārlūkot izejas kodu

Merge topic 'policy-version-env'

33856b1d62 Add CMAKE_POLICY_VERSION_MINIMUM environment variable
04721acc6c Tests: Cover CMAKE_POLICY_VERSION_MINIMUM in initial cache script
729470ff6d Tests: Cover CMAKE_POLICY_VERSION_MINIMUM in script mode
6cd10ffed7 Tests: Cover CMAKE_POLICY_VERSION_MINIMUM as cache entry

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Acked-by: John Parent <[email protected]>
Merge-request: !10376
Brad King 8 mēneši atpakaļ
vecāks
revīzija
f0140a6e72
38 mainītis faili ar 133 papildinājumiem un 9 dzēšanām
  1. 11 0
      Help/envvar/CMAKE_POLICY_VERSION_MINIMUM.rst
  2. 1 0
      Help/manual/cmake-env-variables.7.rst
  3. 2 0
      Help/release/4.0.rst
  4. 4 0
      Help/variable/CMAKE_POLICY_VERSION_MINIMUM.rst
  5. 15 0
      Source/cmake.cxx
  6. 1 0
      Tests/EnforceConfig.cmake.in
  7. 4 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVar-stderr.txt
  8. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVar.cmake
  9. 0 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBad-result.txt
  10. 10 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBad-stderr.txt
  11. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBad.cmake
  12. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadCache-result.txt
  13. 9 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadCache-stderr.txt
  14. 0 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadCache.cmake
  15. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadScript-result.txt
  16. 7 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadScript-stderr.txt
  17. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadScript.cmake
  18. 4 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarCache-stderr.txt
  19. 0 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarCache.cmake
  20. 4 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarScript-stderr.txt
  21. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarScript.cmake
  22. 4 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVar-stderr.txt
  23. 1 1
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVar.cmake
  24. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBad-result.txt
  25. 9 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBad-stderr.txt
  26. 0 1
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBad.cmake
  27. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadCache-result.txt
  28. 7 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadCache-stderr.txt
  29. 0 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadCache.cmake
  30. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadScript-result.txt
  31. 4 2
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadScript-stderr.txt
  32. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadScript.cmake
  33. 4 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarCache-stderr.txt
  34. 0 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarCache.cmake
  35. 4 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarScript-stderr.txt
  36. 1 0
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVarScript.cmake
  37. 0 3
      Tests/RunCMake/cmake_minimum_required/PolicyVersionVariable-stderr.txt
  38. 17 2
      Tests/RunCMake/cmake_minimum_required/RunCMakeTest.cmake

+ 11 - 0
Help/envvar/CMAKE_POLICY_VERSION_MINIMUM.rst

@@ -0,0 +1,11 @@
+CMAKE_POLICY_VERSION_MINIMUM
+----------------------------
+
+.. versionadded:: 4.0
+
+.. include:: ENV_VAR.txt
+
+The default value for :variable:`CMAKE_POLICY_VERSION_MINIMUM` when there
+is no explicit configuration given on the first run while creating a new
+build tree.  On later runs in an existing build tree the value persists in
+the cache as :variable:`CMAKE_POLICY_VERSION_MINIMUM`.

+ 1 - 0
Help/manual/cmake-env-variables.7.rst

@@ -27,6 +27,7 @@ Environment Variables that Change Behavior
    /envvar/CMAKE_INCLUDE_PATH
    /envvar/CMAKE_LIBRARY_PATH
    /envvar/CMAKE_MAXIMUM_RECURSION_DEPTH
+   /envvar/CMAKE_POLICY_VERSION_MINIMUM
    /envvar/CMAKE_PREFIX_PATH
    /envvar/CMAKE_PROGRAM_PATH
    /envvar/CMAKE_TLS_VERIFY

+ 2 - 0
Help/release/4.0.rst

@@ -75,6 +75,8 @@ Variables
 * The :variable:`CMAKE_POLICY_VERSION_MINIMUM` variable was added to
   help packagers and end users try to configure existing projects that
   have not been updated to work with supported CMake versions.
+  The :envvar:`CMAKE_POLICY_VERSION_MINIMUM` environment variable was
+  added to initialize it.
 
 * The :variable:`CMAKE_XCODE_SCHEME_LLDB_INIT_FILE` variable and corresponding
   :prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE` target property were added to tell

+ 4 - 0
Help/variable/CMAKE_POLICY_VERSION_MINIMUM.rst

@@ -16,6 +16,10 @@ to externally set policies for which a project has not itself been updated:
   ``-DCMAKE_POLICY_VERSION_MINIMUM=3.5``, to try configuring a project
   that has not been updated to set at least that policy version itself.
 
+  Alternatively, users may set the :envvar:`CMAKE_POLICY_VERSION_MINIMUM`
+  environment variable to initialize the cache entry in new build trees
+  automatically.
+
 * Projects may set this variable before a call to :command:`add_subdirectory`
   that adds a third-party project in order to set its policy version without
   modifying third-party code.

+ 15 - 0
Source/cmake.cxx

@@ -547,6 +547,21 @@ void cmake::PrintPresetEnvironment()
 // Parse the args
 bool cmake::SetCacheArgs(std::vector<std::string> const& args)
 {
+  static std::string const kCMAKE_POLICY_VERSION_MINIMUM =
+    "CMAKE_POLICY_VERSION_MINIMUM";
+  if (!this->State->GetInitializedCacheValue(kCMAKE_POLICY_VERSION_MINIMUM)) {
+    cm::optional<std::string> policyVersion =
+      cmSystemTools::GetEnvVar(kCMAKE_POLICY_VERSION_MINIMUM);
+    if (policyVersion && !policyVersion->empty()) {
+      this->AddCacheEntry(
+        kCMAKE_POLICY_VERSION_MINIMUM, *policyVersion,
+        "Override policy version for cmake_minimum_required calls.",
+        cmStateEnums::STRING);
+      this->State->SetCacheEntryProperty(kCMAKE_POLICY_VERSION_MINIMUM,
+                                         "ADVANCED", "1");
+    }
+  }
+
   auto DefineLambda = [](std::string const& entry, cmake* state) -> bool {
     std::string var;
     std::string value;

+ 1 - 0
Tests/EnforceConfig.cmake.in

@@ -36,6 +36,7 @@ unset(ENV{CMAKE_GENERATOR_INSTANCE})
 unset(ENV{CMAKE_GENERATOR_PLATFORM})
 unset(ENV{CMAKE_GENERATOR_TOOLSET})
 unset(ENV{CMAKE_EXPORT_COMPILE_COMMANDS})
+unset(ENV{CMAKE_POLICY_VERSION_MINIMUM})
 
 # Verify that our module implementations do not recurse too much.
 set(ENV{CMAKE_MAXIMUM_RECURSION_DEPTH} 100)

+ 4 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVar-stderr.txt

@@ -0,0 +1,4 @@
+^CMAKE_POLICY_VERSION_MINIMUM='3\.10'
+CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
+CMP0071='NEW'
+CMP0072=''$

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVar.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVar.cmake)

+ 0 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVariableBad-result.txt → Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBad-result.txt


+ 10 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBad-stderr.txt

@@ -0,0 +1,10 @@
+^CMake Error at CMakeLists\.txt:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
++
+CMake Error at PolicyVersionVarBad\.cmake:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
+Call Stack \(most recent call first\):
+  PolicyVersionEnvVarBad\.cmake:[0-9]+ \(include\)
+  CMakeLists\.txt:[0-9]+ \(include\)$

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBad.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVarBad.cmake)

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadCache-result.txt

@@ -0,0 +1 @@
+1

+ 9 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadCache-stderr.txt

@@ -0,0 +1,9 @@
+^CMake Error at PolicyVersionVarBad\.cmake:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
+Call Stack \(most recent call first\):
+  PolicyVersionEnvVarBad\.cmake:[0-9]+ \(include\)
++
+CMake Error at CMakeLists\.txt:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.$

+ 0 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadCache.cmake


+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadScript-result.txt

@@ -0,0 +1 @@
+1

+ 7 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadScript-stderr.txt

@@ -0,0 +1,7 @@
+^CMake Error at [^
+]*/PolicyVersionVarBad\.cmake:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
+Call Stack \(most recent call first\):
+  [^
+]*/PolicyVersionEnvVarBadScript\.cmake:[0-9]+ \(include\)$

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarBadScript.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVarBad.cmake)

+ 4 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarCache-stderr.txt

@@ -0,0 +1,4 @@
+^CMAKE_POLICY_VERSION_MINIMUM='3\.10'
+CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
+CMP0071='NEW'
+CMP0072=''$

+ 0 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarCache.cmake


+ 4 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarScript-stderr.txt

@@ -0,0 +1,4 @@
+^CMAKE_POLICY_VERSION_MINIMUM='3\.10'
+CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
+CMP0071='NEW'
+CMP0072=''$

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionEnvVarScript.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVar.cmake)

+ 4 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVar-stderr.txt

@@ -0,0 +1,4 @@
+^CMAKE_POLICY_VERSION_MINIMUM='3\.10'
+CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
+CMP0071='NEW'
+CMP0072=''$

+ 1 - 1
Tests/RunCMake/cmake_minimum_required/PolicyVersionVariable.cmake → Tests/RunCMake/cmake_minimum_required/PolicyVersionVar.cmake

@@ -1,4 +1,4 @@
-set(CMAKE_POLICY_VERSION_MINIMUM 3.10)
+message("CMAKE_POLICY_VERSION_MINIMUM='${CMAKE_POLICY_VERSION_MINIMUM}'")
 cmake_minimum_required(VERSION 3.1...3.4)
 message("CMAKE_MINIMUM_REQUIRED_VERSION='${CMAKE_MINIMUM_REQUIRED_VERSION}'")
 foreach(policy CMP0071 CMP0072)

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBad-result.txt

@@ -0,0 +1 @@
+1

+ 9 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBad-stderr.txt

@@ -0,0 +1,9 @@
+^CMake Error at CMakeLists\.txt:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
++
+CMake Error at PolicyVersionVarBad\.cmake:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:[0-9]+ \(include\)$

+ 0 - 1
Tests/RunCMake/cmake_minimum_required/PolicyVersionVariableBad.cmake → Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBad.cmake

@@ -1,2 +1 @@
-set(CMAKE_POLICY_VERSION_MINIMUM ...3.10)
 cmake_minimum_required(VERSION 3.1...3.4)

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadCache-result.txt

@@ -0,0 +1 @@
+1

+ 7 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadCache-stderr.txt

@@ -0,0 +1,7 @@
+^CMake Error at PolicyVersionVarBad\.cmake:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.
++
+CMake Error at CMakeLists\.txt:1 \(cmake_minimum_required\):
+  Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
+  major\.minor\[\.patch\[\.tweak\]\] must be given\.$

+ 0 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadCache.cmake


+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadScript-result.txt

@@ -0,0 +1 @@
+1

+ 4 - 2
Tests/RunCMake/cmake_minimum_required/PolicyVersionVariableBad-stderr.txt → Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadScript-stderr.txt

@@ -1,5 +1,7 @@
-^CMake Error at PolicyVersionVariableBad\.cmake:2 \(cmake_minimum_required\):
+^CMake Error at [^
+]*/PolicyVersionVarBad\.cmake:1 \(cmake_minimum_required\):
   Invalid CMAKE_POLICY_VERSION_MINIMUM value "\.\.\.3\.10"\.  A numeric
   major\.minor\[\.patch\[\.tweak\]\] must be given\.
 Call Stack \(most recent call first\):
-  CMakeLists\.txt:[0-9]+ \(include\)$
+  [^
+]*/PolicyVersionVarBadScript\.cmake:1 \(include\)$

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarBadScript.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVarBad.cmake)

+ 4 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarCache-stderr.txt

@@ -0,0 +1,4 @@
+^CMAKE_POLICY_VERSION_MINIMUM='3\.10'
+CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
+CMP0071='NEW'
+CMP0072=''$

+ 0 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarCache.cmake


+ 4 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarScript-stderr.txt

@@ -0,0 +1,4 @@
+^CMAKE_POLICY_VERSION_MINIMUM='3\.10'
+CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
+CMP0071='NEW'
+CMP0072=''$

+ 1 - 0
Tests/RunCMake/cmake_minimum_required/PolicyVersionVarScript.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVar.cmake)

+ 0 - 3
Tests/RunCMake/cmake_minimum_required/PolicyVersionVariable-stderr.txt

@@ -1,3 +0,0 @@
-^CMAKE_MINIMUM_REQUIRED_VERSION='3\.1'
-CMP0071='NEW'
-CMP0072=''$

+ 17 - 2
Tests/RunCMake/cmake_minimum_required/RunCMakeTest.cmake

@@ -7,5 +7,20 @@ run_cmake(BeforeVersionDeprecated)
 run_cmake(Range)
 run_cmake(RangeBad)
 run_cmake(Unknown)
-run_cmake(PolicyVersionVariable)
-run_cmake(PolicyVersionVariableBad)
+
+run_cmake_with_options(PolicyVersionVar -DCMAKE_POLICY_VERSION_MINIMUM=3.10)
+run_cmake_with_options(PolicyVersionVarCache -DCMAKE_POLICY_VERSION_MINIMUM=3.10 -C ${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVar.cmake)
+run_cmake_script(PolicyVersionVarScript -DCMAKE_POLICY_VERSION_MINIMUM=3.10)
+run_cmake_with_options(PolicyVersionVarBad -DCMAKE_POLICY_VERSION_MINIMUM=...3.10)
+run_cmake_with_options(PolicyVersionVarBadCache -DCMAKE_POLICY_VERSION_MINIMUM=...3.10 -C ${CMAKE_CURRENT_LIST_DIR}/PolicyVersionVarBad.cmake)
+run_cmake_script(PolicyVersionVarBadScript -DCMAKE_POLICY_VERSION_MINIMUM=...3.10)
+
+set(ENV{CMAKE_POLICY_VERSION_MINIMUM} 3.10)
+run_cmake(PolicyVersionEnvVar)
+run_cmake_with_options(PolicyVersionEnvVarCache -C ${CMAKE_CURRENT_LIST_DIR}/PolicyVersionEnvVar.cmake)
+run_cmake_script(PolicyVersionEnvVarScript)
+set(ENV{CMAKE_POLICY_VERSION_MINIMUM} ...3.10)
+run_cmake(PolicyVersionEnvVarBad)
+run_cmake_with_options(PolicyVersionEnvVarBadCache -C ${CMAKE_CURRENT_LIST_DIR}/PolicyVersionEnvVarBad.cmake)
+run_cmake_script(PolicyVersionEnvVarBadScript)
+unset(ENV{CMAKE_POLICY_VERSION_MINIMUM})