Subject: Re: bug#9245: FreeBSD make in concurrent mode report spurious success in automake-generated tests harness

From: Stefano Lattarini <[email-masked]>
Date: Tue, 16 Aug 2011 18:28:12 +0200

Hi Eric.

On Tuesday 16 August 2011, Eric Blake wrote:
> On 08/16/2011 10:04 AM, Stefano Lattarini wrote:
> > The "proper fix" is even easier BTW: just use "$$exit || exit 1" instead.
> >
> > The updated patch should now work (and I've tested it properly this time).
> > This new patch hasn't been derived by "cargo-cult guessing", but from the
> > explanation of the relevant FreeBSD make bug provided by Jilles Tjoelker:
> >   <http://www.freebsd.org/cgi/query-pr.cgi?pr=159730>
> >
> > Now that's something to be documented in the Autoconf manual I'd say ...
> 
> Indeed.  So it all boils down to BSD make rewriting rules (but only for 
> make -j) to be roughly:
> 
> sh -c 'set -v; your rules; set +v'
> 
> and losing your exit status (not to mention sharing shell status between 
> commands that are supposed to be in independent shells), when it really 
> should have been rewriting as something more complex:
> 
> sh -c '(your rule 1); (your rule 2); st=$?; set +v; exit $st'
> 
> And your workaround of an explicit exit rather than relying on $? at the 
> end of your 'set +e' invocation is indeed the proper way to force the 
> parallel make bug to be avoided, by exiting prior to any post-commands 
> injected by the BSD make rewriting going on that corrupt $?.
> 
I'll have a "draft patch" read soonish.  There is ample room for improvements,
but I'll post it here anyway since it can benefit from early feedback.

Regards,
  Stefano