On Sun, Nov 27 2022, Paul Smith wrote: > A GNU make pattern rule with multiple targets has always meant that > a single invocation of the recipe will build all the targets. > However in older versions of GNU make a recipe that did not really > build all the targets would be tolerated. > > Starting with GNU make 4.4 this behavior is deprecated and pattern > rules are expected to generate files to match all the patterns. > If not all targets are created then GNU make will not consider any > target up to date and will re-run the recipe when it is run again. > > Modify Documentation/Makefile to split the man page-creating pattern > rule into a separate pattern rule for each pattern. > > Reported-by: Alexander Kanavin <alex.kanavin@xxxxxxxxx> > Signed-off-by: Paul Smith <psmith@xxxxxxx> > --- Thanks for fixing downstream, and for working on GNU make. > Documentation/Makefile | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/Documentation/Makefile b/Documentation/Makefile > index d47acb2e25..21375cd3f2 100644 > --- a/Documentation/Makefile > +++ b/Documentation/Makefile > @@ -351,8 +351,16 @@ $(OBSOLETE_HTML): %.html : %.txto $(ASCIIDOC_DEPS) > manpage-base-url.xsl: manpage-base-url.xsl.in > $(QUIET_GEN)sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@ > > -%.1 %.5 %.7 : %.xml manpage-base-url.xsl $(wildcard manpage*.xsl) > - $(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< > + > +manpage-prereqs := manpage-base-url.xsl $(wildcard manpage*.xsl) > +manpage-cmd = $(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< > + > +%.1 : %.xml $(manpage-prereqs) > + $(manpage-cmd) > +%.5 : %.xml $(manpage-prereqs) > + $(manpage-cmd) > +%.7 : %.xml $(manpage-prereqs) > + $(manpage-cmd) > > %.xml : %.txt $(ASCIIDOC_DEPS) > $(QUIET_ASCIIDOC)$(TXT_TO_XML) -d manpage -o $@ $< Whether we use eval/define or not (I just tried to avoid the repetition) I think referring to $(DOC_MAN[157]) here probably makes more sense if we're poking at these rules. I.e. in this case the rest of the Makefile is carrying forward what manpages we're generating exactly, so rather than a wildcard %.1 to %.xml we can narrow it down to just the %.1 files we're going to b generating (but maybe that's best left for later...): diff --git a/Documentation/Makefile b/Documentation/Makefile index 5e1a7f655c2..7404cead084 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -351,8 +351,12 @@ $(OBSOLETE_HTML): %.html : %.txto $(ASCIIDOC_DEPS) manpage-base-url.xsl: manpage-base-url.xsl.in $(QUIET_GEN)sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@ -%.1 %.5 %.7 : %.xml manpage-base-url.xsl $(wildcard manpage*.xsl) - $(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< +define doc-man-tmpl +$$(DOC_MAN$(1)): %.$(1) : %.xml manpage-base-url.xsl $$(wildcard manpage*.xsl) + $$(QUIET_XMLTO)$$(XMLTO) -m $$(MANPAGE_XSL) $$(XMLTO_EXTRA) man $$< + +endef +$(eval $(foreach n,1 5 7,$(call doc-man-tmpl,$(n)))) %.xml : %.txt $(ASCIIDOC_DEPS) $(QUIET_ASCIIDOC)$(TXT_TO_XML) -d manpage -o $@ $<