From 36dec3e9b6a300aa024ee610d14deee2f1b454dd Mon Sep 17 00:00:00 2001 From: Tomi Ollila Date: Thu, 20 Feb 2014 19:00:39 +0200 Subject: [PATCH] Re: [PATCH] emacs: Avoid rebuilding .eldeps even when there's nothing to do --- ac/be6d05d74f2b9b7a26bd52b597309e273609f5 | 124 ++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 ac/be6d05d74f2b9b7a26bd52b597309e273609f5 diff --git a/ac/be6d05d74f2b9b7a26bd52b597309e273609f5 b/ac/be6d05d74f2b9b7a26bd52b597309e273609f5 new file mode 100644 index 000000000..eeb203976 --- /dev/null +++ b/ac/be6d05d74f2b9b7a26bd52b597309e273609f5 @@ -0,0 +1,124 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id 2AAB4431FAE + for ; Thu, 20 Feb 2014 09:00:59 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: 0 +X-Spam-Level: +X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] + autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id mqpzXutF8yin for ; + Thu, 20 Feb 2014 09:00:51 -0800 (PST) +Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34]) + by olra.theworths.org (Postfix) with ESMTP id 79F07431FBD + for ; Thu, 20 Feb 2014 09:00:51 -0800 (PST) +Received: from guru.guru-group.fi (localhost [IPv6:::1]) + by guru.guru-group.fi (Postfix) with ESMTP id 9FE8310005E; + Thu, 20 Feb 2014 19:00:39 +0200 (EET) +From: Tomi Ollila +To: Austin Clements , notmuch@notmuchmail.org +Subject: Re: [PATCH] emacs: Avoid rebuilding .eldeps even when there's nothing + to do +In-Reply-To: <1392870264-11156-1-git-send-email-amdragon@mit.edu> +References: + <1392870264-11156-1-git-send-email-amdragon@mit.edu> +User-Agent: Notmuch/0.17+69~g761b031 (http://notmuchmail.org) Emacs/24.3.1 + (x86_64-unknown-linux-gnu) +X-Face: HhBM'cA~ +MIME-Version: 1.0 +Content-Type: text/plain +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Thu, 20 Feb 2014 17:00:59 -0000 + +On Thu, Feb 20 2014, Austin Clements 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 -- 2.26.2