summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-09-29 14:08:15 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-09-29 14:08:15 (GMT)
commitf23ab1a1501cf82a04b9f24c3324e314afd53fab (patch)
treee38298e5867b28407b282424da94c18438a9b4e2 /Source
parent130f11634073e259b9ea1b48ab341dc7ac2ce4b9 (diff)
parentfa5284f07f20e6d62ca5d2dab36ecc48c0511eba (diff)
downloadCMake-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
Diffstat (limited to 'Source')
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx27
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h2
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;