Makefile: emulate compile in $(HCO) target better

Currently, when testing headers using `make hdr-check`, headers are directly compiled. Although this seems to test the headers, this is too strict since we treat the headers as C sources. As a result, this will cause warnings to appear that would otherwise not, such as a static variable definition intended for later use throwing a unused variable warning. In addition, on platforms that can run `make hdr-check` but require custom flags, this target was failing because none of them were being passed to the compiler. For example, on MacOS, the NO_OPENSSL flag was being set but it was not being passed into compiler so the check was failing. Fix these problems by emulating the compile process better, including test compiling dummy *.hcc C sources generated from the *.h files and passing $(ALL_CFLAGS) into the compiler for the $(HCO) target so that these custom flags can be used. Helped-by: Jeff King <peff@peff.net> Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Denton Liu committed Sep 25, 2019 at 01:21 UTC b503a2d515e6ac3d2cced7881791c12663c45d01
2 files changed +10 -3
.gitignore
+1
@@ -216,6 +216,7 @@
216 /tags
217 /TAGS
218 /cscope*
219 +*.hcc
220 *.obj
221 *.lib
222 *.res
Makefile
+9 -3
@@ -1872,7 +1872,7 @@ ifndef V
1872 QUIET_MSGFMT = @echo ' ' MSGFMT $@;
1873 QUIET_GCOV = @echo ' ' GCOV $@;
1874 QUIET_SP = @echo ' ' SP $<;
1875 - QUIET_HDR = @echo ' ' HDR $<;
1875 + QUIET_HDR = @echo ' ' HDR $(<:hcc=h);
1876 QUIET_RC = @echo ' ' RC $@;
1877 QUIET_SUBDIR0 = +@subdir=
1878 QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
@@ -2771,9 +2771,14 @@ ifndef GCRYPT_SHA256
2771 endif
2772 CHK_HDRS = $(filter-out $(EXCEPT_HDRS),$(patsubst ./%,%,$(LIB_H)))
2773 HCO = $(patsubst %.h,%.hco,$(CHK_HDRS))
2774 +HCC = $(HCO:hco=hcc)
2775
2775 -$(HCO): %.hco: %.h FORCE
2776 - $(QUIET_HDR)$(CC) -include git-compat-util.h -I. -o /dev/null -c -xc $<
2776 +%.hcc: %.h
2777 + @echo '#include "git-compat-util.h"' >$@
2778 + @echo '#include "$<"' >>$@
2779 +
2780 +$(HCO): %.hco: %.hcc FORCE
2781 + $(QUIET_HDR)$(CC) $(ALL_CFLAGS) -o /dev/null -c -xc $<
2782
2783 .PHONY: hdr-check $(HCO)
2784 hdr-check: $(HCO)
@@ -3082,6 +3087,7 @@ clean: profile-clean coverage-clean cocciclean
3087 $(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
3088 $(RM) $(TEST_PROGRAMS)
3089 $(RM) $(FUZZ_PROGRAMS)
3090 + $(RM) $(HCC)
3091 $(RM) -r bin-wrappers $(dep_dirs)
3092 $(RM) -r po/build/
3093 $(RM) *.pyc *.pyo */*.pyc */*.pyo command-list.h $(ETAGS_TARGET) tags cscope*