[xorg-server] autogen.sh fails after last update.

Adam Jackson ajax at nwnk.net
Mon Oct 3 12:25:52 PDT 2005

On Monday 03 October 2005 11:41, Alan Coopersmith wrote:
> Thanks for catching both these mistakes - I've committed the fixes for them
> now.
> As for the SUBDIRS, there are dependencies between some of them that
> require certain ordering - I know for instance scanpci, dummy & os-support
> all have to come before utils since some of the utils link with them (which
> is one of the reasons they still live in the xserver/xorg module instead of
> being broken out).   I don't know all the other inter-dependencies though.

We shouldn't have to know.  That's what make is for.

As I mentioned in bug #4190, this is just a case of recursive make considered 
harmful.  There's a classic paper on the subject, but basically the principle 
is that your dependency tree is a digraph, and by cutting make invocations at 
directory boundaries you reduce each invocation's view of the digraph, such 
that they can not figure out how to update the needed dependencies.  The best 
you can do is move the most-dependended-on objects as early as possible in 
their respective SUBDIRS= line and hope that they get built in time, which 
_will_ fail when you get a sufficiently parallel system.

And it still won't get the dependencies actually right.  Like #4190 says, 
'touch dix/dispatch.c' will rebuild libdix but won't re-link any of the 
servers.  Hooray!

It's a real shame that automake actively encourages this kind of broken 
design.  The real fix (again I'm ripping off Peter Miller's paper here) is to 
do Makefile fragments in each subdir and include them from the parent 
directory's Makefile fragment, terminating at the top-level Makefile.  That 
way the top-level make gets a full view of the dependency tree, and can 
actually get build order correct.  And the build process will get much 
faster, because it will parallelize correctly and you won't be forking 7000 
make instances.  Subtree makes will still need some care but will be no worse 
off than under imake or recursive automake.

Which we should probably have done from the start, but which I don't feel we 
have time to do before 7.0.  Fortunately we can do that transformation 
"outside-in", ie start at the leaf nodes and work our way to the root.  I 
highly encourage us to look at doing that in the 7.1 timeframe.

- ajax
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.x.org/archives/xorg-modular/attachments/20051003/9f37b9ec/attachment.pgp

More information about the xorg-modular mailing list