Re: .ONESHELL enhancement?

Ralf Wildenhues <[email protected]>
Newsgroups gmane.comp.gnu.make.devel
Organization Department of Numerical Simulation, University of Bonn
Message-ID <[email protected]>
* Paul Smith wrote on Sun, Oct 04, 2009 at 07:36:15PM CEST:
> On Sun, 2009-10-04 at 08:26 -0400, David Boyce wrote:
> > One of the bedrock principles of autoconf/automake is that you
> > shouldn't make assumptions about what the target platform looks like.
> > In particular, you can't predict what make version will run the
> > generated Makefile, and thus reliance on nonstandard features is
> > discouraged.
> 
> I think what Ralf is concerned about is that adding .ONESHELL changes
> the behavior of ALL make recipe invocations.  Also, you can
> add .ONESHELL and makes that don't support it won't fail due to syntax
> errors, etc. which is not true of many other GNU make constructs.
> 
> That means that if someone wants to use the features of automake to
> provide a standard framework but still wants to require GNU make for
> their project (it's been known to happen), or just wants to allow GNU
> make to perhaps run more efficiently, they might add .ONESHELL to their
> Makefile.am.  If automake wants to allow this to work correctly, it will
> need to ensure all the automake-generated rules behave properly in
> a .ONESHELL environment.  Most other types of make enhancements don't
> have this problem, since they wouldn't come into play for rules that
> automake generates.

Exactly.  Thanks for explaining it better.

> I guess we have to decide what the ultimate purpose of .ONESHELL is to
> be, since we can't have both goals at the same time: either we want it
> to be solely for performance improvement, in which case adding () (and
> maybe separating them with "&&"?) would be the right thing since
> existing recipes will work without modification (the command line length
> thing is a potential issue but I don't believe adding a few extra
> characters per line is going to make much difference),

It's not the few extra characters that matter.  It's the concatenation
of two or more long command lines that matters.

> Matt McCutchen <[email protected]> writes:
> > The only general fix I can envision for these issues is to wrap every
> > line (after interpretation of \ continuations) in parentheses.
> > Compared to the current approach, this would save execs but not forks.
> > I did a little test on my computer and the exec seems to be the
> > expensive part:

> I tried with something more complex than just "true", in case bash
> itself had some kind of fast path, but my results mirror yours.

On w32 systems like Cywgin, the emulated forks are very expensive.

Cheers,
Ralf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.