Toolchain Roadmap
From Perl QA
This page is intended to collect and organize plans for improving the Perl toolchain (e.g. CPAN.pm, CPANPLUS, ExtUtils::MakeMaker, Module::Build, Module::Install, etc.). Generally, the roadmap should focus on work that establishes or changes standards or that impacts interoperability between toolchain components.
There are two sections: "Enhancement proposals" for summaries of proposed global changes; and "Work to be done" for module-specific enhancements or major bug fixes.
Contents |
[edit] Enhancement proposals
[edit] Generally accepted as needed
[edit] MYMETA.yml
The MYMETA.yml proposal is for Makefile.PL and Build.PL to create a MYMETA.yml file, following the META.yml spec, that will include the results of any dynamic configuration (e.g. OS specific dependencies). This will replace PREREQ_PM parsing from Makefile or _build/prereqs parsing as the means for toolchain modules to read determine post-configuration dependencies.
Status:
- CPAN.pm -- support has been added (and will be in 5.10.1, no less)
- CPANPLUS -- not yet supported
- Module::Build -- support exists in a branch not yet merged to trunk
- Module::Install -- ADAMK is working on adding support
- ExtUtils::MakeMaker -- not yet supported. Should use data from BUILD_REQUIRES.
[edit] Proposed or still under debate
[edit] Quiet and simple CPAN.pm auto-configuration
First-time configuration of CPAN.pm has a blizzard of configuration options. Even autoconfig generates screenfulls of output. This could be much more user friendly. First, if autoconfig is run, output should be hidden. Seconds, a URL should either be autoconfigured somehow or else the config for that should be run automatically, not as a second configuration after auto configuration.
[edit] Add local::lib support to CPAN/CPANPLUS
It would be great if CPAN/CPANPLUS had smarter/automatic support for local::lib to make local installations easy. Imagine on a fresh vendor perl 5.10.X, being able to run a command like this:
$ perl -MCPAN -e shell cpan> o conf local_lib
and have everything autoconfigured for local::lib.
[edit] Upgrading CPAN.pm/CPANPLUS should upgrade Module::Build and ExtUtils::MakeMaker
Upgrading either installer should force an upgrade to a sufficiently recent M::B or EU::MM. In the case of CPANPLUS, it should probably be done via CPANPLUS::Dist::Build prerequisites. For CPAN.pm, where M::B is optional, the prerequisite should only be added if M::B is already installed. (I.e. it should only upgrade, but shouldn't force the issue.)
[edit] CPAN::DistAPI
Both CPAN.pm and CPANPLUS have similar but slightly different code for interacting with Makefile.PL and Build.PL and the subsequent build/make targets. The code could be refactored into a single, common dependency that provides an interface that hides the details of running *.PL in a subprocess and returning results, prerequisites, etc.
[edit] Minimum META.yml requirement
EWILHELM described on perl-qa and module-build how there's no way to get a META.yml reader to know that it must upgrade itself to deal with a newer META.yml spec. Analogous to 'configure_requires', if this capability is added to tools and/or the spec itself now, then we enable "forward-compatibility" as META.yml evolves. This could be having CPAN/CPANPLUS know what spec version they understand and try to upgrade themselves if they see a future spec or see a higher 'meta-yml-required' key.
[edit] META.yml spec changes
There are numerous deficiencies with the current spec. See CPAN Meta Spec Proposals for specific ideas for improvement.
[edit] META.json
Switch from YAML to JSON as the preferred format for META files. Means that we need JSON.pm or equivalent in core.
[edit] Work to be done
[edit] CPAN.pm
After 1.94:
- Merge MYMETA.yml support
- Deprecate "prefer_installer" and have preferred installer default to Module::Build. (Possibly add a new "override_installer" option for those who really need to force Makefile.PL over Build.PL)
- Add support for 'recommends' and 'conflicts' prerequisites (This is more problematic, and should not be implemented until the implications of this are fully solved)
[edit] CPANPLUS
- Add support for reading MYMETA.yml
[edit] CPANPLUS::Dist::Build
- Add ability to capture Build.PL, Build and Build test output
[edit] ExtUtils::MakeMaker
- Add support for MYMETA.yml creation
[edit] Module::Build
After 0.34:
- Add support for MYMETA.yml creation (done)
[edit] Module::Install
- Add support for MYMETA.yml creation (done)
- Agree with ExtUtils::MakeMaker on an equivalent to NO_META.
[edit] YAML::Tiny
YAML::Tiny is used at least by Module::Build and Module::Install to create META.yml.
- Fix UTF-8 encoding issue: RT#48885
