The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Changes for version 0.26

  • Removed some language from the Module::Build::Compat documentation that encouraged people to include a Build.PL without a Makefile.PL. Also changed "a replacement for MakeMaker" to "an alternative to MakeMaker" in the main documentation, which is basically what I meant all along (i.e. a replacement for MakeMaker in your particular build process - MakeMaker is never going to be fully replaced in the perl world at large, of course), but some people got the impression I was a little more truculent toward MakeMaker than I really am.
  • Added the formal concepts of "features" and "config data" for distributions. This allows the module author to define a certain set of features that the user can switch on and off (usually according to whether they have the proper prerequisites for them), and to save build-time configuration information in a standardized format. See the main documentation of Module::Build for more details. (Note that the name of this system was called "BuildConfig" for a while in beta, but now it's called "ConfigData".)
  • Added an 'auto_features' capability, which simplifies the process of defining features that depend on a set of prerequisites.
  • Added the 'get_options' parameter, which lets module authors declare certain command-line arguments their Build.PL can accept
    • David Wheeler
  • Changed the split_like_shell() method to use the shellwords() function from Text::ParseWords (a core module since 5.0), which does a much better job than the split() we were using.
  • Added a 'testpod' action, which checks the syntactic validity of all POD files in the distribution using Test::Pod. This eliminates the need for doing so in a regression test. [Initial patch by Mark Stosberg]
  • Added a process_files_by_extension() method, which generalizes the kind of processing (essentially just copying) that happens for .pm and .pod files, and makes it available to other user-defined types of files. See the new cookbook entry.
  • Improved compatibility with version.pm when authors are using version objects as their $VERSION variables. Now version_from_file() can deal with these objects. Currently we stringify them right away, but perhaps in the future we will preserve them as objects for a while.
  • During 'distdir' and 'distmeta' actions, die a bit more gracefully if there's no MANIFEST (i.e. explicitly say that a MANIFEST is required). [Spotted by Adrian Howard]
  • Eliminated a recursive dependency between creating the MANIFEST file and creating the META.yml file. [Spotted by Dave Rolsky]
  • On Win32, where a single directory might be known variously as "Module-Build-0.25_03" or "MODULE~1.25_", we now use Win32::GetShortPathName($cwd) to verify that the 'Build' script is being run from the correct directory, rather than just a string comparison.
  • The add_to_cleanup() method will now accept glob()-style patterns in addition to explicit filenames. Also documented the fact that they can be specified in either Unix-style or native-style notation.
  • Passing a PREFIX value to a pass-through Makefile 'make install' now has the same effect as passing it to 'perl Makefile.PL' (it dies with a helpful message).
  • Added the 'testcover' action, which runs a test suite using Devel::Cover. [Dave Rolsky]
  • Added the 'lib' and 'arch' installation directories to the search path for the 'diff' action, since they won't necessarily (though they usually will) be in @INC at installation time. [Suggested by Kevin Baker]
  • The "=head3" POD directive isn't supported in older podlators (particularly Pod::Man), so we don't use it anymore.
  • Fixed a typo & improved the docs in the SUBCLASSING section. [Ron Savage]
  • Added the '.tmp' suffix to the default MANIFEST.SKIP file, which should avoid adding things like pod2htmi.tmp to the MANIFEST [Ron Savage]
  • Backup files from Emacs, containing the string '.#' in their names, should no longer find their way into the blib/ directory (and from there into installation directories).
  • Worked around an unpleasant interaction between version.pm and the version-checking code that makes sure Module::Build's version hasn't changed during the lifetime of the 'Build' script. [Reported by Trevor Schellhorn]
  • Fixed a problem in htmlify_pods() that would produce test failures on Cygwin (and probably elsewhere). [Yitzchak Scott-Thoennes]
  • Fixed a test failure on Cygwin (and probably elsewhere) in t/compat.t, resulting from empty environment variables being set to the empty string (as opposed to simply being unset) by their mere presence in the "EXPORT:" list.
  • Fixed a fatal error that occurred when the author specified 'dist_author' manually in their Build.PL script. [Spotted by Ron Savage]
  • The 'provides' section of the META.yml file wasn't being built properly on Win32, because of a mismatch between URL-format and native-format pathnames. Fixed. [Reported by Robert Rothenberg]
  • The progress message "lib/Foo.xs -> lib/Foo.c" was previously being output even when the Foo.c file wasn't being rebuilt. It's now fixed.
  • Fixed a couple of places in Compat.pm where it could have forgotten which perl interpreter it had been run with ($^X isn't very trustworthy).
  • On some systems, the way we updated the timestamp on the "lib/Foo.bs" file (one of the output files for XS-based modules) was failing. It's been replaced by a simple call to utime().
  • Fixed a problem in t/compat.t that prevented it from being run individually using 'make test TEST_FILES=t/compat.t'. The problem was that a couple environment variables (TEST_FILES, MAKEFLAGS) were being passed through to subprocesses, and confused them.
  • Fixed an important typo in the documentation for the 'install_base' parameter ('libdoc' and 'bindoc' were switched). [Ray Zimmerman]
  • The pass-through Makefiles (type 'small' or 'passthrough') now support the TEST_FILES parameter to 'make test'.
  • Fixed a fatal error that would occur on perl 5.005 when building HTML documentation, because its version of Pod::Html was old and didn't like some of the parameters we fed it. [Spotted by Blair Zajac]
  • The final line of the generated pass-through Makefile was missing its trailing newline, which is now fixed. [Chip Salzenberg]
  • We now depend on YAML version at least 0.35 and at most version 0.49, so that we don't pick up a new (and backward-incompatible) beta version from CPAN.
  • Squashed a warning in t/basic.t about '"Foo::Module::VERSION" used only once', and one in PPMMaker about $^V being undefined. [Blair Zajac]
  • Added a couple temporary output files from HTML documentation generation to the cleanup list. [Toby Ovod-Everett]
  • The PodParser module will now only extract paragraphs in the 'AUTHOR' section of the pod if they contain an '@' character. This tends to do a better job, heuristically speaking, of returning relevant stuff.
  • Added regression tests and a helper method ( add_build_elements() ) for adding new elements to the build process. Also some documentation.
  • Wrote a recipe in the Cookbook for adding new elements to the build process, and a recipe for changing the order in which the steps in the build process will occur.

Documentation

Query or change configuration of Perl modules

Modules

Build and install Perl modules
Compatibility with ExtUtils::MakeMaker
Examples of Module::Build Usage
Perl Package Manager file creation
Builder class for Amiga platforms
Stub class for unknown platforms
Builder class for EBCDIC platforms
Builder class for MPEiX platforms
Builder class for MacOS platforms
Builder class for RiscOS platforms
Builder class for Unix platforms
Builder class for VMS platforms
Builder class for VOS platforms
Builder class for Windows platforms
Builder class for AIX platform
Builder class for Cygwin platform
Builder class for Mac OS X platform
Builder class for OS/2 platform

Provides

in lib/Module/Build/Base.pm
in lib/Module/Build/Platform/Windows.pm
in lib/Module/Build/Platform/Windows.pm
in lib/Module/Build/Platform/Windows.pm
in lib/Module/Build/PodParser.pm
in lib/Module/Build/Base.pm