diff options
author | Brad King <brad.king@kitware.com> | 2008-06-03 13:55:28 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-06-03 13:55:28 (GMT) |
commit | e79b73d61f7523cf6ce4d989995ede808da212df (patch) | |
tree | 8bdccfa15bb84fe1e000ddc0915dc4dcbd85b29e | |
parent | 4d5116c8a21c8fdaab13058dc039625bdab3d20d (diff) | |
download | CMake-e79b73d61f7523cf6ce4d989995ede808da212df.zip CMake-e79b73d61f7523cf6ce4d989995ede808da212df.tar.gz CMake-e79b73d61f7523cf6ce4d989995ede808da212df.tar.bz2 |
BUG: Include less content as input to "rule hash" computation.
- The rule hash should use only commands specified by the user.
- No make output (echo and progress) rules should be included.
- No outputs or dependencies need be included. The native build tool
will take care of them.
-rw-r--r-- | Source/cmGlobalGenerator.cxx | 21 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.h | 4 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 8 |
3 files changed, 12 insertions, 21 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index b971298..f34888f 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1943,8 +1943,8 @@ cmGlobalGenerator::GetDirectoryContent(std::string const& dir, bool needDisk) //---------------------------------------------------------------------------- void cmGlobalGenerator::AddRuleHash(const std::vector<std::string>& outputs, - const std::vector<std::string>& depends, - const std::vector<std::string>& commands) + std::vector<std::string>::const_iterator first, + std::vector<std::string>::const_iterator last) { #if defined(CMAKE_BUILD_WITH_CMAKE) // Ignore if there are no outputs. @@ -1960,22 +1960,7 @@ cmGlobalGenerator::AddRuleHash(const std::vector<std::string>& outputs, int length; cmsysMD5* sum = cmsysMD5_New(); cmsysMD5_Initialize(sum); - for(std::vector<std::string>::const_iterator i = outputs.begin(); - i != outputs.end(); ++i) - { - data = reinterpret_cast<unsigned char const*>(i->c_str()); - length = static_cast<int>(i->length()); - cmsysMD5_Append(sum, data, length); - } - for(std::vector<std::string>::const_iterator i = depends.begin(); - i != depends.end(); ++i) - { - data = reinterpret_cast<unsigned char const*>(i->c_str()); - length = static_cast<int>(i->length()); - cmsysMD5_Append(sum, data, length); - } - for(std::vector<std::string>::const_iterator i = commands.begin(); - i != commands.end(); ++i) + for(std::vector<std::string>::const_iterator i = first; i != last; ++i) { data = reinterpret_cast<unsigned char const*>(i->c_str()); length = static_cast<int>(i->length()); diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index ae9a46d..2865a38 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -246,8 +246,8 @@ public: void GetFilesReplacedDuringGenerate(std::vector<std::string>& filenames); void AddRuleHash(const std::vector<std::string>& outputs, - const std::vector<std::string>& depends, - const std::vector<std::string>& commands); + std::vector<std::string>::const_iterator first, + std::vector<std::string>::const_iterator last); protected: // for a project collect all its targets by following depend diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index ea0d9b8..7d2450d 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1116,6 +1116,10 @@ void cmMakefileTargetGenerator ->AppendEcho(commands, comment.c_str(), cmLocalUnixMakefileGenerator3::EchoGenerate); } + // Below we need to skip over the echo and progress commands. + unsigned int skip = static_cast<unsigned int>(commands.size()); + + // Now append the actual user-specified commands. this->LocalGenerator->AppendCustomCommand(commands, cc); // Collect the dependencies. @@ -1144,7 +1148,9 @@ void cmMakefileTargetGenerator // If the rule has changed make sure the output is rebuilt. if(!symbolic) { - this->GlobalGenerator->AddRuleHash(cc.GetOutputs(), depends, commands); + this->GlobalGenerator->AddRuleHash(cc.GetOutputs(), + commands.begin()+skip, + commands.end()); } } |