Merge topic 'vs-old-rule-files'

fa5284f0 VS: Prevent generated "rule" files from causing rebuilds
This commit is contained in:
Brad King 2015-09-29 10:08:15 -04:00 committed by CMake Topic Stage
commit f23ab1a150
2 changed files with 29 additions and 0 deletions

View File

@ -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;
}

View File

@ -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;