enable_language: Initialize system-specific generator info only once

Call SetSystemName, SetGeneratorPlatform, and SetGeneratorToolset
exactly once after reading CMakeSystem.cmake, and not again on another
call to enable_language() or project().
This commit is contained in:
Brad King 2014-09-09 15:01:51 -04:00
parent 09ab207c66
commit 09c8ad9943
1 changed files with 24 additions and 20 deletions

View File

@ -438,7 +438,8 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
// try and load the CMakeSystem.cmake if it is there
std::string fpath = rootBin;
if(!mf->GetDefinition("CMAKE_SYSTEM_LOADED"))
bool const readCMakeSystem = !mf->GetDefinition("CMAKE_SYSTEM_LOADED");
if(readCMakeSystem)
{
fpath += "/CMakeSystem.cmake";
if(cmSystemTools::FileExists(fpath.c_str()))
@ -472,28 +473,31 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
mf->ReadListFile(0,fpath.c_str());
}
// Tell the generator about the target system.
std::string system = mf->GetSafeDefinition("CMAKE_SYSTEM_NAME");
if(!this->SetSystemName(system, mf))
if(readCMakeSystem)
{
cmSystemTools::SetFatalErrorOccured();
return;
}
// Tell the generator about the target system.
std::string system = mf->GetSafeDefinition("CMAKE_SYSTEM_NAME");
if(!this->SetSystemName(system, mf))
{
cmSystemTools::SetFatalErrorOccured();
return;
}
// Tell the generator about the platform, if any.
std::string platform = mf->GetSafeDefinition("CMAKE_GENERATOR_PLATFORM");
if(!this->SetGeneratorPlatform(platform, mf))
{
cmSystemTools::SetFatalErrorOccured();
return;
}
// Tell the generator about the platform, if any.
std::string platform = mf->GetSafeDefinition("CMAKE_GENERATOR_PLATFORM");
if(!this->SetGeneratorPlatform(platform, mf))
{
cmSystemTools::SetFatalErrorOccured();
return;
}
// Tell the generator about the toolset, if any.
std::string toolset = mf->GetSafeDefinition("CMAKE_GENERATOR_TOOLSET");
if(!this->SetGeneratorToolset(toolset, mf))
{
cmSystemTools::SetFatalErrorOccured();
return;
// Tell the generator about the toolset, if any.
std::string toolset = mf->GetSafeDefinition("CMAKE_GENERATOR_TOOLSET");
if(!this->SetGeneratorToolset(toolset, mf))
{
cmSystemTools::SetFatalErrorOccured();
return;
}
}
// **** Load the system specific initialization if not yet loaded