On Thu, Aug 02, 2018 at 02:01:55PM -0400, Jeff King wrote: > I suspect if we go with the one-spatch-per-source route, though, that we > could do this just with regular make rules. Yeah, it's pretty straightforward: diff --git a/Makefile b/Makefile index d616c0412..86fdcf567 100644 --- a/Makefile +++ b/Makefile @@ -2674,15 +2674,17 @@ COCCI_SOURCES = $(filter-out sha1collisiondetection/%,$(C_SOURCES)) else COCCI_SOURCES = $(filter-out sha1dc/%,$(C_SOURCES)) endif +COCCI_COMBINED = contrib/coccinelle/combined.cocci +COCCI_SEM_PATCHES = $(filter-out $(COCCI_COMBINED), $(wildcard contrib/coccinelle/*.cocci)) -%.cocci.patch: %.cocci $(COCCI_SOURCES) +$(COCCI_COMBINED): $(COCCI_SEM_PATCHES) + cat $^ >$@+ + mv $@+ $@ + +$(COCCI_COMBINED).patches/%.patch: % $(COCCI_COMBINED) @echo ' ' SPATCH $<; \ - ret=0; \ - for f in $(COCCI_SOURCES); do \ - $(SPATCH) --sp-file $< $$f $(SPATCH_FLAGS) || \ - { ret=$$?; break; }; \ - done >$@+ 2>$@.log; \ - if test $$ret != 0; \ + mkdir -p $(dir $@) || exit 1; \ + if ! $(SPATCH) --sp-file $(COCCI_COMBINED) $< $(SPATCH_FLAGS) >$@+ 2>$@.log; \ then \ cat $@.log; \ exit 1; \ @@ -2692,7 +2694,8 @@ endif then \ echo ' ' SPATCH result: $@; \ fi -coccicheck: $(addsuffix .patch,$(wildcard contrib/coccinelle/*.cocci)) + +coccicheck: $(patsubst %, $(COCCI_COMBINED).patches/%.patch, $(COCCI_SOURCES)) .PHONY: coccicheck @@ -2907,7 +2910,7 @@ profile-clean: $(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs))) cocciclean: - $(RM) contrib/coccinelle/*.cocci.patch* + $(RM) -r contrib/coccinelle/*.cocci.patches clean: profile-clean coverage-clean cocciclean $(RM) *.res I guess you could even replace "COCCI_COMBINED" with "COCCI_PATCH" in most of the targets, and that would let people do individual: make COCCI_PATCH=contrib/coccinelle/foo.cocci coccicheck The default would just be the concatenated version. -Peff