summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-12-03 16:02:31 (GMT)
committerBrad King <brad.king@kitware.com>2014-12-03 20:30:22 (GMT)
commit88eb5824da12940e78d57fe254f17f64cdacd659 (patch)
tree24d535cb4d88f076e69c9a85870aaaff3d1204e8 /Source
parenta4f9b6f0ca9248530b9749b7fa9628053a3f8f98 (diff)
downloadCMake-88eb5824da12940e78d57fe254f17f64cdacd659.zip
CMake-88eb5824da12940e78d57fe254f17f64cdacd659.tar.gz
CMake-88eb5824da12940e78d57fe254f17f64cdacd659.tar.bz2
try_compile: Pass linker flags into test project (#14066)
Copy CMAKE_EXE_LINKER_FLAGS into the test project generated by try_compile, just like we already copy CMAKE_<LANG>_FLAGS. Add CMake Policy CMP0056 to activate this behavior in a compatible way, but do not warn by default when the policy is not set since it will affect all try_compile calls. Extend the RunCMake.try_compile test with a case covering this behavior for each policy setting.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmCoreTryCompile.cxx34
-rw-r--r--Source/cmPolicies.cxx5
-rw-r--r--Source/cmPolicies.h1
3 files changed, 40 insertions, 0 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 3506323..0030b84 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -331,6 +331,40 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
fprintf(fout, "set(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}"
" ${COMPILE_DEFINITIONS}\")\n", li->c_str(), li->c_str());
}
+ switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0056))
+ {
+ case cmPolicies::WARN:
+ if(this->Makefile->PolicyOptionalWarningEnabled(
+ "CMAKE_POLICY_WARNING_CMP0056"))
+ {
+ cmOStringStream w;
+ w << (this->Makefile->GetCMakeInstance()->GetPolicies()
+ ->GetPolicyWarning(cmPolicies::CMP0056)) << "\n"
+ "For compatibility with older versions of CMake, try_compile "
+ "is not honoring caller link flags (e.g. CMAKE_EXE_LINKER_FLAGS) "
+ "in the test project."
+ ;
+ this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str());
+ }
+ case cmPolicies::OLD:
+ // OLD behavior is to do nothing.
+ break;
+ case cmPolicies::REQUIRED_IF_USED:
+ case cmPolicies::REQUIRED_ALWAYS:
+ this->Makefile->IssueMessage(
+ cmake::FATAL_ERROR,
+ this->Makefile->GetCMakeInstance()->GetPolicies()
+ ->GetRequiredPolicyError(cmPolicies::CMP0056)
+ );
+ case cmPolicies::NEW:
+ // NEW behavior is to pass linker flags.
+ {
+ const char* exeLinkFlags =
+ this->Makefile->GetDefinition("CMAKE_EXE_LINKER_FLAGS");
+ fprintf(fout, "set(CMAKE_EXE_LINKER_FLAGS %s)\n",
+ lg->EscapeForCMake(exeLinkFlags?exeLinkFlags:"").c_str());
+ } break;
+ }
fprintf(fout, "set(CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS}"
" ${EXE_LINKER_FLAGS}\")\n");
fprintf(fout, "include_directories(${INCLUDE_DIRECTORIES})\n");
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 64b87b7..1a27a25 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -369,6 +369,11 @@ cmPolicies::cmPolicies()
CMP0055, "CMP0055",
"Strict checking for break() command.",
3,2,0, cmPolicies::WARN);
+
+ this->DefinePolicy(
+ CMP0056, "CMP0056",
+ "Honor link flags in try_compile() source-file signature.",
+ 3,2,0, cmPolicies::WARN);
}
cmPolicies::~cmPolicies()
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 46ecc22..c393c2f 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -112,6 +112,7 @@ public:
CMP0054, ///< Only interpret if() arguments as variables
/// or keywords when unquoted.
CMP0055, ///< Strict checking for break() command.
+ CMP0056, ///< Honor link flags in try_compile() source-file signature.
/** \brief Always the last entry.
*