Makefile: detect errors in running spatch
The "make coccicheck" target runs spatch against each source file. But it does so in a for loop, so "make" never sees the exit code of spatch. Worse, it redirects stderr to a log file, so the user has no indication of any failure. And then to top it all off, because we touched the patch file's mtime, make will refuse to repeat the command because it think the target is up-to-date. So for example: $ make coccicheck SPATCH=does-not-exist SPATCH contrib/coccinelle/free.cocci SPATCH contrib/coccinelle/qsort.cocci SPATCH contrib/coccinelle/xstrdup_or_null.cocci SPATCH contrib/coccinelle/swap.cocci SPATCH contrib/coccinelle/strbuf.cocci SPATCH contrib/coccinelle/object_id.cocci SPATCH contrib/coccinelle/array.cocci $ make coccicheck SPATCH=does-not-exist make: Nothing to be done for 'coccicheck'. With this patch, you get: $ make coccicheck SPATCH=does-not-exist SPATCH contrib/coccinelle/free.cocci /bin/sh: 4: does-not-exist: not found Makefile:2338: recipe for target 'contrib/coccinelle/free.cocci.patch' failed make: *** [contrib/coccinelle/free.cocci.patch] Error 1 It also dumps the log on failure, so any errors from spatch itself (like syntax errors in our .cocci files) will be seen by the user. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3b9e3c2ced
commit
f5c2bc2b96
12
Makefile
12
Makefile
@ -2329,9 +2329,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: $@; \
|
||||
|
Loading…
Reference in New Issue
Block a user