Browse Source

BUG: Only use the existing CMake(lang)Compiler.cmake file from the build tree if it was generated by the same version of CMake.

Brad King 21 years ago
parent
commit
2e451961b6
1 changed files with 23 additions and 13 deletions
  1. 23 13
      Source/cmGlobalGenerator.cxx

+ 23 - 13
Source/cmGlobalGenerator.cxx

@@ -207,23 +207,33 @@ void cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
                              "broken CMakeLists.txt file or a problematic release of "
                              "CMake");
         }
-      // try and load the configured file first
-      std::string loadedLang = "CMAKE_";
-      loadedLang +=  lang;
-      loadedLang += "_COMPILER_LOADED";
-      if(!mf->GetDefinition(loadedLang.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 = cmMakefile::GetMajorVersion();
+      unsigned int selfMinor = cmMakefile::GetMinorVersion();
+      if(selfMajor == cacheMajor && selfMinor == cacheMinor)
         {
-        fpath = rootBin;
-        fpath += "/CMake";
-        fpath += lang;
-        fpath += "Compiler.cmake";
-        if(cmSystemTools::FileExists(fpath.c_str()))
+        std::string loadedLang = "CMAKE_";
+        loadedLang +=  lang;
+        loadedLang += "_COMPILER_LOADED";
+        if(!mf->GetDefinition(loadedLang.c_str()))
           {
-          if(!mf->ReadListFile(0,fpath.c_str()))
+          fpath = rootBin;
+          fpath += "/CMake";
+          fpath += lang;
+          fpath += "Compiler.cmake";
+          if(cmSystemTools::FileExists(fpath.c_str()))
             {
-            cmSystemTools::Error("Could not find cmake module file:", fpath.c_str());
+            if(!mf->ReadListFile(0,fpath.c_str()))
+              {
+              cmSystemTools::Error("Could not find cmake module file:", fpath.c_str());
+              }
+            this->SetLanguageEnabled(lang, mf);
             }
-          this->SetLanguageEnabled(lang, mf);
           }
         }