[CC trimmed; To = Lorenzo]
Hi Lorenzo,
I've seen the news from , and thought
this recent experiment in the build system of the Linux man-pages
project might seem relevant to you.
> Date: 2026-08-30 18:55:19+0200
> From: Alejandro Colomar
>
> Hi Ingo,
>
> > Date: 2026-08-30 16:51:24+0200
> > From: Alejandro Colomar
> >
> > Ingo complained that the size of the database is huge. We can't make it
> > much smaller than this, but at least we can shrink it to one third.
> >
> > Using suffix rules, we avoid having an explicit copy of the file list
> > in the rules, and thus optimizes the makefiles so that make(1)'s
> > database shrinks to around 1/3rd of the size. The time for running
> > 'make nothing' also improves from ~ 0.45 s to ~ 0.33 s in my computer.
>
> While this optimizes the size of make(1)'s database, and the run-time
> of the configuration part (everything before the targets start running),
> the actual work of the build is slowed down by orders of magnitude
> (I suspect associating targets with suffix rules is more expensive than
> explicit rules). Thus, I've dropped this change. I can live with a
> somewhat-larger database, and make(1) seems to be fast with it.
The Linux man-pages Makefile-only build system uses explicit rules
everywhere, listing all target files in our makefile rules. We use
'static pattern rules' almost everywhere.
Here's for example the rule we use to build the C programs in the
EXAMPLES sections of manual pages:
ext ::= .o
xfail ::= $(MAKEFILEDIR)/build/examples/cc.xfail
tgts ::= $(patsubst %.c, %$(ext), $(_EX_TU_c))
ifeq ($(SKIP_XFAIL),yes)
tgts ::= $(filter-out $(patsubst %.c, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(tgts))
endif
_EX_TU_o ::= $(tgts)
$(_EX_TU_o): %$(ext): %.c $(MK)
$(info $(INFO_)CC $@)
$(CC) -c $(CFLAGS_) $(CPPFLAGS_) -o $@ $<
Recently (as shown in the quoted text above), I thought using regular
'pattern rules' might improve the build times, as the database used by
make(1) wouldn't need expanding all that text at once when defining the
rules, and indeed reduces that database to 1/3rd of the original size.
However, after trying it, the build times of a full build worsened by
orders of magnitude, and the time of a no-op build was only reduced by
fractions of a second (since it only takes a fraction of a second in the
first place).
I believe 'static pattern rules' go through simpler decision paths
within make(1), which might be the reason for the performance
differences I've experimented.
From what I've seen, the kernel seems to use regular 'pattern rules'
extensively. I wonder if moving to 'static pattern rules' would bring
a benefit similar to the one we experience in the Linux man-pages
project.
Another important thing is that the build system of the Linux man-pages
uses a single make(1) process to build (i.e., we don't use recursive
make(1)). That makes it parallelize better. I'm not sure whether the
kernel makefiles are recursive (for the main build) and how much that
affects the kernel build. It might be something to check too, as I
remember it was very impactful. Recursive make(1) is considered harmful
by some (I agree, IME).
Have a lovely day!
Alex
> Cheers,
> Alex
>
> >
> > Reported-by: Ingo Schwarze
> > Message-ID:
> > Signed-off-by: Alejandro Colomar
> > ---
> >
> > Hi Ingo,
> >
> > Here's an optimization for the man-pages' build system. Would you mind
> > checking if this also shows similar improvements in your system?
> >
> >
> > Have a lovely day!
> > Alex
> >
> > share/mk/build/catman/eqn.mk | 2 +-
> > share/mk/build/catman/grotty.mk | 2 +-
> > share/mk/build/catman/troff.mk | 2 +-
> > share/mk/build/examples/cc.mk | 2 +-
> > share/mk/build/examples/dir.mk | 2 +-
> > share/mk/build/html/post-grohtml.mk | 2 +-
> > share/mk/build/html/troff.mk | 2 +-
> > share/mk/build/pdf/pages/eqn.mk | 2 +-
> > share/mk/build/pdf/pages/troff.mk | 2 +-
> > share/mk/build/pre/preconv.mk | 2 +-
> > share/mk/build/pre/tbl.mk | 2 +-
> > share/mk/build/ps/eqn.mk | 2 +-
> > share/mk/build/ps/grops.mk | 2 +-
> > share/mk/build/ps/troff.mk | 2 +-
> > share/mk/check/catman/col.mk | 2 +-
> > share/mk/check/catman/grep.mk | 2 +-
> > share/mk/lint/c/clang-tidy.mk | 11 ++---------
> > share/mk/lint/c/cppcheck.mk | 11 ++---------
> > share/mk/lint/c/cpplint.mk | 10 ++--------
> > share/mk/lint/c/iwyu.mk | 11 ++---------
> > share/mk/lint/man/blank.mk | 2 +-
> > share/mk/lint/man/dash.mk | 2 +-
> > share/mk/lint/man/mandoc.mk | 2 +-
> > share/mk/lint/man/poems.mk | 2 +-
> > share/mk/lint/man/quote.mk | 2 +-
> > share/mk/lint/man/so.mk | 2 +-
> > share/mk/lint/man/ws.mk | 2 +-
> > 27 files changed, 31 insertions(+), 58 deletions(-)
> >
> > diff --git a/share/mk/build/catman/eqn.mk b/share/mk/build/catman/eqn.mk
> > index 895662ac3710..e2830dab53ac 100644
> > --- a/share/mk/build/catman/eqn.mk
> > +++ b/share/mk/build/catman/eqn.mk
> > @@ -18,7 +18,7 @@ ext ::= .cat.troff
> > _CATMAN_troff ::= $(patsubst %.eqn, %$(ext), $(_MAN_eqn))
> >
> >
> > -$(_CATMAN_troff): %$(ext): %.eqn $(MK) | $$(@D)/
> > +%$(ext): %.eqn $(MK) | $$(@D)/
> > $(info $(INFO_)EQN $@)
> > ! ($(EQN) -T$(NROFF_OUT_DEVICE) $(EQNFLAGS_) <$< 2>&1 >$@) \
> > | $(GREP) ^ >&2
> > diff --git a/share/mk/build/catman/grotty.mk b/share/mk/build/catman/grotty.mk
> > index 66151b6cee93..a578edbeb191 100644
> > --- a/share/mk/build/catman/grotty.mk
> > +++ b/share/mk/build/catman/grotty.mk
> > @@ -16,7 +16,7 @@ ext ::= .cat
> > _CATMAN ::= $(patsubst %.cat.set, %$(ext), $(_CATMAN_set))
> >
> >
> > -$(_CATMAN): %$(ext): %.cat.set $(MK) | $$(@D)/
> > +%$(ext): %.cat.set $(MK) | $$(@D)/
> > $(info $(INFO_)GROTTY $@)
> > $(GROTTY) $(GROTTYFLAGS_) <$< >$@
> >
> > diff --git a/share/mk/build/catman/troff.mk b/share/mk/build/catman/troff.mk
> > index 07e315327278..fc5bf0c18de8 100644
> > --- a/share/mk/build/catman/troff.mk
> > +++ b/share/mk/build/catman/troff.mk
> > @@ -28,7 +28,7 @@ endif
> > _CATMAN_set ::= $(tgts)
> >
> >
> > -$(_CATMAN_set): %$(ext): %.cat.troff $(regexf) $(MK) | $$(@D)/
> > +%$(ext): %.cat.troff $(regexf) $(MK) | $$(@D)/
> > $(info $(INFO_)TROFF $@)
> > ! ($(TROFF) -mandoc $(TROFFFLAGS_) $(NROFFFLAGS_) <$< 2>&1 >$@ \
> > | $(GREP) -v -f '$(filter %.grep, $^)' \
> > diff --git a/share/mk/build/examples/cc.mk b/share/mk/build/examples/cc.mk
> > index 680b80f3e832..5806d8de0118 100644
> > --- a/share/mk/build/examples/cc.mk
> > +++ b/share/mk/build/examples/cc.mk
> > @@ -25,7 +25,7 @@ endif
> > _EX_TU_o ::= $(tgts)
> >
> >
> > -$(_EX_TU_o): %$(ext): %.c $(MK)
> > +%$(ext): %.c $(MK)
> > $(info $(INFO_)CC $@)
> > $(CC) -c $(CFLAGS_) $(CPPFLAGS_) -o $@ $<
> >
> > diff --git a/share/mk/build/examples/dir.mk b/share/mk/build/examples/dir.mk
> > index 10286c73bc0c..9782ad300193 100644
> > --- a/share/mk/build/examples/dir.mk
> > +++ b/share/mk/build/examples/dir.mk
> > @@ -14,7 +14,7 @@ include $(MAKEFILEDIR)/configure/build-depends/coreutils/touch.mk
> > _PAGEEXDIRS ::= $(patsubst %, %.d/, $(_NONSO))
> >
> >
> > -$(_PAGEEXDIRS):
> > +%.d/:
> > +$(info $(INFO_)MKDIR $@)
> > +$(MKDIR) -p $@
> > +$(TOUCH) $@
> > diff --git a/share/mk/build/html/post-grohtml.mk b/share/mk/build/html/post-grohtml.mk
> > index 0c96a78609d8..fa886f09d0d8 100644
> > --- a/share/mk/build/html/post-grohtml.mk
> > +++ b/share/mk/build/html/post-grohtml.mk
> > @@ -16,7 +16,7 @@ ext ::= .html
> > _HTMLMAN ::= $(patsubst %.html.set, %$(ext), $(_HTMLMAN_set))
> >
> >
> > -$(_HTMLMAN): %$(ext): %.html.set $(MK) | $$(@D)/
> > +%$(ext): %.html.set $(MK) | $$(@D)/
> > $(info $(INFO_)POST_GROHTML $@)
> > $(POST_GROHTML) $(POST_GROHTMLFLAGS_) <$< >$@
> >
> > diff --git a/share/mk/build/html/troff.mk b/share/mk/build/html/troff.mk
> > index b6c1e659b7e4..6bdf9db1dbfa 100644
> > --- a/share/mk/build/html/troff.mk
> > +++ b/share/mk/build/html/troff.mk
> > @@ -25,7 +25,7 @@ endif
> > _HTMLMAN_set ::= $(tgts)
> >
> >
> > -$(_HTMLMAN_set): %$(ext): %.eqn $(MK) | $$(@D)/
> > +%$(ext): %.eqn $(MK) | $$(@D)/
> > $(info $(INFO_)TROFF $@)
> > ! ($(TROFF) -mandoc -Thtml $(TROFFFLAGS_) <$< 2>&1 >$@) \
> > | $(GREP) ^ >&2
> > diff --git a/share/mk/build/pdf/pages/eqn.mk b/share/mk/build/pdf/pages/eqn.mk
> > index 6ef945af3e10..49b1a72c6b08 100644
> > --- a/share/mk/build/pdf/pages/eqn.mk
> > +++ b/share/mk/build/pdf/pages/eqn.mk
> > @@ -17,7 +17,7 @@ ext ::= .pdf.troff
> > _PDFMAN_troff ::= $(patsubst %.eqn, %$(ext), $(_MAN_eqn))
> >
> >
> > -$(_PDFMAN_troff): %$(ext): %.eqn $(MK) | $$(@D)/
> > +%$(ext): %.eqn $(MK) | $$(@D)/
> > $(info $(INFO_)EQN $@)
> > ! ($(EQN) -Tpdf $(EQNFLAGS_) <$< 2>&1 >$@) \
> > | $(GREP) ^ >&2
> > diff --git a/share/mk/build/pdf/pages/troff.mk b/share/mk/build/pdf/pages/troff.mk
> > index e4c4d347fe6c..550168646d5b 100644
> > --- a/share/mk/build/pdf/pages/troff.mk
> > +++ b/share/mk/build/pdf/pages/troff.mk
> > @@ -25,7 +25,7 @@ endif
> > _PDFMAN_set ::= $(tgts)
> >
> >
> > -$(_PDFMAN_set): %$(ext): %.pdf.troff $(MK) | $$(@D)/
> > +%$(ext): %.pdf.troff $(MK) | $$(@D)/
> > $(info $(INFO_)TROFF $@)
> > ! ($(TROFF) -mandoc -Tpdf $(TROFFFLAGS_) <$< 2>&1 >$@) \
> > | $(GREP) ^ >&2
> > diff --git a/share/mk/build/pre/preconv.mk b/share/mk/build/pre/preconv.mk
> > index d19d12d261d7..e3dde5981949 100644
> > --- a/share/mk/build/pre/preconv.mk
> > +++ b/share/mk/build/pre/preconv.mk
> > @@ -16,7 +16,7 @@ ext ::= .tbl
> > _MAN_tbl ::= $(patsubst %, %$(ext), $(_NONSO))
> >
> >
> > -$(_MAN_tbl): %$(ext): % $(MK) | $$(@D)/
> > +%$(ext): % $(MK) | $$(@D)/
> > $(info $(INFO_)PRECONV $@)
> > $(PRECONV) $(PRECONVFLAGS_) $< >$@
> >
> > diff --git a/share/mk/build/pre/tbl.mk b/share/mk/build/pre/tbl.mk
> > index 5883b6ec0c80..0375b958ff05 100644
> > --- a/share/mk/build/pre/tbl.mk
> > +++ b/share/mk/build/pre/tbl.mk
> > @@ -16,7 +16,7 @@ ext ::= .eqn
> > _MAN_eqn ::= $(patsubst %.tbl, %$(ext), $(_MAN_tbl))
> >
> >
> > -$(_MAN_eqn): %$(ext): %.tbl $(MK) | $$(@D)/
> > +%$(ext): %.tbl $(MK) | $$(@D)/
> > $(info $(INFO_)TBL $@)
> > $(TBL) <$< >$@
> >
> > diff --git a/share/mk/build/ps/eqn.mk b/share/mk/build/ps/eqn.mk
> > index 315bed0e4cde..18c885655c99 100644
> > --- a/share/mk/build/ps/eqn.mk
> > +++ b/share/mk/build/ps/eqn.mk
> > @@ -17,7 +17,7 @@ ext ::= .ps.troff
> > _PSMAN_troff ::= $(patsubst %.eqn, %$(ext), $(_MAN_eqn))
> >
> >
> > -$(_PSMAN_troff): %$(ext): %.eqn $(MK) | $$(@D)/
> > +%$(ext): %.eqn $(MK) | $$(@D)/
> > $(info $(INFO_)EQN $@)
> > ! ($(EQN) -Tps $(EQNFLAGS_) <$< 2>&1 >$@) \
> > | $(GREP) ^ >&2
> > diff --git a/share/mk/build/ps/grops.mk b/share/mk/build/ps/grops.mk
> > index 463c7bac6f08..4b85b6a96854 100644
> > --- a/share/mk/build/ps/grops.mk
> > +++ b/share/mk/build/ps/grops.mk
> > @@ -16,7 +16,7 @@ ext ::= .ps
> > _PSMAN ::= $(patsubst %.ps.set, %$(ext), $(_PSMAN_set))
> >
> >
> > -$(_PSMAN): %$(ext): %.ps.set $(MK) | $$(@D)/
> > +%$(ext): %.ps.set $(MK) | $$(@D)/
> > $(info $(INFO_)GROPS $@)
> > $(GROPS) $(GROPSFLAGS_) <$< >$@
> >
> > diff --git a/share/mk/build/ps/troff.mk b/share/mk/build/ps/troff.mk
> > index 851fb971faf3..8137014fe9e9 100644
> > --- a/share/mk/build/ps/troff.mk
> > +++ b/share/mk/build/ps/troff.mk
> > @@ -25,7 +25,7 @@ endif
> > _PSMAN_set ::= $(tgts)
> >
> >
> > -$(_PSMAN_set): %$(ext): %.ps.troff $(MK) | $$(@D)/
> > +%$(ext): %.ps.troff $(MK) | $$(@D)/
> > $(info $(INFO_)TROFF $@)
> > ! ($(TROFF) -mandoc -Tps $(TROFFFLAGS_) <$< 2>&1 >$@) \
> > | $(GREP) ^ >&2
> > diff --git a/share/mk/check/catman/col.mk b/share/mk/check/catman/col.mk
> > index 25b8b6e154a6..de326d989183 100644
> > --- a/share/mk/check/catman/col.mk
> > +++ b/share/mk/check/catman/col.mk
> > @@ -16,7 +16,7 @@ ext ::= .cat.grep
> > _CHECK_catman_grep ::= $(patsubst %.cat, %$(ext), $(_CATMAN))
> >
> >
> > -$(_CHECK_catman_grep): %$(ext): %.cat $(MK) | $$(@D)/
> > +%$(ext): %.cat $(MK) | $$(@D)/
> > $(info $(INFO_)COL $@)
> > $(COL) $(COLFLAGS_) <$< >$@
> >
> > diff --git a/share/mk/check/catman/grep.mk b/share/mk/check/catman/grep.mk
> > index bcfa1a134459..2fce886ae920 100644
> > --- a/share/mk/check/catman/grep.mk
> > +++ b/share/mk/check/catman/grep.mk
> > @@ -25,7 +25,7 @@ endif
> > _CHECK_catman ::= $(tgts)
> >
> >
> > -$(_CHECK_catman): %.check-catman.touch: %.cat.grep $(MK) | $$(@D)/
> > +%.check-catman.touch: %.cat.grep $(MK) | $$(@D)/
> > $(info $(INFO_)GREP $@)
> > ! $(GREP) -n '.\{$(MANWIDTH)\}.' $< /dev/null >&2
> > $(TOUCH) $@
> > diff --git a/share/mk/lint/c/clang-tidy.mk b/share/mk/lint/c/clang-tidy.mk
> > index 8333c8ace12c..d992b956baf3 100644
> > --- a/share/mk/lint/c/clang-tidy.mk
> > +++ b/share/mk/lint/c/clang-tidy.mk
> > @@ -24,14 +24,8 @@ ifeq ($(SKIP_XFAIL),yes)
> > tgts_EX ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(tgts_EX))
> > endif
> >
> > -tgts ::= $(tgts_EX)
> >
> > -
> > -$(tgts_EX): %$(ext): %
> > -$(tgts): $(CLANG_TIDY_CONF) $(MK) | $$(@D)/
> > -
> > -
> > -$(tgts):
> > +%$(ext): % $(CLANG_TIDY_CONF) $(MK) | $$(@D)/
> > $(info $(INFO_)CLANG_TIDY $@)
> > $(CLANG_TIDY) $(CLANG_TIDYFLAGS_) $< -- $(CLANGFLAGS_) $(CPPFLAGS_) 2>&1 \
> > | $(SED) '/generated\.$$/d' >&2
> > @@ -39,13 +33,12 @@ $(tgts):
> >
> >
> > .PHONY: lint-c-clang-tidy
> > -lint-c-clang-tidy: $(tgts);
> > +lint-c-clang-tidy: $(tgts_EX);
> >
> >
> > undefine ext
> > undefine xfail
> > undefine tgts_EX
> > -undefine tgts
> >
> >
> > endif # include guard
> > diff --git a/share/mk/lint/c/cppcheck.mk b/share/mk/lint/c/cppcheck.mk
> > index c377120e4fa1..3952414c9cfd 100644
> > --- a/share/mk/lint/c/cppcheck.mk
> > +++ b/share/mk/lint/c/cppcheck.mk
> > @@ -21,27 +21,20 @@ ifeq ($(SKIP_XFAIL),yes)
> > tgts_EX ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(tgts_EX))
> > endif
> >
> > -tgts ::= $(tgts_EX)
> >
> > -
> > -$(tgts_EX): %$(ext): %
> > -$(tgts): $(CPPCHECK_SUPPRESS) $(MK) | $$(@D)/
> > -
> > -
> > -$(tgts):
> > +%$(ext): % $(CPPCHECK_SUPPRESS) $(MK) | $$(@D)/
> > $(info $(INFO_)CPPCHECK $@)
> > $(CPPCHECK) $(CPPCHECKFLAGS_) $<
> > $(TOUCH) $@
> >
> >
> > .PHONY: lint-c-cppcheck
> > -lint-c-cppcheck: $(tgts);
> > +lint-c-cppcheck: $(tgts_EX);
> >
> >
> > undefine ext
> > undefine xfail
> > undefine tgts_EX
> > -undefine tgts
> >
> >
> > endif # include guard
> > diff --git a/share/mk/lint/c/cpplint.mk b/share/mk/lint/c/cpplint.mk
> > index 6a714bc315ad..9ecef7f45553 100644
> > --- a/share/mk/lint/c/cpplint.mk
> > +++ b/share/mk/lint/c/cpplint.mk
> > @@ -13,26 +13,20 @@ include $(MAKEFILEDIR)/configure/build-depends/cpplint/cpplint.mk
> >
> > ext ::= .lint-c.cpplint.touch
> > tgts_EX ::= $(patsubst %, %$(ext), $(_EX_TU_src))
> > -tgts ::= $(tgts_EX)
> >
> >
> > -$(tgts_EX): %$(ext): %
> > -$(tgts): $(CPPLINT_CONF) $(MK) | $$(@D)/
> > -
> > -
> > -$(tgts):
> > +%$(ext): % $(CPPLINT_CONF) $(MK) | $$(@D)/
> > $(info $(INFO_)CPPLINT $@)
> > $(CPPLINT) $(CPPLINTFLAGS_) $< >/dev/null
> > $(TOUCH) $@
> >
> >
> > .PHONY: lint-c-cpplint
> > -lint-c-cpplint: $(tgts);
> > +lint-c-cpplint: $(tgts_EX);
> >
> >
> > undefine ext
> > undefine tgts_EX
> > -undefine tgts
> >
> >
> > endif # include guard
> > diff --git a/share/mk/lint/c/iwyu.mk b/share/mk/lint/c/iwyu.mk
> > index e4477dbfac58..03bc68f55546 100644
> > --- a/share/mk/lint/c/iwyu.mk
> > +++ b/share/mk/lint/c/iwyu.mk
> > @@ -27,14 +27,8 @@ ifeq ($(SKIP_XFAIL),yes)
> > tgts_EX ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(tgts_EX))
> > endif
> >
> > -tgts ::= $(tgts_EX)
> >
> > -
> > -$(tgts_EX): %$(ext): %
> > -$(tgts): $(MK) | $$(@D)/
> > -
> > -
> > -$(tgts):
> > +%$(ext): % $(MK) | $$(@D)/
> > $(info $(INFO_)IWYU $@)
> > ! ($(IWYU) $(IWYUFLAGS_) $(CLANGFLAGS_) $(CPPFLAGS_) $< 2>&1 \
> > | $(SED) -n '/should add these lines:/,$$p' \
> > @@ -48,13 +42,12 @@ $(tgts):
> >
> >
> > .PHONY: lint-c-iwyu
> > -lint-c-iwyu: $(tgts);
> > +lint-c-iwyu: $(tgts_EX);
> >
> >
> > undefine ext
> > undefine xfail
> > undefine tgts_EX
> > -undefine tgts
> >
> >
> > endif # include guard
> > diff --git a/share/mk/lint/man/blank.mk b/share/mk/lint/man/blank.mk
> > index f8eca7ac86b7..8fc7ad4be0a8 100644
> > --- a/share/mk/lint/man/blank.mk
> > +++ b/share/mk/lint/man/blank.mk
> > @@ -22,7 +22,7 @@ tgts ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(t
> > endif
> >
> >
> > -$(tgts): %$(ext): % $(MK) | $$(@D)/
> > +%$(ext): % $(MK) | $$(@D)/
> > $(info $(INFO_)GREP $@)
> > $(CAT) <$< \
> > | if $(GREP) '^$$' >/dev/null; then \
> > diff --git a/share/mk/lint/man/dash.mk b/share/mk/lint/man/dash.mk
> > index 85307af0e449..d82ac734880d 100644
> > --- a/share/mk/lint/man/dash.mk
> > +++ b/share/mk/lint/man/dash.mk
> > @@ -21,7 +21,7 @@ regexf ::= $(MAKEFILEDIR)/lint/man/dash.pcre2grep
> > tgts ::= $(patsubst %, %$(ext), $(_NONSO))
> >
> >
> > -$(tgts): %$(ext): % $(regexf) $(MK) | $$(@D)/
> > +%$(ext): % $(regexf) $(MK) | $$(@D)/
> > $(info $(INFO_)PCRE2GREP $@)
> > $(CAT) <$< \
> > | if $(PCRE2GREP) -f '$(filter %.pcre2grep, $^)' >/dev/null; then \
> > diff --git a/share/mk/lint/man/mandoc.mk b/share/mk/lint/man/mandoc.mk
> > index 5c24ca66ee7a..d96f94439933 100644
> > --- a/share/mk/lint/man/mandoc.mk
> > +++ b/share/mk/lint/man/mandoc.mk
> > @@ -25,7 +25,7 @@ tgts ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(t
> > endif
> >
> >
> > -$(tgts): %$(ext): % $(regexf) $(MK) | $$(@D)/
> > +%$(ext): % $(regexf) $(MK) | $$(@D)/
> > $(info $(INFO_)MANDOC $@)
> > ! ($(MANDOC) $(MANDOCFLAGS_) $< 2>&1 \
> > | $(GREP) -v -f '$(filter %.grep, $^)' \
> > diff --git a/share/mk/lint/man/poems.mk b/share/mk/lint/man/poems.mk
> > index b7ee792f346c..b0e799d2997a 100644
> > --- a/share/mk/lint/man/poems.mk
> > +++ b/share/mk/lint/man/poems.mk
> > @@ -25,7 +25,7 @@ tgts ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(t
> > endif
> >
> >
> > -$(tgts): %$(ext): % $(regexf) $(MK) | $$(@D)/
> > +%$(ext): % $(regexf) $(MK) | $$(@D)/
> > $(info $(INFO_)PCRE2GREP $@)
> > $(CAT) <$< \
> > | if $(PCRE2GREP) -f '$(filter %.pcre2grep, $^)' >/dev/null; then \
> > diff --git a/share/mk/lint/man/quote.mk b/share/mk/lint/man/quote.mk
> > index 3aca334967c0..86bc397c1d2b 100644
> > --- a/share/mk/lint/man/quote.mk
> > +++ b/share/mk/lint/man/quote.mk
> > @@ -23,7 +23,7 @@ tgts ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(t
> > endif
> >
> >
> > -$(tgts): %$(ext): % $(regexf) $(MK) | $$(@D)/
> > +%$(ext): % $(regexf) $(MK) | $$(@D)/
> > $(info $(INFO_)GREP $@)
> > $(CAT) <$< \
> > | if $(GREP) -Pf $(filter %.Pgrep, $^) >/dev/null; then \
> > diff --git a/share/mk/lint/man/so.mk b/share/mk/lint/man/so.mk
> > index 09b7816ae38f..cf8d6776e15d 100644
> > --- a/share/mk/lint/man/so.mk
> > +++ b/share/mk/lint/man/so.mk
> > @@ -24,7 +24,7 @@ tgts ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(t
> > endif
> >
> >
> > -$(tgts): %$(ext): % $(MK) | $$(@D)/
> > +%$(ext): % $(MK) | $$(@D)/
> > $(info $(INFO_)FIND $@)
> > $(GREP) '^\.so ' <$< \
> > | $(CUT) -f2 -d' ' \
> > diff --git a/share/mk/lint/man/ws.mk b/share/mk/lint/man/ws.mk
> > index 7fd3bb69361d..2f587fc4e6ea 100644
> > --- a/share/mk/lint/man/ws.mk
> > +++ b/share/mk/lint/man/ws.mk
> > @@ -23,7 +23,7 @@ tgts ::= $(filter-out $(patsubst %, $(_MANDIR)/%$(ext), $(file < $(xfail))), $(t
> > endif
> >
> >
> > -$(tgts): %$(ext): % $(regexf) $(MK) | $$(@D)/
> > +%$(ext): % $(regexf) $(MK) | $$(@D)/
> > $(info $(INFO_)GREP $@)
> > $(CAT) <$< \
> > | if $(GREP) -Ef $(filter %.egrep, $^) >/dev/null; then \
> >
> > Range-diff against v0:
> > -: ------------ > 1: 9a74fe43cf61 share/mk/: Use suffix rules where possible
> > --
> > 2.53.0
> >
>
>
>
> --
>
--