summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-04-13 13:58:18 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-04-13 13:58:18 (GMT)
commiteae4cee0b54502c87fdb219b200a048082e0cb79 (patch)
tree06f18f746521328f03af46b36eff87596d285947
parent6f2cc120f091c1c8461650db4fe7729424d33bea (diff)
parentbd581a373373ee9807fcab35dd3e83334b73174b (diff)
downloadCMake-eae4cee0b54502c87fdb219b200a048082e0cb79.zip
CMake-eae4cee0b54502c87fdb219b200a048082e0cb79.tar.gz
CMake-eae4cee0b54502c87fdb219b200a048082e0cb79.tar.bz2
Merge topic 'try_compile-config-flags'
bd581a37 try_compile: Honor CMAKE_<LANG>_FLAGS_<CONFIG> changes (#16054) 82ef90fc cmCoreTryCompile: Factor out config lookup for re-use
-rw-r--r--Help/release/dev/try_compile-config-flags.rst7
-rw-r--r--Source/cmCoreTryCompile.cxx13
-rw-r--r--Tests/RunCMake/try_compile/CompileFlags.cmake17
-rw-r--r--Tests/RunCMake/try_compile/RunCMakeTest.cmake1
-rw-r--r--Tests/RunCMake/try_compile/src.c3
5 files changed, 39 insertions, 2 deletions
diff --git a/Help/release/dev/try_compile-config-flags.rst b/Help/release/dev/try_compile-config-flags.rst
new file mode 100644
index 0000000..7e5e461
--- /dev/null
+++ b/Help/release/dev/try_compile-config-flags.rst
@@ -0,0 +1,7 @@
+try_compile-config-flags
+------------------------
+
+* The :command:`try_compile` command source file signature now honors
+ configuration-specific flags (e.g. :variable:`CMAKE_<LANG>_FLAGS_DEBUG`)
+ in the generated test project. Previously only the default such flags
+ for the current toolchain were used.
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index b639c15..cfd31b2 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -294,6 +294,9 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
}
}
+ std::string const tcConfig =
+ this->Makefile->GetSafeDefinition("CMAKE_TRY_COMPILE_CONFIGURATION");
+
// we need to create a directory and CMakeLists file etc...
// first create the directories
sourceDirectory = this->BinaryDirectory.c_str();
@@ -350,6 +353,13 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
cmOutputConverter::EscapeForCMake(flags?flags:"").c_str());
fprintf(fout, "set(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}"
" ${COMPILE_DEFINITIONS}\")\n", li->c_str(), li->c_str());
+ static std::string const cfgDefault = "DEBUG";
+ std::string const cfg = !tcConfig.empty()?
+ cmSystemTools::UpperCase(tcConfig) : cfgDefault;
+ std::string const langFlagsCfg = "CMAKE_" + *li + "_FLAGS_" + cfg;
+ const char* flagsCfg = this->Makefile->GetDefinition(langFlagsCfg);
+ fprintf(fout, "set(%s %s)\n", langFlagsCfg.c_str(),
+ cmOutputConverter::EscapeForCMake(flagsCfg?flagsCfg:"").c_str());
}
switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0056))
{
@@ -406,8 +416,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
std::string fname = "/" + std::string(targetName) + "Targets.cmake";
cmExportTryCompileFileGenerator tcfg(gg, targets, this->Makefile);
tcfg.SetExportFile((this->BinaryDirectory + fname).c_str());
- tcfg.SetConfig(this->Makefile->GetSafeDefinition(
- "CMAKE_TRY_COMPILE_CONFIGURATION"));
+ tcfg.SetConfig(tcConfig);
if(!tcfg.GenerateImportFile())
{
diff --git a/Tests/RunCMake/try_compile/CompileFlags.cmake b/Tests/RunCMake/try_compile/CompileFlags.cmake
new file mode 100644
index 0000000..d4dc074
--- /dev/null
+++ b/Tests/RunCMake/try_compile/CompileFlags.cmake
@@ -0,0 +1,17 @@
+enable_language(C)
+set(CMAKE_C_FLAGS_RELEASE "-DPP_ERROR ${CMAKE_C_FLAGS_DEBUG}")
+
+#-----------------------------------------------------------------------------
+set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
+try_compile(RESULT ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/src.c
+ OUTPUT_VARIABLE out
+ )
+string(REPLACE "\n" "\n " out " ${out}")
+if(RESULT)
+ message(FATAL_ERROR "try_compile passed but should have failed:\n${out}")
+elseif(NOT "x${out}" MATCHES "PP_ERROR is defined")
+ message(FATAL_ERROR "try_compile did not fail with PP_ERROR:\n${out}")
+else()
+ message(STATUS "try_compile with per-config flag worked as expected")
+endif()
diff --git a/Tests/RunCMake/try_compile/RunCMakeTest.cmake b/Tests/RunCMake/try_compile/RunCMakeTest.cmake
index 43ce998..4b1d92a 100644
--- a/Tests/RunCMake/try_compile/RunCMakeTest.cmake
+++ b/Tests/RunCMake/try_compile/RunCMakeTest.cmake
@@ -21,6 +21,7 @@ run_cmake(TargetTypeInvalid)
run_cmake(TargetTypeStatic)
run_cmake(CMP0056)
+run_cmake(CompileFlags)
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
# Use a single build tree for a few tests without cleaning.
diff --git a/Tests/RunCMake/try_compile/src.c b/Tests/RunCMake/try_compile/src.c
index 78f2de1..ab83eb6 100644
--- a/Tests/RunCMake/try_compile/src.c
+++ b/Tests/RunCMake/try_compile/src.c
@@ -1 +1,4 @@
int main(void) { return 0; }
+#ifdef PP_ERROR
+# error PP_ERROR is defined
+#endif