diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2020-09-11 13:14:38 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2020-09-30 19:09:19 +0200 |
commit | 1d14a8edce750c9d87ba6b03276815723de9a193 (patch) | |
tree | 62c344b192dcda290f78756d629af87c062663e7 | |
parent | 27d551c00d5458d1deda33508dab7453959ca2c6 (diff) | |
download | qemu-1d14a8edce750c9d87ba6b03276815723de9a193.zip qemu-1d14a8edce750c9d87ba6b03276815723de9a193.tar.gz qemu-1d14a8edce750c9d87ba6b03276815723de9a193.tar.bz2 |
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>
-rwxr-xr-x | scripts/ninjatool.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py index 627a1ca..6f0e35c 100755 --- a/scripts/ninjatool.py +++ b/scripts/ninjatool.py @@ -908,6 +908,9 @@ class Ninja2Make(NinjaParserEventsWithVars): else: stamp = '%s@%s.stamp' % (rule, sha1_text(targets)[0:11]) 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.rule_targets[rule].append(stamp) self.stamp_targets[rule].append(stamp) |