Module::Build progress and roadmap

From my recent posts, you may have noticed that I’m doing a lot of work on Module::Build these days. I got back into it to get it ready for 5.10.1 and once I had re-learned the code base it was easy to start adding some frequently requested features and cleaning up other bugs.

Here’s a snapshot of new developments and current plans:

  • MYMETA.yml – implemented in 0.35_01 as discussed previously
  • File::ShareDir support – implemented in 0.35_02. Adding a ‘share’ directory to your distribution will automatically configure it to be installed for use with File::ShareDir (and will add File::ShareDir to your ‘requires’ list of prerequisites). The ‘share_dir’ property allows more custom control of shared directories if needed.
  • Build installdeps – implemented in 0.35_02. This build action is a helper routine for authors and developers who check out a distribution from a repository and want an easy to way to install dependencies. It uses ‘cpan’ by default, but can be configured to use ‘cpanp -i’.
  • needs_compiler property – implemented in 0.35_02. Module::Build now auto-detects XS or C files and checks for the presence of a compiler. It also adds ExtUtils::CBuilder automatically to ‘build_requires’.
  • bundling Module::Build in inc/ – under development. Soon, it will be possible to automatically bundle Module::Build within the inc/ directory for use with perls that haven’t been upgraded to support configure_requires in META.yml. This will probably be released in experimental form before 0.36
  • declarative interface – under discussion. Some people seem to really like the declarative interface of Module::Install. Once bundling works, it’s likely that a declarative interface for Module::Build will follow, perhaps for 0.37.
  • plugins – conceived, but not discussed. Subclassing has limits and some people would like a way to create and combine plugins to customize the build process. This will take some rework of the Module::Build internals, so is probably unlikely to happen soon, but it’s on the list of long-term goals.

As you can see, Module::Build is moving along at a good clip. The next stable release will have some significant new features to address deficiencies that were attracting people to Module::Install and should help make Module::Build more easily backwards compatible in ways it hasn’t exactly been to date.