[PATCH v2 0/5] Makefile: "make tags" fixes & cleanup
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jun 29, 2021, 11:12 UTC
- Message-ID
- <cover-0.5-0000000000-20210629T110837Z-avarab@gmail.com>
- In-Reply-To
- <cover-0.3-00000000000-20210622T141844Z-avarab@gmail.com>
A v2 of my fixes to the tags targets. This no longer depends on my .DELETE_ON_ERROR change, and goes directly on top of "master". See [2] for the just-submitted v2 of that other series.
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.
I missed the interaction of the "-a" flag and xargs splitting the arguments into am implicit -n, so in v1 of this we could end up with incomplete tag files. In this v2 we more incrementally reach similar ends, but in the end result retain our rm/gen/mv dance, since it's needed in this case.
1. http://lore.kernel.org/git/cover-0.3-00000000000-20210622T141844Z-avarab@gmail.com 2. https://lore.kernel.org/git/patch-1.1-2557117855-20210629T084356Z-avarab@gmail.com/
Ævar Arnfjörð Bjarmason (5): Makefile: move ".PHONY: cscope" near its target Makefile: add QUIET_GEN to "cscope" target Makefile: fix "cscope" target to refer to cscope.out Makefile: don't use "FORCE" for tags targets Makefile: normalize clobbering & xargs for tags targets
.gitignore | 2 +- Makefile | 34 ++++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-)
Range-diff against v1:
1: 383a90c8ac = 1: dd6cfd6022 Makefile: move ".PHONY: cscope" near its target
-: ---------- > 2: 56daa09738 Makefile: add QUIET_GEN to "cscope" target
2: ea39f1f5cd ! 3: 35c8b83904 Makefile: fix "cscope" target to refer to cscope.out
@@ Commit message
The cscope target added in a2a9150bf06 (makefile: Add a cscope target,
2007-10-06) has for some reason been referring to cscope* instead of
- cscope.out. Let's generate the cscope.out file directly so we don't
- need to speculate.
+ cscope.out.
- The "-fcscope.out" (note, no whitespace) argument is enabled by
- default on my system's cscope 15.9, but let's provide it explicitly
- for good measure.
+ Let's generate the cscope.out file directly so we don't need to
+ speculate. The "-fcscope.out" (note, no whitespace) argument is
+ enabled by default on my system's cscope 15.9, but let's provide it
+ explicitly for good measure.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
@@ Makefile: tags: FORCE
mv tags+ tags
+cscope.out:
++ $(QUIET_GEN)$(RM) cscope.out && \
+ $(FIND_SOURCE_FILES) | xargs cscope -f$@ -b
+
.PHONY: cscope
-cscope:
-- $(RM) cscope*
+- $(QUIET_GEN)$(RM) cscope* && \
- $(FIND_SOURCE_FILES) | xargs cscope -b
+cscope: cscope.out
3: 67fc87665d ! 4: b924cc3f56 Makefile: don't use "FORCE" for tags targets
@@ Commit message
targets, instead make them depend on whether or not the relevant
source files have changed.
- I'm also removing the "-o" option from them, that seems to have been
- cargo-culted when they were initially added in f81e7c626f3 (Makefile:
- Add TAGS and tags targets, 2006-03-18). It would make sense to use
- that option if we had been appending to tag files, it doesn't make any
- sense that it was used after we'd just removed the files file being
- appended to.
-
- This will potentially cause a partial file to be left behind if the
- command dies, but my in-flight series to use the ".DELETE_ON_ERROR"
- flag in the Makefile[1] will make that problem go away. I think even
- without that it's not problem we need to worry about in these cases.
-
- 1. https://lore.kernel.org/git/patch-1.1-9420448e74f-20210622T141100Z-avarab@gmail.com/
-
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
## Makefile ##
@@ Makefile: FIND_SOURCE_FILES = ( \
)
-$(ETAGS_TARGET): FORCE
-- $(QUIET_GEN)$(RM) "$(ETAGS_TARGET)+" && \
-- $(FIND_SOURCE_FILES) | xargs etags -a -o "$(ETAGS_TARGET)+" && \
-- mv "$(ETAGS_TARGET)+" "$(ETAGS_TARGET)"
+FOUND_SOURCE_FILES = $(shell $(FIND_SOURCE_FILES))
++
++$(ETAGS_TARGET): $(FOUND_SOURCE_FILES)
+ $(QUIET_GEN)$(RM) "$(ETAGS_TARGET)+" && \
+ $(FIND_SOURCE_FILES) | xargs etags -a -o "$(ETAGS_TARGET)+" && \
+ mv "$(ETAGS_TARGET)+" "$(ETAGS_TARGET)"
-tags: FORCE
-- $(QUIET_GEN)$(RM) tags+ && \
-- $(FIND_SOURCE_FILES) | xargs ctags -a -o tags+ && \
-- mv tags+ tags
-+$(ETAGS_TARGET): $(FOUND_SOURCE_FILES)
-+ $(QUIET_GEN)echo $(FOUND_SOURCE_FILES) | \
-+ xargs etags -o $@
-+
+tags: $(FOUND_SOURCE_FILES)
-+ $(QUIET_GEN)echo $(FOUND_SOURCE_FILES) | \
-+ xargs ctags -o $@
+ $(QUIET_GEN)$(RM) tags+ && \
+ $(FIND_SOURCE_FILES) | xargs ctags -a -o tags+ && \
+ mv tags+ tags
- cscope.out:
+-cscope.out:
++cscope.out: $(FOUND_SOURCE_FILES)
+ $(QUIET_GEN)$(RM) cscope.out && \
- $(FIND_SOURCE_FILES) | xargs cscope -f$@ -b
-+ $(QUIET_GEN)echo $(FOUND_SOURCE_FILES) | \
-+ xargs cscope -f$@ -b
++ echo $(FOUND_SOURCE_FILES) | xargs cscope -f$@ -b
.PHONY: cscope
cscope: cscope.out
-: ---------- > 5: 5195d99e25 Makefile: normalize clobbering & xargs for tags targets-- 2.32.0.613.g20d5ce26552