On 17/10/16 03:18, Jeff King wrote: > On Mon, Oct 17, 2016 at 02:37:58AM +0100, Ramsay Jones wrote: > >> Hmm, well, you have to remember that 'make clean' sometimes >> doesn't make clean. Ever since the Makefile was changed to only >> remove $(OBJECTS), rather than *.o xdiff/*.o etc., you have to >> remember to 'make clean' _before_ you switch branches. Otherwise, >> you risk leaving some objects laying around. Since the script >> runs 'nm' on all objects it finds, any stale ones can cause problems. >> (Of course, I almost always forget, so I frequently have to manually >> check for and remove stale objects!) > > Gross. I would not be opposed to a Makefile rule that outputs the > correct set of OBJECTS so this (or other) scripts could build on it. > > IIRC, BSD make has an option to do this "make -V OBJECTS" or something, > but I don't thnk there's an easy way to do so. Hmm, I would go in the opposite direction and take a leaf out of Ævar's book (see commit bc548efe) and this one-liner: diff --git a/Makefile b/Makefile index ee89c06..c08c25e 100644 --- a/Makefile +++ b/Makefile @@ -2506,7 +2506,7 @@ profile-clean: clean: profile-clean coverage-clean $(RM) *.res - $(RM) $(OBJECTS) + $(RM) $(addsuffix *.o,$(object_dirs)) $(RM) $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB) $(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X $(RM) $(TEST_PROGRAMS) $(NO_INSTALL) This would actually solve my problem, but it actually isn't a _complete_ solution. (Hint: think about what isn't in $(OBJECTS), depending on the configuration). ;-) > Or, since it seems to find useful results quite frequently, maybe it > would be worth including the script inside git (and triggering it with > an optional Makefile rule). It sounds like we'd need a way to annotate > known false positives, but if it were in common use, it would be easier > to get people to keep that list up to date. Hmm, I suspect that wouldn't happen, which would reduce it usefulness and ultimately lead to it not being used. (Updating the 'stop list' would fast become a burden.) I find it useful to flag these issues automatically, but I still need to look at each symbol and decide what to do (you may not agree with some of my choices either - take a look at the output on the master branch!). The way I use it, I effectively ignore the 'stop list' maintenance issues. ATB, Ramsay Jones