Cleanly enable a language in multiple subdirectories
When a language is not enabled at the top level of a project but is enabled in multiple disjoint subdirectories we should re-use the CMake<lang>Compiler.cmake file from the first directory. Load the file whenever it exists and is not left from a different version of CMake.
This commit is contained in:
parent
66cb3356f5
commit
ec22a9b521
|
@ -376,22 +376,24 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
|
||||||
std::string loadedLang = "CMAKE_";
|
std::string loadedLang = "CMAKE_";
|
||||||
loadedLang += lang;
|
loadedLang += lang;
|
||||||
loadedLang += "_COMPILER_LOADED";
|
loadedLang += "_COMPILER_LOADED";
|
||||||
// If the existing build tree was already configured with this
|
if(!mf->GetDefinition(loadedLang.c_str()))
|
||||||
// version of CMake then try to load the configured file first
|
|
||||||
// to avoid duplicate compiler tests.
|
|
||||||
unsigned int cacheMajor = mf->GetCacheMajorVersion();
|
|
||||||
unsigned int cacheMinor = mf->GetCacheMinorVersion();
|
|
||||||
unsigned int selfMajor = cmVersion::GetMajorVersion();
|
|
||||||
unsigned int selfMinor = cmVersion::GetMinorVersion();
|
|
||||||
if((this->CMakeInstance->GetIsInTryCompile() ||
|
|
||||||
(selfMajor == cacheMajor && selfMinor == cacheMinor))
|
|
||||||
&& !mf->GetDefinition(loadedLang.c_str()))
|
|
||||||
{
|
{
|
||||||
fpath = rootBin;
|
fpath = rootBin;
|
||||||
fpath += "/CMake";
|
fpath += "/CMake";
|
||||||
fpath += lang;
|
fpath += lang;
|
||||||
fpath += "Compiler.cmake";
|
fpath += "Compiler.cmake";
|
||||||
if(cmSystemTools::FileExists(fpath.c_str()))
|
|
||||||
|
// If the existing build tree was already configured with this
|
||||||
|
// version of CMake then try to load the configured file first
|
||||||
|
// to avoid duplicate compiler tests.
|
||||||
|
unsigned int cacheMajor = mf->GetCacheMajorVersion();
|
||||||
|
unsigned int cacheMinor = mf->GetCacheMinorVersion();
|
||||||
|
unsigned int selfMajor = cmVersion::GetMajorVersion();
|
||||||
|
unsigned int selfMinor = cmVersion::GetMinorVersion();
|
||||||
|
if((this->CMakeInstance->GetIsInTryCompile() ||
|
||||||
|
(cacheMajor == 0 && cacheMinor == 0) ||
|
||||||
|
(selfMajor == cacheMajor && selfMinor == cacheMinor)) &&
|
||||||
|
cmSystemTools::FileExists(fpath.c_str()))
|
||||||
{
|
{
|
||||||
if(!mf->ReadListFile(0,fpath.c_str()))
|
if(!mf->ReadListFile(0,fpath.c_str()))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue