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