diff options
author | Brad King <brad.king@kitware.com> | 2015-09-29 14:08:15 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2015-09-29 14:08:15 (GMT) |
commit | f23ab1a1501cf82a04b9f24c3324e314afd53fab (patch) | |
tree | e38298e5867b28407b282424da94c18438a9b4e2 | |
parent | 130f11634073e259b9ea1b48ab341dc7ac2ce4b9 (diff) | |
parent | fa5284f07f20e6d62ca5d2dab36ecc48c0511eba (diff) | |
download | CMake-f23ab1a1501cf82a04b9f24c3324e314afd53fab.zip CMake-f23ab1a1501cf82a04b9f24c3324e314afd53fab.tar.gz CMake-f23ab1a1501cf82a04b9f24c3324e314afd53fab.tar.bz2 |
Merge topic 'vs-old-rule-files'
fa5284f0 VS: Prevent generated "rule" files from causing rebuilds
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 27 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.h | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 92403e3..6c71313 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -9,6 +9,7 @@ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ +#include "windows.h" #include "cmVisualStudio10TargetGenerator.h" #include "cmGlobalVisualStudio10Generator.h" #include "cmGeneratorTarget.h" @@ -871,6 +872,9 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile const* source, fout << "# generated from CMake\n"; fout.flush(); fout.close(); + // Force given file to have a very old timestamp, thus + // preventing dependent rebuilds. + this->ForceOld(sourcePath); } else { @@ -3458,3 +3462,26 @@ cmVisualStudio10TargetGenerator this->WriteString("<None Include=\"", 2); (*this->BuildFileStream) << cmVS10EscapeXML(keyFile) << "\" />\n"; } + +bool cmVisualStudio10TargetGenerator::ForceOld(const std::string& source) const +{ + HANDLE h = CreateFileW( + cmSystemTools::ConvertToWindowsExtendedPath(source).c_str(), + FILE_WRITE_ATTRIBUTES, + FILE_SHARE_WRITE, 0, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, 0); + if (!h) + { + return false; + } + + FILETIME const ftime_20010101 = { 3365781504, 29389701 }; + if (!SetFileTime(h, &ftime_20010101, &ftime_20010101, &ftime_20010101)) + { + CloseHandle(h); + return false; + } + + CloseHandle(h); + return true; +} diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h index 5fadb60..f2aaf05 100644 --- a/Source/cmVisualStudio10TargetGenerator.h +++ b/Source/cmVisualStudio10TargetGenerator.h @@ -130,6 +130,8 @@ private: cmIDEFlagTable const* GetLinkFlagTable() const; cmIDEFlagTable const* GetMasmFlagTable() const; + bool ForceOld(const std::string& source) const; + private: typedef cmVisualStudioGeneratorOptions Options; typedef std::map<std::string, Options*> OptionsMap; |