From 73de2362ddfcef151709e2162c0e384623da8890 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 3 Aug 2009 13:37:36 -0400 Subject: 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. --- Source/cmGlobalGenerator.cxx | 18 +++++++++++++++--- Source/cmGlobalGenerator.h | 2 +- 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& 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) -- cgit v0.12