bug-make
[Top][All Lists]
Advanced

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

Re: [bug #13976] Regression in :: deps handling between V3.76 and V3.80


From: Paul D. Smith
Subject: Re: [bug #13976] Regression in :: deps handling between V3.76 and V3.80
Date: Fri, 5 Aug 2005 08:45:37 -0400

(I don't think Reid is subscribed to the list so I added him back)


%% Boris Kolpackov <address@hidden> writes:

  bk> What happens if I have this makefile:

  bk> foo: bar .WAIT baz
  bk> fox: bar baz

Using my rules, bar and baz are built in parallel.

  bk> When I say 'make fox' is serialization still there? If the answer
  bk> is 'no', then how about this makefile:

  bk> all: foo fox
  bk> foo: bar .WAIT baz
  bk> fox: bar baz

  bk> I think the answer is 'yes' (or should be 'yes'). If so then it
  bk> strikes as terribly asymmetric hack. What happens in this case:

Using my rules, bar and baz ARE built in parallel.

The rules I mentioned in this list apply only between the two
prerequisites listed, in that pathway.  If the "waited for" prerequisite
appears on any other path where it is not waited for, then it's fair
game for parallelization.

For those familiar with the make code, I was thinking that the WAIT
would be a function of the deps list not the target itself.

  bk> all: foo fox
  bk> foo: bar .WAIT baz biz
  bk> fox: bar baz .WAIT biz

bar & baz are parallel; biz is eligible to be run as soon as "bar" is
done.

  bk> all: foo fox
  bk> foo: bar .WAIT baz
  bk> bar: baz

This one doesn't even need .WAIT: in this case bar won't be started
until baz is run anyway because baz is a prerequisite of bar.

  bk> IMO, the proper mechanism for something like this (which, I think,
  bk> is not necessary, as stated above) would be to further relax
  bk> order-only prerequisites model by removing the requirement of
  bk> actually building such prerequisites (aka, "truly" order-only
  bk> ;-)).

No, no... order-only prerequisites ARE truly order-only.  The difference
is that they apply to the TARGET, whereas .WAIT applies to the
prerequisites that appear around it.

That is, if you say:

    foo: bar baz biz boz booz
    bar: | baz biz boz booz

then this is the same thing, only shorter, as saying:

    foo: bar .WAIT baz biz boz booz

I think...?  I haven't had my tea yet this morning but I think that's
right.  If I AM right, then I wonder if .WAIT is really necessary...?

Hm.  Actually, the order-only version is much STRONGER than the .WAIT
version because it applies to the targets as a whole, not just to how
they appear within a single prerequisite list.  That is, rewriting the
"odd" examples above this way would give very different answers than the
ones I gave before.


Can you be a little more detailed about what you were thinking, Boris?

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <address@hidden>          Find some GNU make tips at:
 http://www.gnu.org                      http://make.paulandlesley.org
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist




reply via email to

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