develooper Front page | perl.perl5.porters | Postings from July 2013

Re: [perl #38307] make clean with 5.8.8-RC1

Thread Previous | Thread Next
From:
Nicholas Clark
Date:
July 29, 2013 10:01
Subject:
Re: [perl #38307] make clean with 5.8.8-RC1
Message ID:
20130729100100.GU3729@plum.flirble.org
On Sat, Jun 29, 2013 at 06:22:24PM -0700, James E Keenan via RT wrote:
> On Sat May 26 17:43:55 2012, jkeenan wrote:
> > On Mon Jan 23 08:33:41 2006, doughera wrote:
> > > On Mon, 23 Jan 2006, Nicholas Clark wrote:
> > > 
> > > > On Sun, Jan 22, 2006 at 05:56:36AM -0800, Fergal Daly wrote:
> > > > > # New Ticket Created by  Fergal Daly 
> > > > > # Please include the string:  [perl #38307]
> > > > > # in the subject line of all future correspondence about this
> issue. 
> > > > > # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38307 >
> > > > > 
> > > > > 
> > > > > I decided to change some config params (run Configure -D prefix=...
> > > > > -d) and recompile. I cancelled the recompile very soon into it and
> > > > > typed
> > > > > 
> > > > > make clean
> > > > > 
> > > > > but that sent it into more compilation. So it looks like the clean
> > > > > target depends on something that causes compilation. Transcript of
> > > > > make clean output below,
> > > 
> > > That could well be.  The 'clean' target has never been documented for
> > just 
> > > such reasons.  I'm not sure if it really does anything useful. The only 
> > > two targets documented as being useful in the INSTALL file are
> > 'realclean' 
> > > and 'distclean'.
> > > 
> > 
> > 'clean' is, however, a useful and frequently encountered target in other
> > software.  It's the '*clean' target I use most frequently in preparing
> > CPAN distributions.  In Parrot, it means "clean up the results of
> > 'make'" as distinct from 'realclean', which means "clean up the results
> > of 'Configure.pl' as well as 'make."
> > 
> > So it's likely that whoever tries to build Perl from source expects
> > 'make clean' to do something useful -- though probably less than 'make
> > distclean' or 'make realclean'.
> > 
> > If that's true, then perhaps INSTALL ought to explicitly document that
> > in Perl 5 'make clean' is *not* a useful target.
> > 
> > Thoughts?
> > 
> > Thank you very much.
> > Jim Keenana
> 
> Andy, Nicholas:
> 
> Any further thoughts on this?  If Perl's 'make clean' is not going to do
> anything particularly useful, shouldn't we explicitly document that fact?


I don't think that a solution exists, to be able to unconditionally
do proper cleanup whilst also never actually doing any building under
any circumstances.

So if the definition of "useful" is that "under no circumstances does it
build anything", then it's impossible to attain.

(Either for clean or for distclean)

The problem is that we don't even know the complete set of build products
until we have run Perl code using miniperl. So we can't know what to delete
until we have a miniperl. And there are dependency rules to determine that
miniperl is up to date before it is run, and those dependencies apply just
as much to the clean targets.

The clean targets do ultimately delete things. The problem is that if the
build has got far enough to *build* things using intermediate build
products (ie miniperl), then the clean targets need to use those
intermediate build products to do the deletions, so (as coded) they have to
ensure those build products are built before they can run them to clean up.

The ultimate result is correct (or at least, I'm not aware of systematic
bugs where it is not), but it takes a convoluted route to get there, and I
can't see how to avoid that route.

Nicholas Clark

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About