summaryrefslogtreecommitdiffstats
path: root/Source/cmDependsC.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2007-02-05 14:48:38 (GMT)
committerBrad King <brad.king@kitware.com>2007-02-05 14:48:38 (GMT)
commit6bba86c8c8ba6f58c0fd650d0b65d4ed4cf1d727 (patch)
treee975f86f72be360f0fadfa80b92a1b3fb1f73672 /Source/cmDependsC.cxx
parent9e61ee2bedb78fd230af490a617a5794c30213f4 (diff)
downloadCMake-6bba86c8c8ba6f58c0fd650d0b65d4ed4cf1d727.zip
CMake-6bba86c8c8ba6f58c0fd650d0b65d4ed4cf1d727.tar.gz
CMake-6bba86c8c8ba6f58c0fd650d0b65d4ed4cf1d727.tar.bz2
BUG: Patch from Alex to recompute dependencies when the include regex changes. This addresses bug#4168.
Diffstat (limited to 'Source/cmDependsC.cxx')
-rw-r--r--Source/cmDependsC.cxx42
1 files changed, 40 insertions, 2 deletions
diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx
index ff0545f..566dc81 100644
--- a/Source/cmDependsC.cxx
+++ b/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)