On Tue, Nov 16 2021, Mike Hommey wrote: > On Mon, Nov 15, 2021 at 11:49:31PM +0100, Ævar Arnfjörð Bjarmason wrote: >> >> On Tue, Nov 16 2021, Mike Hommey wrote: >> >> > On Mon, Nov 15, 2021 at 11:26:36PM +0100, Ævar Arnfjörð Bjarmason wrote: >> >> >> >> On Tue, Nov 16 2021, Mike Hommey wrote: >> >> >> >> > On Thu, Sep 23, 2021 at 12:30:03PM +0200, Ævar Arnfjörð Bjarmason wrote: >> >> >> -builtin/help.sp builtin/help.s builtin/help.o: config-list.h GIT-PREFIX >> >> >> +hook.sp hook.s hook.o: hook-list.h >> >> >> + >> >> >> +builtin/help.sp builtin/help.s builtin/help.o: config-list.h hook-list.h GIT-PREFIX >> >> > >> >> > hook-list.h is only included from buitin/bugreport.c, so >> >> > builtin/bugreport.o should be the one with the hook-list.h dependency, >> >> > shouldn't it? >> >> >> >> Well spotted, yes. This is a mistake. I think from some earlier WIP >> >> version of the series. >> >> >> >> In practice we don't really miss dependencies due to these sorts of >> >> mistakes since we use the .depends files, i.e. GCC & Clang figure this >> >> out for us: >> >> >> >> $ grep hook-list .depend/* */.depend/* >> >> builtin/.depend/bugreport.o.d: compat/compiler.h git-compat-util.h hook.h hook-list.h >> >> builtin/.depend/bugreport.o.d:hook-list.h: >> > >> > But aren't those .depends files are only created when compiling object >> > files, such that builtin/.depend/bugreport.o.d wouldn't exist until >> > bugreport.c is compiled, which would fail if hook-list.h wasn't created >> > before that? >> >> Fail how? >> >> I don't think it could fail, because the purpose of these dependency >> relationships is to avoid needless *re*builds. So if you're building for >> the first time it doesn't matter, your compiler will find the relevant >> things to include for you. It doesn't need what's in the Makefile to do >> that. >> >> See [1], what I said about LIB_H there applies more generally for the >> .depends files. >> >> It will only fail in the sense that it over-depends, i.e. if you do: >> >> git clean -dxf; make builtin/help.o > > Try > > git clean -dxf; make builtin/bugreport.o > > It fails with: > > CC builtin/bugreport.o > builtin/bugreport.c:7:10: fatal error: hook-list.h: そのようなファイルやディレクトリはありません > 7 | #include "hook-list.h" > | ^~~~~~~~~~~~~ > compilation terminated. > make: *** [Makefile:2500: builtin/bugreport.o] エラー 1 > > The only reason I can see why it builds at all normally is that hook.o > is built soon enough that by the time builtin/bugreport.o is built > hook-list.h has already been generated. Ah, you're obviously right. I don't know what I was thinking yesterday. I submitted a re-roll of the greater dependency fix-up & optimization series I've got kicking around, which includes a fix for this issue. Thank you for the report: https://lore.kernel.org/git/cover-v3-00.23-00000000000-20211116T114334Z-avarab@xxxxxxxxx