diff --git a/Help/policy/CMP0181.rst b/Help/policy/CMP0181.rst index 88c05276f8..ca4bf3994d 100644 --- a/Help/policy/CMP0181.rst +++ b/Help/policy/CMP0181.rst @@ -38,4 +38,8 @@ expand the ``LINKER:`` prefix. .. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn .. include:: include/STANDARD_ADVICE.rst +.. versionchanged:: 4.5 + The policy is now set in :command:`try_compile` test projects early enough + to be queried by :variable:`toolchain files `. + .. include:: include/DEPRECATED.rst diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index b240c2907f..5a4d8dc353 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -687,6 +687,12 @@ cm::optional cmCoreTryCompile::TryCompileCode( fprintf(fout, "cmake_policy(SET CMP0128 OLD)\n"); } + // Set LINKER: prefix expansion to match outer project. + if (this->Makefile->GetPolicyStatus(cmPolicies::CMP0181) != + cmPolicies::NEW) { + fprintf(fout, "cmake_policy(SET CMP0181 OLD)\n"); + } + /* Set MSVC link -machine: policy to match outer project. */ if (cmValue cmp0197 = this->Makefile->GetDefinition(kCMAKE_MSVC_CMP0197)) { fprintf(fout, "cmake_policy(SET CMP0197 %s)\n", @@ -907,15 +913,6 @@ cm::optional cmCoreTryCompile::TryCompileCode( ? "OLD" : "NEW"); - /* Set the appropriate policy information for the LINKER: prefix - * expansion - */ - fprintf(fout, "cmake_policy(SET CMP0181 %s)\n", - this->Makefile->GetPolicyStatus(cmPolicies::CMP0181) == - cmPolicies::NEW - ? "NEW" - : "OLD"); - // Honor CMAKE_EXE_LINKER_FLAGS in Swift if the outer project does. fprintf(fout, "cmake_policy(SET CMP0214 %s)\n", this->Makefile->GetPolicyStatus(cmPolicies::CMP0214) == diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-NEW-stderr.txt b/Tests/RunCMake/ToolchainFile/CMP0181-NEW-stderr.txt new file mode 100644 index 0000000000..07eee30398 --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-NEW-stderr.txt @@ -0,0 +1 @@ +^try_compile CMP0181='NEW' diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-NEW-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-NEW-toolchain.cmake new file mode 100644 index 0000000000..33b4d12dae --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-NEW-toolchain.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/CMP0181-toolchain.cmake") diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-NEW.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-NEW.cmake new file mode 100644 index 0000000000..3bf3d644c1 --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-NEW.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0181 NEW) +enable_language(C) diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-OLD-stderr.txt b/Tests/RunCMake/ToolchainFile/CMP0181-OLD-stderr.txt new file mode 100644 index 0000000000..08a79ec8e0 --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-OLD-stderr.txt @@ -0,0 +1 @@ +^try_compile CMP0181='OLD' diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-OLD-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-OLD-toolchain.cmake new file mode 100644 index 0000000000..33b4d12dae --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-OLD-toolchain.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/CMP0181-toolchain.cmake") diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-OLD.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-OLD.cmake new file mode 100644 index 0000000000..797a336922 --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-OLD.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0181 OLD) +enable_language(C) diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-WARN-stderr.txt b/Tests/RunCMake/ToolchainFile/CMP0181-WARN-stderr.txt new file mode 100644 index 0000000000..08a79ec8e0 --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-WARN-stderr.txt @@ -0,0 +1 @@ +^try_compile CMP0181='OLD' diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-WARN-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-WARN-toolchain.cmake new file mode 100644 index 0000000000..33b4d12dae --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-WARN-toolchain.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/CMP0181-toolchain.cmake") diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-WARN.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-WARN.cmake new file mode 100644 index 0000000000..304697b46c --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-WARN.cmake @@ -0,0 +1,2 @@ +# leave CMP0181 unset +enable_language(C) diff --git a/Tests/RunCMake/ToolchainFile/CMP0181-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0181-toolchain.cmake new file mode 100644 index 0000000000..3b6d28be28 --- /dev/null +++ b/Tests/RunCMake/ToolchainFile/CMP0181-toolchain.cmake @@ -0,0 +1,5 @@ +get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE) +if(_IN_TC) + cmake_policy(GET CMP0181 cmp0181) + message("try_compile CMP0181='${cmp0181}'") +endif() diff --git a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake index 6320cd127e..c200e4f332 100644 --- a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake +++ b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake @@ -14,6 +14,9 @@ run_cmake_toolchain(LinkFlagsInit) run_cmake_toolchain(CMP0126-NEW) run_cmake_toolchain(CMP0126-OLD) run_cmake_toolchain(CMP0126-WARN) +run_cmake_toolchain(CMP0181-NEW) +run_cmake_toolchain(CMP0181-OLD) +run_cmake_toolchain(CMP0181-WARN) run_cmake_toolchain(CMP0210-NEW) run_cmake_toolchain(CMP0210-OLD) run_cmake_toolchain(CMP0210-WARN)