ソースを参照

try_compile: Add option to skip passing platform variables

Add a `CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` variable to tell
`try_compile` not to pass platform variables to the test project.

Issue: #23219
Brad King 3 年 前
コミット
a6562ff579

+ 4 - 0
Help/command/try_compile.rst

@@ -216,3 +216,7 @@ a build configuration.
 .. versionchanged:: 3.14
   For the :generator:`Green Hills MULTI` generator the GHS toolset and target
   system customization cache variables are also propagated into the test project.
+
+.. versionadded:: 3.24
+  The :variable:`CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` variable may be
+  set to disable passing platform variables into the test project.

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

@@ -502,6 +502,7 @@ Variables that Control the Build
    /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT
    /variable/CMAKE_STATIC_LINKER_FLAGS_INIT
    /variable/CMAKE_TRY_COMPILE_CONFIGURATION
+   /variable/CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES
    /variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
    /variable/CMAKE_TRY_COMPILE_TARGET_TYPE
    /variable/CMAKE_UNITY_BUILD

+ 4 - 0
Help/policy/CMP0137.rst

@@ -21,6 +21,10 @@ the :ref:`whole-project <Try Compiling Whole Projects>` signature.
 The ``NEW`` behavior for this policy is to pass the same variables that the
 :ref:`source file <Try Compiling Source Files>` signature does.
 
+Regardless of the policy setting, the
+:variable:`CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` variable may be set
+to suppress passing the platform variables through either signature.
+
 This policy was introduced in CMake version 3.24.  Use the
 :command:`cmake_policy` command to set this policy to ``OLD`` or ``NEW``
 explicitly. Unlike many policies, CMake version |release| does *not* warn

+ 4 - 0
Help/release/dev/try_compile-project-platform-vars.rst

@@ -4,3 +4,7 @@ try_compile-project-platform-vars
 * The :command:`try_compile` command
   :ref:`whole-project <Try Compiling Whole Projects>` signature
   now propagates platform variables.  See policy :policy:`CMP0137`.
+
+* The :variable:`CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` variable
+  was added to tell the :command:`try_compile` command not to
+  pass any platform variables to the test project.

+ 10 - 0
Help/variable/CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES.rst

@@ -0,0 +1,10 @@
+CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES
+---------------------------------------
+
+Set to a true value to tell the :command:`try_compile` command not
+to propagate any platform variables into the test project.
+
+The :command:`try_compile` command normally passes some CMake variables
+that configure the platform and toolchain behavior into test projects.
+See policy :policy:`CMP0137`.  This variable may be set to disable
+that behavior.

+ 4 - 0
Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst

@@ -31,3 +31,7 @@ command source file signature.
   Listed variables are propagated to the :command:`try_compile`
   :ref:`whole-project <Try Compiling Whole Projects>` signature too.
   See :policy:`CMP0137`.
+
+.. versionadded:: 3.24
+  The :variable:`CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` variable may be
+  set to disable passing platform variables into the test project.

+ 4 - 3
Source/cmCoreTryCompile.cxx

@@ -872,9 +872,10 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
   }
 
   // Forward a set of variables to the inner project cache.
-  if (this->SrcFileSignature ||
-      this->Makefile->GetPolicyStatus(cmPolicies::CMP0137) ==
-        cmPolicies::NEW) {
+  if ((this->SrcFileSignature ||
+       this->Makefile->GetPolicyStatus(cmPolicies::CMP0137) ==
+         cmPolicies::NEW) &&
+      !this->Makefile->IsOn("CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES")) {
     std::set<std::string> vars;
     vars.insert(&c_properties[lang_property_start],
                 &c_properties[lang_property_start + lang_property_size]);

+ 8 - 0
Tests/RunCMake/try_compile/CMP0137-Common.cmake

@@ -6,3 +6,11 @@ try_compile(RESULT_VAR
   ${CMAKE_CURRENT_SOURCE_DIR}/CMP0137
   TestCMP0137)
 include(${CMAKE_CURRENT_BINARY_DIR}/CMP0137-build/info.cmake OPTIONAL)
+
+message(STATUS "Enabling CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES")
+set(CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES 1)
+try_compile(RESULT_VAR
+  ${CMAKE_CURRENT_BINARY_DIR}/CMP0137-build2
+  ${CMAKE_CURRENT_SOURCE_DIR}/CMP0137
+  TestCMP0137)
+include(${CMAKE_CURRENT_BINARY_DIR}/CMP0137-build2/info.cmake OPTIONAL)

+ 3 - 0
Tests/RunCMake/try_compile/CMP0137-NEW-stdout.txt

@@ -1,2 +1,5 @@
 -- CMAKE_ENABLE_EXPORTS='1'
 -- FOO='2'
+-- Enabling CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES
+-- CMAKE_ENABLE_EXPORTS=''
+-- FOO=''

+ 3 - 0
Tests/RunCMake/try_compile/CMP0137-WARN-stdout.txt

@@ -1,2 +1,5 @@
 -- CMAKE_ENABLE_EXPORTS=''
 -- FOO=''
+-- Enabling CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES
+-- CMAKE_ENABLE_EXPORTS=''
+-- FOO=''