http://rt.cpan.org/Ticket/Display.html?id=22768

There is a problem with using new features in MakeMaker.  You cannot depend on 
a newer version of MakeMaker without breaking most automatic installers.  
Dependency resolution happens *after* the Makefile.PL is run and the CPAN 
shells don't know how to deal with a Makefile.PL failing because of an out of 
date module.  There's a few things which can be done to fix this in the order 
of least to most radical.

* Have the CPAN shells look at META.yml to see if a MakeMaker or
Module::Build upgrade is needed and do that before Makefile.PL is run.

This is the simplest and has the least backwards compat impact.  The downside 
is any other modules you want to use in your Makefile.PL or Build.PL will not 
get upgraded.  If you need ExtUtils::CBuilder or File::Spec or anything else it 
won't happen.


* Make the CPAN shells do dependency resolution based on the META.yml
before anything is run.

If backwards compat were thrown out the window, this would be the right thing 
to do.  It universally solves all installer dependency issues.  The downside is 
modules which have dynamic dependencies, deps which change based on the 
installation environment and thus cannot be written out in a static META.yml.  
There's a few solutions to that...

    * Do another dependency resolution step after the Makefile.PL is run.

    For those which need it, the CPAN shell can do a second dependency 
resolution after the
    Makefile.PL is run so any dynamic dependencies are taken care of.


    * A richer META.yml dependency format

    Its possible we can encode much of the dependency logic into META.yml while 
still
    avoiding executing code.

The former is easiest and should retain backwards compat.


* Have some way to ship MakeMaker with your module, a la
Module::Install, but defaulting to a newer version if available.

MakeMaker already does this itself.  It ships with ExtUtils-Command and 
ExtUtils-Install.  The difference between the way MM does it and MI is MM will 
use a newer installed version over your shipped version to avoid the problem of 
authors shipping subtly broken MMs and then never upgrading.

But I would rather have a new MM installed than have authors ship around copies 
of it.


* Have MakeMaker update itself when there's a new stable available as
most installers do.

Most other installers, upon noticing a newer version, will immediately try to 
update themselves.  It makes the backwards compatibility issues disappear.  The 
difficulties lie in the automatic upgrade.  Does the user have permissions?  
What Makefile.PL flags should we use?  What if this version of MakeMaker is 
broken on their OS?

Reply via email to