git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/1] Avoid multiple patterns when recipes generate one file

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Nov 28, 2022, 13:08 UTC
Message-ID
<221128.86mt8bkyqt.gmgdl@evledraar.gmail.com>
In-Reply-To
<20221127224251.2508200-2-psmith@gnu.org>
On Sun, Nov 27 2022, Paul Smith wrote:
Show 16 quoted lines
> 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@gmail.com>
> Signed-off-by: Paul Smith <psmith@gnu.org>
> ---
Thanks for fixing downstream, and for working on GNU make.
Show 26 quoted lines
>  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 $@ $<
Previous: Paul SmithNext: Paul Smith
Message 3 of 23 in “Avoid multiple patterns when recipes generate one file”
  1. 0/1 Avoid multiple patterns when recipes generate one filePaul Smith, Nov 27, 2022
  2. 1/1 Avoid multiple patterns when recipes generate one filePaul Smith, Nov 27, 2022
  3. Ævar Arnfjörð BjarmasonNov 28, 2022
  4. Paul SmithNov 28, 2022
  5. Ævar Arnfjörð BjarmasonNov 28, 2022
  6. 0/4 Makefiles: GNU make 4.4 fixesÆvar Arnfjörð Bjarmason, Nov 29, 2022
  7. 3/4 Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4Ævar Arnfjörð Bjarmason, Nov 29, 2022
  8. Junio C HamanoNov 30, 2022
  9. Paul SmithNov 30, 2022
  10. Ævar Arnfjörð BjarmasonDec 1, 2022
  11. 1/4 Documentation/Makefile: de-duplicate *.[157] dependency listÆvar Arnfjörð Bjarmason, Nov 29, 2022
  12. Junio C HamanoNov 30, 2022
  13. 2/4 Documentation/Makefile: avoid multiple patterns when generating one fileÆvar Arnfjörð Bjarmason, Nov 29, 2022
  14. Junio C HamanoNov 30, 2022
  15. 4/4 Documentation/Makefile: narrow wildcard rules to our known filesÆvar Arnfjörð Bjarmason, Nov 29, 2022
  16. Junio C HamanoNov 30, 2022
  17. 0/1 Makefiles: GNU make 4.4 fixesÆvar Arnfjörð Bjarmason, Nov 30, 2022
  18. 1/1 Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4Ævar Arnfjörð Bjarmason, Nov 30, 2022
  19. Paul SmithNov 30, 2022
  20. Junio C HamanoNov 30, 2022
  21. Johannes SchindelinDec 6, 2022
  22. Ævar Arnfjörð BjarmasonDec 6, 2022
  23. Junio C HamanoDec 6, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.