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

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.
---
 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

  reply	other threads:[~2014-02-20  4:24 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               ` Austin Clements [this message]
2014-02-20 17:00                 ` [PATCH] emacs: Avoid rebuilding .eldeps even when there's nothing to do Tomi Ollila
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=1392870264-11156-1-git-send-email-amdragon@mit.edu \
    --to=amdragon@mit.edu \
    --cc=notmuch@notmuchmail.org \
    --cc=tomi.ollila@iki.fi \
    /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).