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.
This commit is contained in:
parent
1a159bbf33
commit
73de2362dd
|
@ -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,
|
||||
|
@ -1360,6 +1358,20 @@ void cmGlobalGenerator::EnableLanguagesFromGenerator(cmGlobalGenerator *gen )
|
|||
this->OutputExtensions = gen->OutputExtensions;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
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
|
||||
{
|
||||
|
|
|
@ -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;}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue