Browse Source

BUG: Patch from Alex to recompute dependencies when the include regex changes. This addresses bug#4168.

Brad King 19 years ago
parent
commit
6bba86c8c8
2 changed files with 43 additions and 2 deletions
  1. 40 2
      Source/cmDependsC.cxx
  2. 3 0
      Source/cmDependsC.h

+ 40 - 2
Source/cmDependsC.cxx

@@ -22,6 +22,13 @@
 
 #include <ctype.h> // isspace
 
+
+#define INCLUDE_REGEX_LINE "^[ \t]*#[ \t]*(include|import)[ \t]*[<\"]([^\">]+)([\">])"
+
+#define INCLUDE_REGEX_LINE_MARKER "#IncludeRegexLine: "
+#define INCLUDE_REGEX_SCAN_MARKER "#IncludeRegexScan: "
+#define INCLUDE_REGEX_COMPLAIN_MARKER "#IncludeRegexComplain: "
+
 //----------------------------------------------------------------------------
 cmDependsC::cmDependsC():
   IncludePath(0)
@@ -33,10 +40,12 @@ cmDependsC::cmDependsC(std::vector<std::string> const& includes,
                        const char* scanRegex, const char* complainRegex,
                        const cmStdString& cacheFileName):
   IncludePath(&includes),
-  IncludeRegexLine(
-    "^[ \t]*#[ \t]*(include|import)[ \t]*[<\"]([^\">]+)([\">])"),
+  IncludeRegexLine(INCLUDE_REGEX_LINE),
   IncludeRegexScan(scanRegex),
   IncludeRegexComplain(complainRegex),
+  IncludeRegexLineString(INCLUDE_REGEX_LINE_MARKER INCLUDE_REGEX_LINE),
+  IncludeRegexScanString(std::string(INCLUDE_REGEX_SCAN_MARKER)+scanRegex),
+  IncludeRegexComplainString(std::string(INCLUDE_REGEX_COMPLAIN_MARKER)+complainRegex),
   CacheFileName(cacheFileName)
 {
   this->ReadCacheFile();
@@ -281,6 +290,31 @@ void cmDependsC::ReadCacheFile()
         cacheEntry=new cmIncludeLines;
         this->FileCache[line]=cacheEntry;
         }
+      // file doesn't exist, check that the regular expressions haven't changed
+      else if (res==false)
+        {
+        if (line.find(INCLUDE_REGEX_LINE_MARKER) == 0)
+          {
+          if (line != this->IncludeRegexLineString)
+            {
+            return;
+            }
+          }
+        else if (line.find(INCLUDE_REGEX_SCAN_MARKER) == 0)
+          {
+          if (line != this->IncludeRegexScanString)
+            {
+            return;
+            }
+          }
+        else if (line.find(INCLUDE_REGEX_COMPLAIN_MARKER) == 0)
+          {
+          if (line != this->IncludeRegexComplainString)
+            {
+            return;
+            }
+          }
+        }
       }
     else if (cacheEntry!=0)
       {
@@ -311,6 +345,10 @@ void cmDependsC::WriteCacheFile() const
     return;
     }
   
+  cacheOut << this->IncludeRegexLineString << "\n\n";
+  cacheOut << this->IncludeRegexScanString << "\n\n";
+  cacheOut << this->IncludeRegexComplainString << "\n\n";
+
   for (std::map<cmStdString, cmIncludeLines*>::const_iterator fileIt=
          this->FileCache.begin();
        fileIt!=this->FileCache.end(); ++fileIt)

+ 3 - 0
Source/cmDependsC.h

@@ -60,6 +60,9 @@ protected:
   // recursively and which to complain about not finding.
   cmsys::RegularExpression IncludeRegexScan;
   cmsys::RegularExpression IncludeRegexComplain;
+  const std::string IncludeRegexLineString;
+  const std::string IncludeRegexScanString;
+  const std::string IncludeRegexComplainString;
 
 public:
   // Data structures for dependency graph walk.