ExtUtils::ModuleMaker version 0.43 is now available on CPAN (http://search.cpan.org/dist/ExtUtils-ModuleMaker/). ExtUtils::ModuleMaker is a replacement for the most typical use of the h2xs utility bundled with all Perl distributions: the creation of the directories and files required for a pure-Perl module to be installable with make and distributable on CPAN.
A companion distribution, ExtUtils::ModuleMaker::PBP, version 0.08, is also now available and is described below.
ExtUtils::ModuleMaker was created by R Geoffrey Avery in 2001. I took over
maintenance of the distribution in July 2005. The central focus of
ExtUtils::ModuleMaker remains unchanged, as do its modalities. The
recommended way to get started with ExtUtils::ModuleMaker is the modulemaker
command-line utility which prompts the user to enter a module name and other
information and then creates the directories and files needed to bring that
module to life. modulemaker is extremely easy for novice module authors to
use and, as such, typifies the Perl virtue of laziness. The user can also
provide modulemaker with command-line arguments. ExtUtils::ModuleMaker can
also be called from within a Perl program via its new() and
complete_build() methods.
In the past three months, however, there have been significant enhancements to ExtUtils::ModuleMaker's functionality as well as improvements to the distribution itself.
Fourteen new attributes have been added to ExtUtils::ModuleMaker's default values. Five of these provide the user with more fine-grained control over the directories and files created by running ExtUtils::ModuleMaker:
INCLUDE_SCRIPTS_DIRECTORY
INCLUDE_MANIFEST_SKIP
INCLUDE_TODO
INCLUDE_LICENSE
INCLUDE_FILE_IN_PM
Eight of the new default values provide the user with greater control over which test files to include, how to name them and how many modules each test file tests:
FIRST_TEST_NUMBER
TEST_NUMBER_FORMAT
TEST_NAME
EXTRA_MODULES_SINGLE_TEST_FILE
TEST_NAME_DERIVED_FROM_MODULE_NAME
TEST_NAME_SEPARATOR
INCLUDE_POD_COVERAGE_TEST
INCLUDE_POD_TEST
Finally, a new default value is provided to enable the user to save selections made via modulemaker as new default values:
SAVE_AS_DEFAULTS
By enabling the user to save his/her selections as new default values, the latest version of ExtUtils::ModuleMaker significantly enhances the user's ability to customize its use.
But wait, there's more!
While ExtUtils::ModuleMaker always was subclassable, its subclassability is now easier and better documented. ExtUtils::ModuleMaker's default values and private methods, formerly found entirely in 'lib/ExtUtils/ModuleMaker.pm', have been moved into three separate packages based on functionality:
lib/ExtUtils/ModuleMaker/Defaults.pm
lib/ExtUtils/ModuleMaker/Initializers.pm
lib/ExtUtils/ModuleMaker/StandardText.pm
Private methods called within ExtUtils::ModuleMaker::new() are found in
Initializers.pm. Private methods within
ExtUtils::ModuleMaker::complete_build() are found within
StandardText.pm. A
potential subclasser's attention is therefore more precisely focused on the
methods needing overriding.
As an illustration of how to subclass ExtUtils::ModuleMaker, I have written a companion Perl extension, ExtUtils::ModuleMaker::PBP, also now available on CPAN, which you can use to create the skeleton for a Perl extension in the manner recommended by Damian Conway in his recent book Perl Best Practices (O'Reilly, 2005) http://www.oreilly.com/catalog/perlbp/. ExtUtils::ModuleMaker::PBP includes its own command-line utility, mmkrpbp, which works in the same way as modulemaker.
The net effect of these enhancements is to create a comfortable learning curve for the ExtUtils::ModuleMaker user.
But wait, there's still more!
As a CPAN distribution ExtUtils::ModuleMaker has been significantly improved with the addition of new tests and documentation. As measured by Devel::Cover, ExtUtils::ModuleMaker's test coverage is now very high. Only the modulemaker utility's interactive mode lacks good coverage.
In particular, the test suite tests to see whether a file containing new default values can be saved in an appropriate location on the user's system and whether such a file, when used, generates values expected to override ExtUtils::ModuleMaker's own default values. In the event that a user is upgrading from one version of ExtUtils::ModuleMaker to another, the test suite also makes certain to leave intact and file of default values the user has already saved on disk so that it is still intact after the upgrade.
During the testing process, new directories and files are now created in temporary directories which are created and then erased via File::Temp.
ExtUtils::ModuleMaker itself is intended to be backwardly compatible with Perl 5.5, but most of its test suite requires Perl 5.6. The tests which require 5.6 are all wrapped in SKIP blocks, so 5.5 users should be able to test and install the distribution with no problem.
Acknowlegements go out to:
Brian Clarkson
Scott Godin
imacat
Reinhard Urban
Michael G Schwern
A Sinan Unur
Paul Lalli
davidrw
tlm
Anonymous Guest
CountZero
xdg
Tanktalus
holli
TheDamian
nothingmuch
Alex Gill
Marc Prewitt
chromatic
dave_the_m
randyk
njh
Please report any bugs or feature requests to
bug-ExtUtils-ModuleMaker@rt.cpan.org, or through the web interface at
http://rt.cpan.org.