develooper Front page | perl.module.build | Postings from February 2008

Re: M::B vs M::I vs E::M

Thread Previous | Thread Next
From:
Michael G Schwern
Date:
February 28, 2008 11:30
Subject:
Re: M::B vs M::I vs E::M
Johan Vromans wrote:
> Is there somewhere a good document that describes why we have
> Module::Install and Module::Build alongsize ExtUtils::MakeMaker, and
> which one to choose?
> 
> Apart from things liker 'newer', 'better' and 'faster', the only
> difference I see is that M::B does not require external tools (like
> 'make') and therefore is usable on systems that do not have a
> compile/make suite.

 From ExtUtils::MakeMaker::FAQ
http://search.cpan.org/perldoc/ExtUtils::MakeMaker::FAQ

----------------------
What is Module::Build and how does it relate to MakeMaker?

     Module::Build is a project by Ken Williams to supplant MakeMaker. Its 
primary advantages are:

         * pure perl. no make, no shell commands
         * easier to customize
         * cleaner internals
         * less cruft

     Module::Build is the official heir apparent to MakeMaker and we encourage 
people to work on M::B rather than spending time adding features to MakeMaker.
----------------------


Module::Build's primary advantages to the author are that it does not require 
an external utility, it is *much* easier to extend, it has more features and 
will continue to add them.

Module::Build's primary advantages to the user are that it doesn't require 
make and authors won't be tempted to write their own likely unportable 
make/shell code.


I cannot emphasize the ease of extension enough compared to MakeMaker. 
Consider the simple request of wanting to add a step to the build process. 
It's almost impossible to get right with MakeMaker, you need to override the 
right (undocumented) method which generates the right (undocumented) target 
and do a s/// on the make text to put in your new target.  Then you output 
make code to generate your new target... maybe it's portable, but it probably 
isn't.

With Module::Build you just override the appropriate ACTION method.

	sub ACTION_code {
		my $self = shift;

		...do your new thing...

		$self->SUPER::ACTION_code(@_);
	}


You may also be interested in looking at "MakeMaker is DOOMED!" in which I 
show that MakeMaker is nearly impossible to both maintain and improve, thus we 
need to move away from it.
http://schwern.org/~schwern/talks/MakeMaker_Is_DOOMED/slides/slide001.html


That is why I would not recommend Module::Install.  Its new interface sits on 
top of MakeMaker and thus contains all its underlying flaws.  Worse, it is a 
customization of MakeMaker.  There is no safe way to customize MakeMaker. 
Module::Install will eventually fail.

Because Module::Install ships copies of itself in each distribution this will 
cause a widespread CPAN cascade failure.  Individual users will not be able to 
fix this by just upgrading their installed copy of Module::Install.  Each 
author has to rebuild and release their distribution to fix it.  This will 
take months.


-- 
101. I am not allowed to mount a bayonet on a crew-served weapon.
     -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army
            http://skippyslist.com/list/

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