Subject: Re: make: making .WAIT recursive
To: None <tech-toolchain@NetBSD.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: tech-toolchain
Date: 02/16/2006 03:09:55
>>> .WAIT and .BARRIER
>> But there is no other way to express "neither of these two things
>> depends on the other, but their builds must not happen
>> concurrently".
> if the two things don't depend on each other, then why can't they
> happen concurrently?
Typically because they collide over a temporary file or some such
shared resource. As a really simple example, I've seen Makefiles do
things like
foo.o bar.o: $*.c
cc -E $*.c > __tmp.i; hairy-processor __tmp.i; cc -o $@ __tmp.i
in which case building foo.o and bar.o in parallel is likely to collide
over __tmp.i.
I fully agree that it's better to fix such cases so they are
parallel-safe. While for this example that borders on trivial, it's
not always feasible, especially with some of the more complicated
third-party software. Consider how ghostscript's build procedure
constructs files by running multiple commands with >> redirection....
/~\ The ASCII der Mouse
\ / Ribbon Campaign
X Against HTML mouse@rodents.montreal.qc.ca
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B