The big win here is that none of the tags targets depend on "FORCE" anymore, so we'll only re-generate them if our sources change. For v3, see: https://lore.kernel.org/git/cover-0.5-00000000000-20210721T231900Z-avarab@xxxxxxxxx/ This addresses the feedback about the cscope* v.s. cscope.out rule in .gitignore and "make clean", i.e. those rules are not being changed anymore. I also changed a stray cscope.out to $@ in 4/5, which was missed in v3. Ævar Arnfjörð Bjarmason (5): Makefile: move ".PHONY: cscope" near its target Makefile: add QUIET_GEN to "cscope" target Makefile: don't use "FORCE" for tags targets Makefile: remove "cscope.out", not "cscope*" in cscope.out target Makefile: normalize clobbering & xargs for tags targets Makefile | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) Range-diff against v3: 1: 6b4ddc126d9 = 1: 2ee725e2fba Makefile: move ".PHONY: cscope" near its target 2: d3d5d332e92 = 2: 2122cb25633 Makefile: add QUIET_GEN to "cscope" target 3: 9dd69d68178 = 3: 8649716772b Makefile: don't use "FORCE" for tags targets 4: f8d151f1f6a ! 4: 643c514e12a Makefile: the "cscope" target always creates a "cscope.out" @@ Metadata Author: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> ## Commit message ## - Makefile: the "cscope" target always creates a "cscope.out" + Makefile: remove "cscope.out", not "cscope*" in cscope.out target - In the preceding commit the "cscope" target was changed to be a phony - alias for the "cscope.out" target. + Before we generate a "cscope.out" file, remove that file explicitly, + and not everything matching "cscope*". This doesn't change any + behavior of the Makefile in practice, but makes this rule less + confusing, and consistent with other similar rules. The cscope target was added in a2a9150bf06 (makefile: Add a cscope - target, 2007-10-06), and has always referred to cscope* instead of to - cscope.out. + target, 2007-10-06). It has always referred to cscope* instead of to + cscope.out in .gitignore and the "clean" target, even though we only + ever generated a cscope.out file. - As far as I can tell this ambiguity was never needed. The - "-fcscope.out" (note, no whitespace) argument is enabled by default, - but let's provide it explicitly for good measure. + This was seemingly done to aid use-cases where someone invoked cscope + with the "-q" flag, which would make it create a "cscope.in.out" and + "cscope.po.out" files in addition to "cscope.out". - Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> + But us removing those files we never generated is confusing, so let's + only remove the file we need to, furthermore let's use the "-f" flag + to explicitly name the cscope.out file, even though it's the default + if not "-f" argument is supplied. + + It is somewhat inconsistent to change from the glob here but not in + the "clean" rule and .gitignore, an earlier version of this change + updated those as well, but see [1][2] for why they were kept. - ## .gitignore ## -@@ - /.vscode/ - /tags - /TAGS --/cscope* -+/cscope.out - /compile_commands.json - *.hcc - *.obj + 1. https://lore.kernel.org/git/87k0lit57x.fsf@xxxxxxxxxxxxxxxxxxx/ + 2. https://lore.kernel.org/git/87im0kn983.fsf@xxxxxxxxxxxxxxxxxxx/ + + Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> ## Makefile ## @@ Makefile: tags: $(FOUND_SOURCE_FILES) @@ Makefile: tags: $(FOUND_SOURCE_FILES) cscope.out: $(FOUND_SOURCE_FILES) - $(QUIET_GEN)$(RM) cscope* && \ - echo $(FOUND_SOURCE_FILES) | xargs cscope -b -+ $(QUIET_GEN)$(RM) cscope.out && \ ++ $(QUIET_GEN)$(RM) $@ && \ + echo $(FOUND_SOURCE_FILES) | xargs cscope -f$@ -b .PHONY: cscope cscope: cscope.out -@@ Makefile: clean: profile-clean coverage-clean cocciclean - $(RM) $(HCC) - $(RM) -r bin-wrappers $(dep_dirs) $(compdb_dir) compile_commands.json - $(RM) -r po/build/ -- $(RM) *.pyc *.pyo */*.pyc */*.pyo $(GENERATED_H) $(ETAGS_TARGET) tags cscope* -+ $(RM) *.pyc *.pyo */*.pyc */*.pyo $(GENERATED_H) $(ETAGS_TARGET) tags cscope.out - $(RM) -r .dist-tmp-dir .doc-tmp-dir - $(RM) $(GIT_TARNAME).tar.gz - $(RM) $(htmldocs).tar.gz $(manpages).tar.gz 5: f3ff76d0e98 ! 5: 1eaf3416329 Makefile: normalize clobbering & xargs for tags targets @@ Makefile: FIND_SOURCE_FILES = ( \ + mv $@+ $@ cscope.out: $(FOUND_SOURCE_FILES) -- $(QUIET_GEN)$(RM) cscope.out && \ +- $(QUIET_GEN)$(RM) $@ && \ - echo $(FOUND_SOURCE_FILES) | xargs cscope -f$@ -b + $(QUIET_GEN)$(RM) $@+ && \ + echo $(FOUND_SOURCE_FILES) | xargs cscope -f$@+ -b && \ -- 2.33.0.rc0.597.gc569a812f0a