Subject: Re: make(1) and .WAIT and .ORDER
To: <>
From: David Laight <david@l8s.co.uk>
List: tech-userlevel
Date: 11/14/2006 07:57:37
On Tue, Nov 14, 2006 at 12:37:32AM +0200, Alan Barrett wrote:
> > 
> > This has the side effect that:
> >     a: b
> >     .ORDER b a
> > is a deadlock - which might not, at first glance, be invalid syntax.
> 
> It would be nice it this worked.  Does your version still give each node
> a list of ancestors?  If so, then when 'a' gets to the front of the work
> list, and we notice that it has 'b' as an un-made .ORDER predecessor,
> we could immediately check whether 'a' is an ancestor of 'b', and if so
> then don't let the presence of the .ORDER cause a deadlock.

Generating a full list of ancestors is one of the things that can get
(almost) unbounded.

If it is a real problem, doing something to break the deadlock once the
make has run out of targets it can build - but the required targets
aren't built yet - might be possible.

Also a non-recursive .ORDER could be implemented, but I don't think
it should be the default. (It can be done using an extra .PHONY target).

I've also realisized that:
    .ORDER a b c
has to be expanded to:
    .ORDER a b
    .ORDER b c
    .ORDER a c
The 3rd entry is needed when 'a' and 'c' are to bu built, but 'b' isn't.

	David

-- 
David Laight: david@l8s.co.uk