On Tue, Mar 05, 2019 at 02:50:11PM +0900, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > > This makes sense to me, though as you noted elsewhere, it doesn't fix > > the gcrypt problem, since that file unconditionally wants to look at the > > system gcrypt.h (and we control at the Makefile level whether we > > actually look at sha256/gcrypt.h). > > Hmm, is that because the header check target does not know which *.h > files we ship are actually used in a particular build? Yes, exactly. > After a normal build, with dynamic dependency checking on, we would > have sufficient information to figure it out. Would that help? Yeah, that's what I was hinting at earlier in the thread. Here it is sketched out to an actual working patch. The sub-make bits could actually be a shell script instead of a Makefile; the only point in using make is to use the parent "-j" for parallelism. Note also that by including compat/ headers, I noticed that bswap.h fails its hdr-check. :) So do command-list.h (it needs gettext.h to handle the _() markings, but that only comes in via cache.h), and all of xdiff (which is probably fixable, but I didn't bother here). --- Makefile | 23 ++++++++++++----------- compat/bswap.h | 5 +++++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index c5240942f2..283e934d7b 100644 --- a/Makefile +++ b/Makefile @@ -1852,7 +1852,6 @@ ifndef V QUIET_MSGFMT = @echo ' ' MSGFMT $@; QUIET_GCOV = @echo ' ' GCOV $@; QUIET_SP = @echo ' ' SP $<; - QUIET_HDR = @echo ' ' HDR $<; QUIET_RC = @echo ' ' RC $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ @@ -2735,16 +2734,18 @@ $(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE .PHONY: sparse $(SP_OBJ) sparse: $(SP_OBJ) -GEN_HDRS := command-list.h unicode-width.h -EXCEPT_HDRS := $(GEN_HDRS) compat% xdiff% -CHK_HDRS = $(filter-out $(EXCEPT_HDRS),$(patsubst ./%,%,$(LIB_H))) -HCO = $(patsubst %.h,%.hco,$(CHK_HDRS)) - -$(HCO): %.hco: %.h FORCE - $(QUIET_HDR)$(CC) -include git-compat-util.h -I. -o /dev/null -c -xc $< - -.PHONY: hdr-check $(HCO) -hdr-check: $(HCO) +.PHONY: hdr-check +hdr-check: all +ifdef USE_COMPUTED_HEADER_DEPENDENCIES + @$(MAKE) -f hdr-check.mak CC="$(CC)" V=$(V) \ + $$(sed -n 's/^\([^ ]*\)\.h:/\1.hco/p' .depend/* | \ + sort -u | \ + egrep -v '^(xdiff/|unicode-width.h|command-list.h)' \ + ) +else + @echo >&2 "error: hdr-check supported only on platforms with computed dependencies" + @false +endif .PHONY: style style: diff --git a/compat/bswap.h b/compat/bswap.h index 5078ce5ecc..e4e25735ce 100644 --- a/compat/bswap.h +++ b/compat/bswap.h @@ -1,3 +1,6 @@ +#ifndef COMPAT_BSWAP_H +#define COMPAT_BSWAP_H + /* * Let's make sure we always have a sane definition for ntohl()/htonl(). * Some libraries define those as a function call, just to perform byte @@ -210,3 +213,5 @@ static inline void put_be64(void *ptr, uint64_t value) } #endif + +#endif /* COMPAT_BSWAP_H */ -- 2.21.0.684.gc9dc8b89c9