[Top][All Lists]
[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
Re: [bug #13976] Regression in :: deps handling between V3.76 and V3.80, Paul D. Smith, 2005/08/05