diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 1cbd423e4..bd26b5fca 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -2068,20 +2068,27 @@ void cmGlobalGenerator::CheckRuleHashes() std::string pfile = home; pfile += this->GetCMakeInstance()->GetCMakeFilesDirectory(); pfile += "/CMakeRuleHashes.txt"; + this->CheckRuleHashes(pfile, home); + this->WriteRuleHashes(pfile); +#endif +} +//---------------------------------------------------------------------------- +void cmGlobalGenerator::CheckRuleHashes(std::string const& pfile, + std::string const& home) +{ #if defined(_WIN32) || defined(__CYGWIN__) std::ifstream fin(pfile.c_str(), std::ios::in | std::ios::binary); #else std::ifstream fin(pfile.c_str(), std::ios::in); #endif - bool goodStream = true; if(!fin) { - goodStream = false; + return; } std::string line; std::string fname; - while(goodStream && cmSystemTools::GetLineFromStream(fin, line)) + while(cmSystemTools::GetLineFromStream(fin, line)) { // Line format is a 32-byte hex string followed by a space // followed by a file name (with no escaping). @@ -2127,7 +2134,11 @@ void cmGlobalGenerator::CheckRuleHashes() } } } +} +//---------------------------------------------------------------------------- +void cmGlobalGenerator::WriteRuleHashes(std::string const& pfile) +{ // Now generate a new persistence file with the current hashes. if(this->RuleHashes.empty()) { @@ -2144,7 +2155,6 @@ void cmGlobalGenerator::CheckRuleHashes() fout << " " << rhi->first << "\n"; } } -#endif } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index b7b4324be..878be1143 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -335,6 +335,8 @@ private: struct RuleHash { char Data[32]; }; std::map RuleHashes; void CheckRuleHashes(); + void CheckRuleHashes(std::string const& pfile, std::string const& home); + void WriteRuleHashes(std::string const& pfile); void WriteSummary(); void WriteSummary(cmTarget* target);