all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Julien Lepiller <julien@lepiller.eu>
To: guix-devel@gnu.org, "Chris Marusich" <cmmarusich@gmail.com>,
	"Ludovic Courtès" <ludo@gnu.org>
Subject: Re: Makefile logic to create Guix documentation
Date: Sat, 13 Jun 2020 23:12:47 -0400	[thread overview]
Message-ID: <FFBCDDF3-9FA9-4D08-92AB-A81D44AB0B34@lepiller.eu> (raw)
In-Reply-To: <87lfkqtqui.fsf@gmail.com>

Le 13 juin 2020 20:48:21 GMT-04:00, Chris Marusich <cmmarusich@gmail.com> a écrit :
>Hi Ludo,
>
>I was reading through the Makefile that creates the documentation, and
>I
>came across some parts I couldn't understand, even though I spent a few
>hours trying to figure it out.  I thought you might know the answers to
>my questions off the top of your head, since I think you wrote it.
>
>First, consider this snippet from doc/local.mk:
>
>--8<---------------cut here---------------start------------->8---
># We cannot add new dependencies to `%D%/guix.pdf' & co. (info
>"(automake)
># Extending").  Using the `-local' rules is imperfect, because they may
>be
># triggered after the main rule.  Oh, well.
>pdf-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.pdf)
>info-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.png)
>ps-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.eps)		\
>	  $(top_srcdir)/%D%/images/coreutils-size-map.eps
>dvi-local: ps-local
>--8<---------------cut here---------------end--------------->8---
>
>What is this syntax called?  I checked the Make, Automake, and Autoconf
>manuals, but I couldn't find anything.  I'm talking about this syntax:
>
>  info-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.png)
>
>It looks like when you added this, you intended to add a *.png
>prerequisite to the info-local target for every equivalent *.dot file
>that exists.  My guess is you want to ensure that the PNG files are
>generated before the info page gets created, since the PNG files are
>required in order to build the info page.  However, is it possible you
>meant to write it like the following instead?  (The first "=" has been
>replaced with a ":".)
>
>  info-local: $(DOT_FILES:%.dot=$(top_srcdir)/%.png)
>                         
>When using ":", I recognize this syntax as a "substitution reference"
>(see: (make) Substitution Refs).  However, I do not know what it is
>supposed to be when the ":" is replaced with a "=".  Is it a typo?
>
>I experimented by adding a snippet like the following to the generated
>Makefile...
>
>--8<---------------cut here---------------start------------->8---
>marucustom: $(DOT_FILES=%.dot=$(top_srcdir)/%.eps)
>	@echo XXXXX expansion is: _$(DOT_FILES=%.dot=$(top_srcdir)/%.eps)_
>	@echo XXXXX prerequisite: $<
>	@echo XXXXX target: $@
>--8<---------------cut here---------------end--------------->8---
>
>...and it seems to cause make to substitute an empty string:
>
>--8<---------------cut here---------------start------------->8---
>$ make marucustom
>XXXXX expansion is: __
>XXXXX prerequisite:
>XXXXX target: marucustom
>--8<---------------cut here---------------end--------------->8---
>
>Second, I noticed some rules like the following:
>
>--8<---------------cut here---------------start------------->8---
>.dot.eps:
>	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
>	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>--8<---------------cut here---------------end--------------->8---
>
>What I do understand is that AM_V_DOT and DOT are set in Makefile.am
>and
>configure.ac, and that they are used to invoke the "dot" program.
>However, I couldn't quite understand the rest of this rule.
>
>Why are there no prerequisites?  It looks like the rule doesn't declare
>any prerequisites, so I'm confused about why the recipe includes
>references to the name of the first prerequisite ("$<").
>
>What causes this rule to be run?  I tried adding echo commands in the
>recipe like so...
>
>--8<---------------cut here---------------start------------->8---
>.dot.eps:
>	@echo YYYYY .dot.eps is running
>	@echo YYYYY target: %@
>	@echo YYYYY prerequisite: _$<_
>	$(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > "$(srcdir)/$@.tmp"; \
>	mv "$(srcdir)/$@.tmp" "$(srcdir)/$@"
>--8<---------------cut here---------------end--------------->8---
>
>...but I didn't see new messages when I ran "make" (from a clean
>checkout).  Maybe I didn't invoke make correctly.
>
>If you or anyone else could point out if I'm missing something, that'd
>be really helpful.  Thank you in advance!

Not sure for the rest, but .dot.eps: is similar to:

%.eps: %.dot

You often find .c.o in Makefiles for instance.


  reply	other threads:[~2020-06-14  3:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-14  0:48 Makefile logic to create Guix documentation Chris Marusich
2020-06-14  3:12 ` Julien Lepiller [this message]
2020-06-14  5:08   ` Chris Marusich
2020-06-16  9:40 ` Ludovic Courtès
2020-06-16 15:02   ` zimoun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=FFBCDDF3-9FA9-4D08-92AB-A81D44AB0B34@lepiller.eu \
    --to=julien@lepiller.eu \
    --cc=cmmarusich@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.