summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-08-03 17:37:36 (GMT)
committerBrad King <brad.king@kitware.com>2009-08-03 17:37:36 (GMT)
commit73de2362ddfcef151709e2162c0e384623da8890 (patch)
tree99c6a15307d8be45792c194ab8cbab0ea3585936
parent1a159bbf331104fe680d3f37b703916a910a69f9 (diff)
downloadCMake-73de2362ddfcef151709e2162c0e384623da8890.zip
CMake-73de2362ddfcef151709e2162c0e384623da8890.tar.gz
CMake-73de2362ddfcef151709e2162c0e384623da8890.tar.bz2
Fix recursive try_compile calls
When building an entire source tree with try_compile instead of just a single source file, it is possible that the CMakeLists.txt file in the try-compiled project invokes try_compile. This commit fixes propagation of language-initialization results from the outer-most project into any number of try-compile levels.
-rw-r--r--Source/cmGlobalGenerator.cxx18
-rw-r--r--Source/cmGlobalGenerator.h2
-rw-r--r--Tests/TryCompile/Inner/CMakeLists.txt9
3 files changed, 25 insertions, 4 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index a8455db..a798200 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1343,9 +1343,7 @@ cmLocalGenerator *cmGlobalGenerator::CreateLocalGenerator()
void cmGlobalGenerator::EnableLanguagesFromGenerator(cmGlobalGenerator *gen )
{
- std::string cfp = gen->GetCMakeInstance()->GetHomeOutputDirectory();
- cfp += cmake::GetCMakeFilesDirectory();
- this->SetConfiguredFilesPath(cfp.c_str());
+ this->SetConfiguredFilesPath(gen);
const char* make =
gen->GetCMakeInstance()->GetCacheDefinition("CMAKE_MAKE_PROGRAM");
this->GetCMakeInstance()->AddCacheEntry("CMAKE_MAKE_PROGRAM", make,
@@ -1361,6 +1359,20 @@ void cmGlobalGenerator::EnableLanguagesFromGenerator(cmGlobalGenerator *gen )
}
//----------------------------------------------------------------------------
+void cmGlobalGenerator::SetConfiguredFilesPath(cmGlobalGenerator* gen)
+{
+ if(!gen->ConfiguredFilesPath.empty())
+ {
+ this->ConfiguredFilesPath = gen->ConfiguredFilesPath;
+ }
+ else
+ {
+ this->ConfiguredFilesPath = gen->CMakeInstance->GetHomeOutputDirectory();
+ this->ConfiguredFilesPath += cmake::GetCMakeFilesDirectory();
+ }
+}
+
+//----------------------------------------------------------------------------
void cmGlobalGenerator::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 914e1da..4b60778 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -123,7 +123,7 @@ public:
///! Get the CMake instance
cmake *GetCMakeInstance() { return this->CMakeInstance; };
- void SetConfiguredFilesPath(const char* s){this->ConfiguredFilesPath = s;}
+ void SetConfiguredFilesPath(cmGlobalGenerator* gen);
const std::vector<cmLocalGenerator *>& GetLocalGenerators() const {
return this->LocalGenerators;}
diff --git a/Tests/TryCompile/Inner/CMakeLists.txt b/Tests/TryCompile/Inner/CMakeLists.txt
index b604426..41b94ae 100644
--- a/Tests/TryCompile/Inner/CMakeLists.txt
+++ b/Tests/TryCompile/Inner/CMakeLists.txt
@@ -1,4 +1,13 @@
cmake_minimum_required(VERSION 2.6)
project(TryCompileInner C)
+try_compile(SHOULD_PASS
+ ${TryCompileInner_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
+ ${TryCompileInner_SOURCE_DIR}/../pass.c
+ OUTPUT_VARIABLE TRY_OUT
+ )
+if(NOT SHOULD_PASS)
+ message(FATAL_ERROR "Inner try-compile SHOULD_PASS failed!")
+endif()
+
add_executable(inner ../pass.c)