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