From 6bba86c8c8ba6f58c0fd650d0b65d4ed4cf1d727 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 5 Feb 2007 09:48:38 -0500 Subject: [PATCH] BUG: Patch from Alex to recompute dependencies when the include regex changes. This addresses bug#4168. --- Source/cmDependsC.cxx | 42 ++++++++++++++++++++++++++++++++++++++++-- Source/cmDependsC.h | 3 +++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx index ff0545f4e..566dc818f 100644 --- a/Source/cmDependsC.cxx +++ b/Source/cmDependsC.cxx @@ -22,6 +22,13 @@ #include // 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 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::const_iterator fileIt= this->FileCache.begin(); fileIt!=this->FileCache.end(); ++fileIt) diff --git a/Source/cmDependsC.h b/Source/cmDependsC.h index a89146027..ce02aff2c 100644 --- a/Source/cmDependsC.h +++ b/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.