Jeff King <peff@xxxxxxxx> writes: > It also doesn't help that shells are awkward at passing status out of a > for-loop. I think the most "make-ish" way of doing this would actually > be to lose the for loop and have a per-cocci-per-source target. As we assume we can freely use GNUmake facilities, another option, (i.e. the most "gnumake-ish" way) may be to have it unroll the loop with $(foreach,...) so that the shell just sees a series of commands. > I don't know if that would make the patches harder to apply. The results > aren't full patches, so I assume you usually do some kind of munging on > them? I resorted to: > > make coccicheck SPATCH='spatch --in-place' > > Makefile | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/Makefile b/Makefile > index 9ec6065cc..d97633892 100644 > --- a/Makefile > +++ b/Makefile > @@ -2336,9 +2336,17 @@ check: common-cmds.h > C_SOURCES = $(patsubst %.o,%.c,$(C_OBJ)) > %.cocci.patch: %.cocci $(C_SOURCES) > @echo ' ' SPATCH $<; \ > + ret=0; \ > for f in $(C_SOURCES); do \ > - $(SPATCH) --sp-file $< $$f $(SPATCH_FLAGS); \ > - done >$@ 2>$@.log; \ > + $(SPATCH) --sp-file $< $$f $(SPATCH_FLAGS) || \ > + { ret=$$?; break; }; \ > + done >$@+ 2>$@.log; \ > + if test $$ret != 0; \ > + then \ > + cat $@.log; \ > + exit 1; \ > + fi; \ > + mv $@+ $@; \ > if test -s $@; \ > then \ > echo ' ' SPATCH result: $@; \