ninjatool: rebuild multi-output targets if outputs are missing
The "stamp file trick" used to group targets of a single multi-output rule prevents the user from deleting one such target in order to force its rebuild. Doing so will not touch the stamp file, and therefore only the dummy ":" command will be executed. With this patch, ninjatool writes rules that force-rebuild the stamp file if any of its outputs are missing. Rebuilding the missing target therefore causes the stamp file to be rebuilt too. Reported-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
27d551c00d
commit
1d14a8edce
@ -908,6 +908,9 @@ class Ninja2Make(NinjaParserEventsWithVars):
|
|||||||
else:
|
else:
|
||||||
stamp = '%s@%s.stamp' % (rule, sha1_text(targets)[0:11])
|
stamp = '%s@%s.stamp' % (rule, sha1_text(targets)[0:11])
|
||||||
self.print('%s: %s; @:' % (targets, stamp))
|
self.print('%s: %s; @:' % (targets, stamp))
|
||||||
|
self.print('ifneq (%s, $(wildcard %s))' % (targets, targets))
|
||||||
|
self.print('.PHONY: %s' % (stamp, ))
|
||||||
|
self.print('endif')
|
||||||
self.print('%s: %s | %s; ${ninja-command-restat}' % (stamp, inputs, orderonly))
|
self.print('%s: %s | %s; ${ninja-command-restat}' % (stamp, inputs, orderonly))
|
||||||
self.rule_targets[rule].append(stamp)
|
self.rule_targets[rule].append(stamp)
|
||||||
self.stamp_targets[rule].append(stamp)
|
self.stamp_targets[rule].append(stamp)
|
||||||
|
Loading…
Reference in New Issue
Block a user