Subject: Re: MAKE_JOBS_FAILURE that I don't understand
To: Blair Sadewitz <blair.sadewitz@gmail.com>
From: Greg Troxel <gdt@ir.bbn.com>
List: tech-pkg
Date: 06/08/2007 16:08:42
"Blair Sadewitz" <blair.sadewitz@gmail.com> writes:

> I don't use GNU make if I can help it, so I don't know if it has
> .WAIT.  IIRC it does have .NOTPARALLEL, though, so perhaps you could
> use that as a barrier?

The problem was that the dependencies seemed clear; make should know
that a rule to create a dependency for another rule has to finish first.

The bug is that libtool --mode=compile will build not only the shared
.lo but the unshared .o as well.  After make ensures that the .o is
built, and goes on to run the rules to get the .lo, it then feels free
to run the .o->.a rule in parallel, and this can lose as a .o is
recreated.

So the hidden dependency is that a .o gets modified by a rule that make
doesn't know creates it.

BSD make worked because it failed to deal with the .lo stuff at all
because it was expresed using a GNU make extension.

I've reported this upstream to the SANE list; I'm now convinced that
it's simply an erroneous makefile.