On Fri, Feb 01, 2013 at 01:36:38AM -0500, Jeff King wrote: > It seems like building each object file should depend on its dependency > file (but only when COMPUTE_HEADER_DEPENDENCIES is on, of course), since > otherwise we cannot know if we have the right dependencies or not. > > Something like this almost works, I think: > [...] > +$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs) $(call dep_file, %.o) Actually that would not work, as we do not have a rule to create .depend/foo.o.d. We can add one, but it gets pretty hairy (and replicates much of the normal build rule). A much simpler way is to just find the missing dep files and force compilation of their matching objects. Like: diff --git a/Makefile b/Makefile index 6b42f66..f94e8b9 100644 --- a/Makefile +++ b/Makefile @@ -1843,8 +1843,14 @@ dep_args = -MF $(dep_file) -MMD -MP @mkdir -p $@ missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs)) +missing_dep_files := $(filter-out $(wildcard $(dep_files)),$(dep_files)) +# we want to rewrite "foo/.depend/bar.o.d" into "foo/bar.o", but +# make's patsubst is not powerful enough to remove something from the middle of +# a string. Hack around it by shelling out. +obj_files_with_missing_deps := $(shell echo $(missing_dep_files:.d=) | tr ' ' '\n' | sed 's,.depend/,,') dep_file = $(dir $@).depend/$(notdir $@).d dep_args = -MF $(dep_file) -MMD -MP +$(obj_files_with_missing_deps): FORCE ifdef CHECK_HEADER_DEPENDENCIES $(error cannot compute header dependencies outside a normal build. \ Please unset CHECK_HEADER_DEPENDENCIES and try again) which does solve the problem, but that shell hack is nasty. It would be much simpler if we stored the dependency for foo/bar.o as ".depend/foo/bar.o.d", rather than "foo/.depend/bar.o.d", as then we would patsubst it away. Or maybe there is some clever way to convince make to do what I want here. Suggestions welcome. -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html