diff options
author | Brad King <brad.king@kitware.com> | 2009-08-03 17:37:36 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-08-03 17:37:36 (GMT) |
commit | 73de2362ddfcef151709e2162c0e384623da8890 (patch) | |
tree | 99c6a15307d8be45792c194ab8cbab0ea3585936 | |
parent | 1a159bbf331104fe680d3f37b703916a910a69f9 (diff) | |
download | CMake-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.cxx | 18 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.h | 2 | ||||
-rw-r--r-- | Tests/TryCompile/Inner/CMakeLists.txt | 9 |
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) |