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/

Reply via email to