|  | @@ -1181,11 +1181,54 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
 | 
	
		
			
				|  |  |      if (useNinjaDepfile) {
 | 
	
		
			
				|  |  |        // Create a custom command that generates a timestamp file and
 | 
	
		
			
				|  |  |        // has a depfile assigned. The depfile is created by JobDepFilesMergeT.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      // Add additional autogen target dependencies
 | 
	
		
			
				|  |  | +      //
 | 
	
		
			
				|  |  | +      // Also create an additional '_autogen_timestamp_deps' that the custom
 | 
	
		
			
				|  |  | +      // command will depend on. It will have no sources or commands to
 | 
	
		
			
				|  |  | +      // execute, but it will have dependencies that would originally be
 | 
	
		
			
				|  |  | +      // assigned to the pre-Qt 5.15 'autogen' target. These dependencies will
 | 
	
		
			
				|  |  | +      // serve as a list of order-only dependencies for the custom command,
 | 
	
		
			
				|  |  | +      // without forcing the custom command to re-execute.
 | 
	
		
			
				|  |  | +      //
 | 
	
		
			
				|  |  | +      // The dependency tree would then look like
 | 
	
		
			
				|  |  | +      // '_autogen_timestamp_deps (order-only)' <- '/timestamp' file <-
 | 
	
		
			
				|  |  | +      // '_autogen' target.
 | 
	
		
			
				|  |  | +      const auto timestampTargetName =
 | 
	
		
			
				|  |  | +        cmStrCat(this->GenTarget->GetName(), "_autogen_timestamp_deps");
 | 
	
		
			
				|  |  | +      std::vector<std::string> timestampTargetProvides;
 | 
	
		
			
				|  |  | +      cmCustomCommandLines timestampTargetCommandLines;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Add additional autogen target dependencies to
 | 
	
		
			
				|  |  | +      // '_autogen_timestamp_deps'.
 | 
	
		
			
				|  |  |        for (const cmTarget* t : this->AutogenTarget.DependTargets) {
 | 
	
		
			
				|  |  |          dependencies.push_back(t->GetName());
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      cmTarget* timestampTarget = this->LocalGen->AddUtilityCommand(
 | 
	
		
			
				|  |  | +        timestampTargetName, true, this->Dir.Work.c_str(),
 | 
	
		
			
				|  |  | +        /*byproducts=*/timestampTargetProvides,
 | 
	
		
			
				|  |  | +        /*depends=*/dependencies, timestampTargetCommandLines, false, nullptr);
 | 
	
		
			
				|  |  | +      this->LocalGen->AddGeneratorTarget(
 | 
	
		
			
				|  |  | +        cm::make_unique<cmGeneratorTarget>(timestampTarget, this->LocalGen));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Set FOLDER property on the timestamp target, so it appears in the
 | 
	
		
			
				|  |  | +      // appropriate folder in an IDE or in the file api.
 | 
	
		
			
				|  |  | +      if (!this->TargetsFolder.empty()) {
 | 
	
		
			
				|  |  | +        timestampTarget->SetProperty("FOLDER", this->TargetsFolder);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Make '/timestamp' file depend on '_autogen_timestamp_deps' and on the
 | 
	
		
			
				|  |  | +      // moc and uic executables (whichever are enabled).
 | 
	
		
			
				|  |  | +      dependencies.clear();
 | 
	
		
			
				|  |  | +      dependencies.push_back(timestampTargetName);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      if (this->Moc.ExecutableTarget != nullptr) {
 | 
	
		
			
				|  |  | +        dependencies.push_back(this->Moc.ExecutableTarget->Target->GetName());
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (this->Uic.ExecutableTarget != nullptr) {
 | 
	
		
			
				|  |  | +        dependencies.push_back(this->Uic.ExecutableTarget->Target->GetName());
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Create the custom command that outputs the timestamp file.
 | 
	
		
			
				|  |  |        const char timestampFileName[] = "timestamp";
 | 
	
		
			
				|  |  |        const std::string outputFile =
 | 
	
		
			
				|  |  |          cmStrCat(this->Dir.Build, "/", timestampFileName);
 |