[PATCH v2] Record dependencies during build instead of before

Tomi Ollila tomi.ollila at iki.fi
Wed Apr 11 13:52:01 PDT 2012


On Wed, Apr 11 2012, Austin Clements <amdragon at MIT.EDU> wrote:

> Previously, the makefile created dependency files in a separate, first
> pass.  In particular, include-ing the dependency files would cause
> make to attempt to rebuild those files using the dependency-generation
> rules in the makefile.  Unfortunately, this approach required obtuse
> rules and silently delayed the start of the build process (by quite a
> bit on a clean tree without any dependency files).  Worse, this
> required the dependency files to themselves depend on all of the
> headers the source file depended on, which meant that, if a header
> file was removed, the depedency file could not be updated because of a
> missing dependency (!), which would cause make to silently fail.
>
> This patch eliminates the dependency generation rules and instead
> generates dependency files as a side-effect of the regular build rule.
> On the first build, we don't need to know the dependencies beforehand;
> the object file doesn't exist, so it will be built anyway.  On
> subsequent builds, if a header file is updated, the dependency rules
> generated by the previous build will force a rebuild.  If a source
> file is updated, the dependency rules may be stale, but it doesn't
> matter because the updated source file will force a rebuild.
>
> In the final case above, the stale dependency rules may refer to a
> header file that no longer exists but is also no longer needed.  In
> order to prevent this from breaking the build, we also pass gcc the
> -MP option, which generates phony targets for every depended-on header
> file, so make won't complain if it can't find them during a later
> build.
> ---

Looks good, patch applies and works (at least the cases I tested and
examined). And is definitely better than before.

+1

Tomi 

> Sorry, the previous version of this patch was corrupted.  Hopefully
> this one will be correct.
>
>  Makefile.local |   18 ++++--------------
>  1 files changed, 4 insertions(+), 14 deletions(-)
>


More information about the notmuch mailing list