Explorar o código

ENH: force a global generate if the cache version does not match the running cmake

Bill Hoffman %!s(int64=23) %!d(string=hai) anos
pai
achega
7b54b22ccd
Modificáronse 2 ficheiros con 23 adicións e 3 borrados
  1. 4 0
      Source/cmCacheManager.cxx
  2. 19 3
      Source/cmGlobalUnixMakefileGenerator.cxx

+ 4 - 0
Source/cmCacheManager.cxx

@@ -279,6 +279,10 @@ bool cmCacheManager::SaveCache(const char* path)
                       "Major version of cmake used to create the "
                       "current loaded cache", cmCacheManager::INTERNAL);
 
+  this->AddCacheEntry("CMAKE_CACHE_RELEASE_VERSION", cmMakefile::GetReleaseVersion(),
+                      "Major version of cmake used to create the "
+                      "current loaded cache", cmCacheManager::INTERNAL);
+
   // Let us store the current working directory so that if somebody
   // Copies it, he will not be surprised
   std::string currentcwd = path;

+ 19 - 3
Source/cmGlobalUnixMakefileGenerator.cxx

@@ -23,6 +23,22 @@
 void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang, 
                                                    cmMakefile *mf)
 {
+  bool isLocal = m_CMakeInstance->GetLocal();
+  const char* majv = mf->GetDefinition("CMAKE_CACHE_MAJOR_VERSION");
+  const char* minv = mf->GetDefinition("CMAKE_CACHE_MINOR_VERSION");
+  const char* relv = mf->GetDefinition("CMAKE_CACHE_RELEASE_VERSION");
+  bool cacheSameCMake = false;
+  if(majv && atoi(majv) == cmMakefile::GetMajorVersion()
+     && minv && atoi(minv) == cmMakefile::GetMinorVersion()
+     && relv && (strcmp(relv, cmMakefile::GetReleaseVersion()) == 0))
+    {
+    cacheSameCMake = true;
+    }
+  if(!cacheSameCMake)
+    {
+    isLocal = false;
+    }
+
   // if no lang specified use CXX
   if(!lang )
     {
@@ -39,7 +55,7 @@ void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang,
   bool needCXXBackwards = false;
   
   // check for a C compiler and configure it
-  if(!m_CMakeInstance->GetLocal() &&
+  if(!isLocal &&
      !this->GetLanguageEnabled("C") && 
      lang[0] == 'C')
     {
@@ -63,7 +79,7 @@ void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang,
     } 
   
   // check for a CXX compiler and configure it
-  if(!m_CMakeInstance->GetLocal() &&
+  if(!isLocal &&
      !this->GetLanguageEnabled("CXX") &&
      strcmp(lang, "CXX") == 0)
     {
@@ -101,7 +117,7 @@ void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang,
     mf->ReadListFile(0,fpath.c_str());
     }
   
-  if(!m_CMakeInstance->GetLocal())
+  if(!isLocal)
     {
     // At this point we should have enough info for a try compile
     // which is used in the backward stuff