Browse Source

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
pull/351/head
Brad King 3 years ago
parent
commit
a6562ff579
  1. 4
      Help/command/try_compile.rst
  2. 1
      Help/manual/cmake-variables.7.rst
  3. 4
      Help/policy/CMP0137.rst
  4. 4
      Help/release/dev/try_compile-project-platform-vars.rst
  5. 10
      Help/variable/CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES.rst
  6. 4
      Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst
  7. 7
      Source/cmCoreTryCompile.cxx
  8. 8
      Tests/RunCMake/try_compile/CMP0137-Common.cmake
  9. 3
      Tests/RunCMake/try_compile/CMP0137-NEW-stdout.txt
  10. 3
      Tests/RunCMake/try_compile/CMP0137-WARN-stdout.txt

4
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
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
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
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
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
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.

7
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
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
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
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=''
Loading…
Cancel
Save