m4-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Support for GNU make dependency generation


From: David M. Warme
Subject: Re: [PATCH] Support for GNU make dependency generation
Date: Tue, 26 Oct 2010 09:41:24 -0400

This implementation appears to suffer from the various problems that
my proposed implementation fixes:

1. What does m4 put on the left-hand-side of the generated make
   dependency rule when m4 is sending its output to stdout?  There
   is no general way for m4 to know what the target is in this
   case.  (Consider, e.g., when stdout is the write end of a pipe.)
   My submitted patch avoids this problem by having the user
   specify the generated rule's target explicitly on the command
   line (always).

2. By creating both the dependency file and the actual m4 target
   file in one step, you wind up being in danger of "circular
   dependencies" -- running make twice in a row causes stuff to
   be remade the second time.  In certain cases, even an endless
   succession of "make" invocations causes stuff to get remade
   every time.  Single commands that update two or more targets
   at once are the usual cause of this behavior.  The fix is to
   have two separate rules in your Makefile:

   a. One to create the dependency file (it runs m4 in
      "dependency" mode and creates only the dependency file),
      and

   b. A second rule that invokes m4 in the "normal" way to create
      only the "normal" m4 target.

   This is how you avoid such circular dependencies.  Single
   Makefile rules that update multiple targets are generally a
   recipe for circular dependencies and should be avoided
   whenever possible.  My proposed implementation avoids this
   difficulty by replacing m4's regular output with the generated
   dependency file -- m4 only generates one or the other, but
   never both.  Yes, your Makefile winds up having to run m4
   twice (unless the dependency file already exists and is
   up-to-date) -- but this is a small price to pay for having a
   consistent build process.

David Warme


On Mon, 2010-10-25 at 11:39 -0600, Eric Blake wrote: 
> On 10/19/2010 06:52 AM, Lorenzo Di Gregorio wrote:
> > Hello,
> >
> > I'm following up on this (
> > http://lists.gnu.org/archive/html/m4-discuss/2010-10/msg00003.html) post,
> > because I've managed to find some time and write a patch for supporting
> > dependency generation with M4, which is something I've been really missing
> > for my makefiles.  You find the patch enclosed here as attachment.
> 
> Thanks for taking the time to do this.  I'm sorry that my m4 maintenance 
> time has been less than stellar, lately.
> 
> This is big enough that we would need copyright assignment on file 
> before it can be incorporated.  If this is something you are still 
> willing to pursue, I can send you details off-list about getting FSF 
> assignment in place.
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]