1 Return-Path: <tomi.ollila@iki.fi>
\r
2 X-Original-To: notmuch@notmuchmail.org
\r
3 Delivered-To: notmuch@notmuchmail.org
\r
4 Received: from localhost (localhost [127.0.0.1])
\r
5 by olra.theworths.org (Postfix) with ESMTP id 47D6E431FAF
\r
6 for <notmuch@notmuchmail.org>; Wed, 11 Apr 2012 13:52:05 -0700 (PDT)
\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org
\r
11 X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none]
\r
13 Received: from olra.theworths.org ([127.0.0.1])
\r
14 by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)
\r
15 with ESMTP id 7TXx-Zosd5kZ for <notmuch@notmuchmail.org>;
\r
16 Wed, 11 Apr 2012 13:52:04 -0700 (PDT)
\r
17 Received: from guru.guru-group.fi (guru-group.fi [87.108.86.66])
\r
18 by olra.theworths.org (Postfix) with ESMTP id 1ABE3431FAE
\r
19 for <notmuch@notmuchmail.org>; Wed, 11 Apr 2012 13:52:04 -0700 (PDT)
\r
20 Received: by guru.guru-group.fi (Postfix, from userid 501)
\r
21 id 4997068055; Wed, 11 Apr 2012 23:52:01 +0300 (EEST)
\r
22 From: Tomi Ollila <tomi.ollila@iki.fi>
\r
23 To: Austin Clements <amdragon@MIT.EDU>, notmuch@notmuchmail.org
\r
24 Subject: Re: [PATCH v2] Record dependencies during build instead of before
\r
25 In-Reply-To: <1334176719-24781-1-git-send-email-amdragon@mit.edu>
\r
26 References: <1333857710-24511-1-git-send-email-amdragon@mit.edu>
\r
27 <1334176719-24781-1-git-send-email-amdragon@mit.edu>User-Agent:
\r
28 Notmuch/0.12+77~gee11800 (http://notmuchmail.org) Emacs/23.3.1
\r
29 (x86_64-unknown-linux-gnu)
\r
30 X-Face: HhBM'cA~<r"^Xv\KRN0P{vn'Y"Kd;zg_y3S[4)KSN~s?O\"QPoL
\r
31 $[Xv_BD:i/F$WiEWax}R(MPS`^UaptOGD`*/=@\1lKoVa9tnrg0TW?"r7aRtgk[F
\r
32 !)g;OY^,BjTbr)Np:%c_o'jj,Z
\r
33 Date: Wed, 11 Apr 2012 23:52:01 +0300
\r
34 Message-ID: <m2aa2i800e.fsf@guru.guru-group.fi>
\r
36 Content-Type: text/plain; charset=us-ascii
\r
37 X-BeenThere: notmuch@notmuchmail.org
\r
38 X-Mailman-Version: 2.1.13
\r
40 List-Id: "Use and development of the notmuch mail system."
\r
41 <notmuch.notmuchmail.org>
\r
42 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,
\r
43 <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
\r
44 List-Archive: <http://notmuchmail.org/pipermail/notmuch>
\r
45 List-Post: <mailto:notmuch@notmuchmail.org>
\r
46 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
\r
47 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,
\r
48 <mailto:notmuch-request@notmuchmail.org?subject=subscribe>
\r
49 X-List-Received-Date: Wed, 11 Apr 2012 20:52:05 -0000
\r
51 On Wed, Apr 11 2012, Austin Clements <amdragon@MIT.EDU> wrote:
\r
53 > Previously, the makefile created dependency files in a separate, first
\r
54 > pass. In particular, include-ing the dependency files would cause
\r
55 > make to attempt to rebuild those files using the dependency-generation
\r
56 > rules in the makefile. Unfortunately, this approach required obtuse
\r
57 > rules and silently delayed the start of the build process (by quite a
\r
58 > bit on a clean tree without any dependency files). Worse, this
\r
59 > required the dependency files to themselves depend on all of the
\r
60 > headers the source file depended on, which meant that, if a header
\r
61 > file was removed, the depedency file could not be updated because of a
\r
62 > missing dependency (!), which would cause make to silently fail.
\r
64 > This patch eliminates the dependency generation rules and instead
\r
65 > generates dependency files as a side-effect of the regular build rule.
\r
66 > On the first build, we don't need to know the dependencies beforehand;
\r
67 > the object file doesn't exist, so it will be built anyway. On
\r
68 > subsequent builds, if a header file is updated, the dependency rules
\r
69 > generated by the previous build will force a rebuild. If a source
\r
70 > file is updated, the dependency rules may be stale, but it doesn't
\r
71 > matter because the updated source file will force a rebuild.
\r
73 > In the final case above, the stale dependency rules may refer to a
\r
74 > header file that no longer exists but is also no longer needed. In
\r
75 > order to prevent this from breaking the build, we also pass gcc the
\r
76 > -MP option, which generates phony targets for every depended-on header
\r
77 > file, so make won't complain if it can't find them during a later
\r
81 Looks good, patch applies and works (at least the cases I tested and
\r
82 examined). And is definitely better than before.
\r
88 > Sorry, the previous version of this patch was corrupted. Hopefully
\r
89 > this one will be correct.
\r
91 > Makefile.local | 18 ++++--------------
\r
92 > 1 files changed, 4 insertions(+), 14 deletions(-)
\r