unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Tomi Ollila <tomi.ollila@iki.fi>
To: Austin Clements <amdragon@MIT.EDU>, notmuch@notmuchmail.org
Subject: Re: [PATCH] emacs: Avoid rebuilding .eldeps even when there's nothing to do
Date: Thu, 20 Feb 2014 19:00:39 +0200	[thread overview]
Message-ID: <m2ppmhwwg8.fsf@guru.guru-group.fi> (raw)
In-Reply-To: <1392870264-11156-1-git-send-email-amdragon@mit.edu>

On Thu, Feb 20 2014, Austin Clements <amdragon@MIT.EDU> wrote:

> Previously, we updated .eldeps only if the file contents actually
> needed to change.  This was done to avoid unnecessary make restarts
> (if the .eldeps rule changes the mtime of .eldeps, make has to restart
> to collect the new dependencies).  However, this meant that, after a
> modification to any .el file that did not change dependencies, .eldeps
> would always be out of date, so every make invocation would run the
> .eldeps rule, which is both expensive because it starts up Emacs and
> noisy.  This was true even when there was nothing to do.  E.g.,
>
> $ make clean && make
> ...
> $ touch emacs/notmuch-lib.el && make
> ...
> $ make
> Use "make V=1" to see the verbose compile lines.
> EMACS emacs/.eldeps
> make: Nothing to be done for `all'.
> $ make
> Use "make V=1" to see the verbose compile lines.
> EMACS emacs/.eldeps
> make: Nothing to be done for `all'.
>
> Fix this by replacing .eldeps with two files with identical content.
> One tracks the mtime of the dependency information and triggers the
> Emacs call to rebuild dependencies only when it may be necessary.  The
> other tracks the content only; this rule over-triggers in the same way
> the old rule did, but this rule is cheap and quiet.
> ---

LGTM. Works as expected.

Tomi

>  emacs/Makefile.local | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/emacs/Makefile.local b/emacs/Makefile.local
> index 42bfbd9..6a39b32 100644
> --- a/emacs/Makefile.local
> +++ b/emacs/Makefile.local
> @@ -33,10 +33,19 @@ ifeq ($(HAVE_EMACS),1)
>  $(dir)/.eldeps: $(dir)/Makefile.local $(dir)/make-deps.el $(emacs_sources)
>  	$(call quiet,EMACS) --directory emacs -batch -l make-deps.el \
>  		-f batch-make-deps $(emacs_sources) > $@.tmp && \
> -		(cmp -s $@.tmp $@ || mv $@.tmp $@)
> --include $(dir)/.eldeps
> +		mv $@.tmp $@
> +# We could include .eldeps directly, but that would cause a make
> +# restart whenever any .el file was modified, even if dependencies
> +# didn't change, because the mtime of .eldeps will change.  Instead,
> +# we include a second file, .eldeps.x, which we ensure always has the
> +# same content as .eldeps, but its mtime only changes when dependency
> +# information changes, in which case a make restart is necessary
> +# anyway.
> +$(dir)/.eldeps.x: $(dir)/.eldeps
> +	@cmp -s $^ $@ || cp $^ $@
> +-include $(dir)/.eldeps.x
>  endif
> -CLEAN+=$(dir)/.eldeps $(dir)/.eldeps.tmp
> +CLEAN+=$(dir)/.eldeps $(dir)/.eldeps.tmp $(dir)/.eldeps.x
>  
>  ifeq ($(HAVE_EMACS),1)
>  %.elc: %.el $(global_deps)
> -- 
> 1.8.4.rc3
>
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

  reply	other threads:[~2014-02-20 17:00 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-25 10:21 [PATCH 1/1] emacs: always write emacs/.eldeps when the target is remade Tomi Ollila
2014-02-13  7:10 ` Austin Clements
2014-02-13  7:26   ` Tomi Ollila
2014-02-13  7:49     ` Austin Clements
2014-02-14 19:24       ` Tomi Ollila
2014-02-14 21:58         ` Austin Clements
2014-02-19 19:54           ` Austin Clements
2014-02-19 20:47             ` Tomi Ollila
2014-02-20  4:24               ` [PATCH] emacs: Avoid rebuilding .eldeps even when there's nothing to do Austin Clements
2014-02-20 17:00                 ` Tomi Ollila [this message]
2014-02-22  1:21                 ` David Bremner

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

  List information: https://notmuchmail.org/

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

  git send-email \
    --in-reply-to=m2ppmhwwg8.fsf@guru.guru-group.fi \
    --to=tomi.ollila@iki.fi \
    --cc=amdragon@MIT.EDU \
    --cc=notmuch@notmuchmail.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 public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).