File Coverage

blib/lib/ExtUtils/ModuleMaker.pm
Criterion Covered Total %
statement 169 175 96.5
branch 52 64 81.2
condition 6 6 100.0
subroutine 17 17 100.0
pod 6 6 100.0
total 250 268 93.2


line stmt bran cond sub pod time code
1             package ExtUtils::ModuleMaker;
2 86     86   53223 use strict;
  86         110  
  86         2036  
3 86     86   307 use warnings;
  86         86  
  86         2621  
4 0         0 BEGIN {
5 86     86   253 use vars qw( $VERSION @ISA );
  86         77  
  86         5178  
6 86     86   1223 $VERSION = 0.56;
7 86         31314 use base qw(
8             ExtUtils::ModuleMaker::Defaults
9             ExtUtils::ModuleMaker::Initializers
10             ExtUtils::ModuleMaker::StandardText
11 86     86   337 );
  86         118  
12             };
13 86     86   416 use Carp;
  86         94  
  86         3554  
14 86     86   295 use File::Path;
  86         97  
  86         2781  
15 86     86   282 use File::Spec;
  86         79  
  86         1133  
16 86     86   276 use Cwd;
  86         88  
  86         4032  
17 86         124466 use File::Save::Home qw(
18             get_subhome_directory_status
19             make_subhome_directory
20 86     86   40751 );
  86         1294424  
21              
22             #################### PUBLICLY CALLABLE METHODS ####################
23              
24             sub new {
25 91     91 1 346028 my $class = shift;
26              
27 91 100       571 my $self = ref($class) ? bless( {}, ref($class) )
28             : bless( {}, $class );
29              
30             # multi-stage initialization of EU::MM object
31              
32             # 1. Pull in arguments supplied to constructor -- but don't do anything
33             # with them yet. These will come from one of three sources:
34             # a. In a script: KEY => 'Value' pairs supplied to new();
35             # b. From modulemaker command-line: -option 'Value' pairs following
36             # 'modulemaker';
37             # c. From modulemaker interactive mode: hard-wired values which may
38             # supersede (b) values.
39 91         418 my @arglist = @_;
40 91 100       1000 croak "Must be hash or balanced list of key-value pairs: $!"
41             if (@arglist % 2);
42 89         545 my %supplied_params = @arglist;
43              
44             # 2. Determine if there already exists on system a directory capable of
45             # holding user ExtUtils::ModuleMaker::Personal::Defaults. The name of
46             # such a directory and whether it exists at THIS point are stored in an
47             # array, a reference to which is the return value of
48             # _preexists_mmkr_directory and which is then stored in the object.
49             # NOTE: If the directory does not yet exists, it is NOT automatically
50             # created.
51 89         423 $self->{mmkr_dir_ref} = get_subhome_directory_status(".modulemaker");
52             {
53 89         5315 my $mmkr_dir = $self->{mmkr_dir_ref}->{abs};
  89         193  
54 89 50       371 if (defined $self->{mmkr_dir_ref}->{flag}) {
55 89         212 push @INC, $mmkr_dir;
56             }
57 89         1322 my $pers_file = File::Spec->catfile( $mmkr_dir,
58             qw| ExtUtils ModuleMaker Personal Defaults.pm |
59             );
60 89 100       1580 if (-f $pers_file) {
61 2         1408 require ExtUtils::ModuleMaker::Personal::Defaults;
62 2         51 unshift @ISA, qw(ExtUtils::ModuleMaker::Personal::Defaults);
63             }
64             }
65              
66             # 3. Populate object with default values. These values will come from
67             # lib/ExtUtils/ModuleMaker/Defaults.pm, unless a Personal::Defaults file
68             # has been located in step 1 above.
69 89         1643 my $defaults_ref;
70 89         982 $defaults_ref = $self->default_values();
71 89         224 foreach my $param ( keys %{$defaults_ref} ) {
  89         1633  
72 2935         2764 $self->{$param} = $defaults_ref->{$param};
73             }
74              
75              
76             # 4. Process key-value pairs supplied as arguments to new() either
77             # from user-written program or from modulemaker utility.
78             # These override default values (or may provide additional elements).
79 89         304 foreach my $param ( keys %supplied_params ) {
80 372         430 $self->{$param} = $supplied_params{$param};
81             }
82              
83             # 5. Initialize keys set from information supplied above, system
84             # info or EU::MM itself.
85 89         856 $self->set_author_composite();
86 89         780 $self->set_dates();
87 89         223 $self->{eumm_version} = $VERSION;
88 89         304 $self->{MANIFEST} = ['MANIFEST'];
89              
90             # 6. Validate values supplied so far to weed out most likely errors
91 89         753 $self->validate_values();
92              
93             # 7. Initialize $self->{FILE} (done here because it presumes a validated
94             # NAME, which was only done in step 6). But allow exception for
95             # Interactive mode because it throws a spurious warning.
96 80 50       546 $self->set_file_composite() unless $self->{INTERACTIVE};
97              
98             # 8. Initialize keys set from EU::MM::Licenses::Local or
99             # EU::MM::Licenses::Standard
100 80         412 $self->initialize_license();
101              
102             # 9. Any EU::MM methods stored in ExtUtils::ModuleMaker::Standard Text
103             # can be overriden by supplying a
104             # value for ALT_BUILD (command-line option 'd') where the value is a Perl
105             # module located in @INC
106 80 100       272 if (defined $self->{ALT_BUILD}) {
107 1         2 my $alt_build = $self->{ALT_BUILD};
108 1 50       4 unless ($alt_build =~ m{^ExtUtils::ModuleMaker::}) {
109 0         0 $alt_build = q{ExtUtils::ModuleMaker::} . $alt_build;
110             }
111 1         58 eval "require $alt_build";
112 1 50       5 if ($@) {
113 0         0 croak "Unable to locate $alt_build for alternative methods: $!";
114             } else {
115 1         25 unshift @ISA, $alt_build;
116             };
117             }
118 80         649 return $self;
119             }
120              
121             sub complete_build {
122 75     75 1 1806 my $self = shift;
123              
124 75         745 $self->create_base_directory();
125              
126 75         363 $self->create_directory( map { File::Spec->catdir( $self->{Base_Dir}, $_ ) }
  150         1000  
127             qw{ lib t } ); # always on
128              
129 74         657 $self->create_directory( map { File::Spec->catdir( $self->{Base_Dir}, $_ ) }
130             qw{ scripts } )
131 75 100       580 if $self->{INCLUDE_SCRIPTS_DIRECTORY}; # default is on
132              
133 75         777 $self->print_file( 'README', $self->text_README() ); # always on
134              
135             $self->print_file( 'LICENSE', $self->{LicenseParts}{LICENSETEXT} )
136 75 100       450 if $self->{INCLUDE_LICENSE}; # default is on
137              
138             $self->print_file( 'Todo', $self->text_Todo() )
139 75 100       947 if $self->{INCLUDE_TODO}; # default is on
140              
141             $self->print_file( 'Changes', $self->text_Changes() )
142 75 100       879 unless ( $self->{CHANGES_IN_POD} ); # default is off
143              
144             $self->print_file( 'MANIFEST.SKIP',
145             $self->text_MANIFEST_SKIP() )
146 75 100       318 if $self->{INCLUDE_MANIFEST_SKIP}; # default is off
147              
148             $self->print_file( qq|t/pod-coverage.t|, $self->text_pod_coverage_test() )
149 75 100       255 if $self->{INCLUDE_POD_COVERAGE_TEST}; # default is off
150              
151             $self->print_file( qq|t/pod.t|, $self->text_pod_test() )
152 75 100       189 if $self->{INCLUDE_POD_TEST}; # default is off
153              
154 75 100       228 if ( $self->{BUILD_SYSTEM} eq 'ExtUtils::MakeMaker' ) {
155 72         789 $self->print_file( 'Makefile.PL', $self->text_Makefile() );
156             }
157             else {
158 3         28 $self->print_file( 'Build.PL', $self->text_Buildfile() );
159 3 100 100     22 if ( $self->{BUILD_SYSTEM} eq 'Module::Build and proxy Makefile.PL'
160             or $self->{BUILD_SYSTEM} eq 'Module::Build and Proxy') {
161 2         14 $self->print_file( 'Makefile.PL',
162             $self->text_proxy_makefile() );
163             }
164             }
165              
166 75         222 my @pmfiles = ( $self );
167 75         102 foreach my $f ( @{ $self->{EXTRA_MODULES} } ) {
  75         346  
168 15         18 push @pmfiles, $f;
169             }
170 75         146 foreach my $module ( @pmfiles ) {
171 90         257 my ($dir, $file) = _get_dir_and_file($module);
172 90         346 $self->create_directory( join( '/', $self->{Base_Dir}, $dir ) );
173 90         1069 my $text_of_pm_file = $self->text_pm_file($module);
174 90         317 $self->print_file( join( '/', $dir, $file ), $text_of_pm_file );
175             }
176              
177             # How test files are created depends on how tests for EXTRA_MODULES
178             # are handled: 1 test file per extra module (default) or all tests for all
179             # modules in a single file (example: PBP).
180 75 100       311 unless ($self->{EXTRA_MODULES_SINGLE_TEST_FILE}) {
181 73         146 my $ct = $self->{FIRST_TEST_NUMBER};
182 73         146 foreach my $module ( @pmfiles ) {
183 82         90 my ($teststart, $testmiddle);
184              
185             # Are we going to derive the lexical part of the test name from
186             # the name of the module it is testing? (non-default)
187             # Or are we simply going to use our pre-defined test name?
188             # (default)
189 82 100       253 if ($self->{TEST_NAME_DERIVED_FROM_MODULE_NAME}) {
190 4         9 $testmiddle = $self->process_attribute( $module, 'NAME' );
191 4         20 $testmiddle =~ s|::|$self->{TEST_NAME_SEPARATOR}|g;
192             } else {
193 78         135 $testmiddle = $self->{TEST_NAME};
194             }
195             #
196             # Are we going to include a number at start of test name?
197             # (default) If so, what is sprintf format and what character is
198             # used to separate it from the lexical part of the test name?
199 82         94 my $testfilename;
200 82 100       224 if (defined $self->{TEST_NUMBER_FORMAT}) {
201             $teststart = "t/" . $self->{TEST_NUMBER_FORMAT} .
202 78         174 $self->{TEST_NAME_SEPARATOR};
203 78         321 $testfilename = sprintf( $teststart . $testmiddle . q{.t}, $ct );
204             } else {
205 4         2 $teststart = "t/";
206 4         7 $testfilename = $teststart . $testmiddle . q{.t};
207             }
208              
209 82         739 $self->print_file( $testfilename,
210             $self->text_test( $testfilename, $module ) );
211 82         223 $ct++;
212             }
213             } else {
214 2         3 my ($teststart, $testfilename);
215 2 100       8 if (defined $self->{TEST_NUMBER_FORMAT}) {
216             $teststart = "t/" . $self->{TEST_NUMBER_FORMAT} .
217 1         2 $self->{TEST_NAME_SEPARATOR};
218             $testfilename = sprintf( $teststart . $self->{TEST_NAME} . q{.t},
219 1         4 $self->{FIRST_TEST_NUMBER});
220             } else {
221 1         2 $teststart = "t/";
222 1         2 $testfilename = $teststart . $self->{TEST_NAME} . q{.t};
223             }
224 2         20 $self->print_file( $testfilename,
225             $self->text_test_multi( $testfilename, \@pmfiles ) );
226             }
227              
228 75         139 $self->print_file( 'MANIFEST', join( "\n", @{ $self->{MANIFEST} } ) );
  75         421  
229 75 100       301 $self->make_selections_defaults() if $self->{SAVE_AS_DEFAULTS};
230 75         308 return 1;
231             }
232              
233             sub dump_keys {
234 1     1 1 1 my $self = shift;
235 1         2 my %keys_to_be_shown = map {$_, 1} @_;
  2         5  
236 1         643 require Data::Dumper;
237 1         4437 my ($k, $v, %retry);
238 1         2 while ( ($k, $v) = each %{$self} ) {
  44         68  
239 43 100       49 $retry{$k} = $v if $keys_to_be_shown{$k};
240             }
241 1         5 my $d = Data::Dumper->new( [\%retry] );
242 1         18 return $d->Dump;
243             }
244              
245             sub dump_keys_except {
246 1     1 1 2 my $self = shift;
247 1         2 my %keys_not_shown = map {$_, 1} @_;
  2         6  
248 1         651 require Data::Dumper;
249 1         4345 my ($k, $v, %retry);
250 1         2 while ( ($k, $v) = each %{$self} ) {
  44         74  
251 43 100       85 $retry{$k} = $v unless $keys_not_shown{$k};
252             }
253 1         5 my $d = Data::Dumper->new( [\%retry] );
254 1         19 return $d->Dump;
255             }
256              
257             sub get_license {
258 1     1 1 2 my $self = shift;
259             return (join ("\n\n",
260             "=====================================================================",
261             "=====================================================================",
262             $self->{LicenseParts}{LICENSETEXT},
263             "=====================================================================",
264             "=====================================================================",
265             $self->{LicenseParts}{COPYRIGHT},
266 1         7 "=====================================================================",
267             "=====================================================================",
268             ));
269             }
270              
271             sub make_selections_defaults {
272 2     2 1 325 my $self = shift;
273 2         2 my %selections = %{$self};
  2         51  
274 2         4 my @dv = keys %{ $self->default_values() };
  2         9  
275 2         14 my $topfile = <<'END_TOPFILE';
276             package ExtUtils::ModuleMaker::Personal::Defaults;
277             use strict;
278              
279             my %default_values = (
280             END_TOPFILE
281              
282 2         3 my @keys_needed;
283 2         5 for my $k (@dv) {
284 66 100 100     170 push @keys_needed, $k
285             unless (
286             $k eq 'ABSTRACT' or
287             $k eq 'SAVE_AS_DEFAULTS'
288             );
289             }
290              
291 2         3 my $kvpairs;
292 2         3 foreach my $k (@keys_needed) {
293             $kvpairs .=
294             (' ' x 8) .
295             (sprintf '%-16s', $k) .
296             '=> q{' .
297 62         113 $selections{$k} .
298             "},\n";
299             }
300             $kvpairs .=
301 2         3 (' ' x 8) .
302             (sprintf '%-16s', 'ABSTRACT') .
303             '=> q{Module abstract (<= 44 characters) goes here}' .
304             "\n";
305              
306 2         4 my $bottomfile = <<'END_BOTTOMFILE';
307             );
308              
309             sub default_values {
310             my $self = shift;
311             return { %default_values };
312             }
313              
314             1;
315              
316             END_BOTTOMFILE
317              
318 2         10 my $output = $topfile . $kvpairs . $bottomfile;
319              
320 2         11 my $mmkr_dir = make_subhome_directory($self->{mmkr_dir_ref});
321 2         60 my $full_dir = File::Spec->catdir($mmkr_dir,
322             qw| ExtUtils ModuleMaker Personal |
323             );
324 2 50       104 if (! -d $full_dir) {
325 2         537 mkpath( $full_dir );
326 2 50       7 if ($@) {
327 0         0 croak "Unable to make directory for placement of personal defaults file: $!"; };
328             }
329 2         17 my $pers_full = File::Spec->catfile( $full_dir, q{Defaults.pm} );
330 2 50       39 if (-f $pers_full ) {
331 0         0 my $modtime = (stat($pers_full))[9];
332 0 0       0 rename $pers_full,
333             "$pers_full.$modtime"
334             or croak "Unable to rename $pers_full: $!";
335             }
336 2 50       99 open my $fh, '>', $pers_full
337             or croak "Unable to open $pers_full for writing: $!";
338 2 50       18 print $fh $output or croak "Unable to print $pers_full: $!";
339 2 50       67 close $fh or croak "Unable to close $pers_full after writing: $!";
340             }
341              
342             ## C<_get_dir_and_file()>
343             ##
344             ## This subroutine was originally in lib/ExtUtils/ModuleMaker/Utility.pm.
345             ## As other subroutines therein were superseded by calls to File::Save::Home
346             ## functions, they were no longer called in the .pm or .t files, hence, became
347             ## superfluous and uncovered by test suite. When _get_dir_and_file() became the
348             ## last called subroutine from Utility.pm, I decided it was simpler to pull it
349             ## into the current package.
350             ##
351             ## Usage : _get_dir_and_file($module) within complete_build()
352             ## Purpose : Get directory and name for .pm file being processed
353             ## Returns : 2-element list: First $dir; Second: $file
354             ## Argument : $module: pointer to the module being built
355             ## (as there can be more than one module built by EU::MM);
356             ## for the primary module it is a pointer to $self
357             ## Comment : Merely a utility subroutine to refactor code; not a method call.
358              
359             sub _get_dir_and_file {
360 90     90   108 my $module = shift;
361 90         316 my @layers = split( /::/, $module->{NAME} );
362 90         231 my $file = pop(@layers) . '.pm';
363 90         191 my $dir = join( '/', 'lib', @layers );
364 90         209 return ($dir, $file);
365             }
366              
367             1;
368              
369             #################### DOCUMENTATION ####################
370              
371             =head1 NAME
372              
373             ExtUtils::ModuleMaker - Better than h2xs for creating modules
374              
375             =head1 SYNOPSIS
376              
377             At the command prompt:
378              
379             % modulemaker
380              
381             Inside a Perl program:
382              
383             use ExtUtils::ModuleMaker;
384              
385             $mod = ExtUtils::ModuleMaker->new(
386             NAME => 'Sample::Module'
387             );
388              
389             $mod->complete_build();
390              
391             $mod->dump_keys(qw|
392             ... # key provided as argument to constructor
393             ... # same
394             |);
395              
396             $mod->dump_keys_except(qw|
397             ... # key provided as argument to constructor
398             ... # same
399             |);
400              
401             $license = $mod->get_license();
402              
403             $mod->make_selections_defaults();
404              
405             =head1 VERSION
406              
407             This document references version 0.56 of ExtUtils::ModuleMaker, released
408             to CPAN on January 30 2017.
409              
410             =head1 DESCRIPTION
411              
412             This module is a replacement for the most typical use of the F
413             utility bundled with all Perl distributions: the creation of the
414             directories and files required for a pure-Perl module to be installable with
415             F and distributable on the Comprehensive Perl Archive Network (CPAN).
416              
417             F has many options which are useful -- indeed, necessary -- for
418             the creation of a properly structured distribution that includes C code
419             as well as Perl code. Most of the time, however, F is used as follows
420              
421             % h2xs -AXn My::Module
422              
423             to create a distribution containing only Perl code. ExtUtils::ModuleMaker is
424             intended to be an easy-to-use replacement for I use of F.
425              
426             While you can call ExtUtils::ModuleMaker from within a Perl script (as in
427             the SYNOPSIS above), it's easier to use with a command-prompt invocation
428             of the F script bundled with this distribution:
429              
430             % modulemaker
431              
432             Then respond to the prompts. For Perl programmers, laziness is a
433             virtue -- and F is far and away the laziest way to create a
434             pure Perl distribution which meets all the requirements for worldwide
435             distribution via CPAN.
436              
437             =head1 USAGE
438              
439             =head2 Usage from the command-line with F
440              
441             The easiest way to use ExtUtils::ModuleMaker is to invoke the
442             F script from the command-line. You can control the content of
443             the files built by F either by supplying command-line options or
444             -- easier still -- replying to the screen prompts in F's
445             interactive mode.
446              
447             B
448             first time, you should turn now to the documentation for F which
449             is bundled this distribution.>> Return to this document once you have become
450             familiar with F.
451              
452             =head2 Use of Public Methods within a Perl Program
453              
454             You can use ExtUtils::ModuleMaker within a Perl script to generate the
455             directories and files needed to begin work on a CPAN-ready Perl distribution.
456             You will need to call C and C, both of which are
457             described in the next section. These two methods control the
458             building of the file and directory structure for a new Perl distribution.
459              
460             There are four other publicly available methods in this version of
461             ExtUtils::ModuleMaker. C, C and
462             C are intended primarily as shortcuts for
463             trouble-shooting problems with an ExtUtils::ModuleMaker object.
464             C enables you to be even lazier in your use of
465             ExtUtils::ModuleMaker by saving keystrokes entered for attributes.
466              
467             =head3 C
468              
469             Creates and returns an ExtUtils::ModuleMaker object. Takes a list
470             containing key-value pairs with information specifying the
471             structure and content of the new module(s). (In this documentation, we will
472             sometimes refer to these key-value pairs as the I of the
473             ExtUtils::ModuleMaker object.) With the exception of
474             key C (see below), the values in these pairs
475             are all strings. Like most such lists of key-value pairs, this list
476             is probably best held in a hash. Keys which may be specified are:
477              
478             =over 4
479              
480             =item * Required Argument
481              
482             =over 4
483              
484             =item * NAME
485              
486             The I required feature. This is the name of the primary module
487             (with 'C<::>' separators if needed). Will no longer support the older,
488             Perl 4-style separator ''C<'>'' like the module F. There is no
489             current default for NAME; you must supply a name explicitly.
490              
491             =back
492              
493             =item * Other Important Arguments
494              
495             =over 4
496              
497             =item * ABSTRACT
498              
499             A short description of the module. CPAN likes
500             to use this feature to describe the module. If the abstract contains an
501             apostrophe (C<'>), then the value corresponding to key C in
502             the list passed to the constructor must be double-quoted; otherwise
503             F gets messed up. Certain CPAN indexing features still work
504             better if the abstract is 44 or fewer characters in length, but this does not
505             appear to be as mandatory as in the past. (Defaults to dummy copy.)
506              
507             =item * VERSION
508              
509             A string holding the version number. For alpha releases, include an
510             underscore to the right of the dot like C<0.31_21>. (Default is C<0.01>.)
511              
512             =item * LICENSE
513              
514             Which license to include in the Copyright section. You can choose one of
515             the standard licenses by including 'perl', 'gpl', 'artistic', and 18 others
516             approved by opensource.org. The default is to choose the 'perl' flavor
517             which is to share it ''under the same terms as Perl itself.''
518              
519             Other licenses can be added by individual module authors to
520             ExtUtils::ModuleMaker::Licenses::Local to keep your company lawyers happy.
521              
522             Some licenses include placeholders that will be replaced with AUTHOR
523             information.
524              
525             =item * BUILD_SYSTEM
526              
527             This can take one of three values:
528              
529             =over 4
530              
531             =item * C<'ExtUtils::MakeMaker'>
532              
533             The first generates a basic Makefile.PL file for your module.
534              
535             =item * C<'Module::Build'>
536              
537             The second creates a Build.PL file.
538              
539             =item * C<'Module::Build and Proxy'>
540              
541             The third creates a Build.PL along with a proxy Makefile.PL
542             script that attempts to install Module::Build if necessary, and then
543             runs the Build.PL script. This option is recommended if you want to
544             use Module::Build as your build system. See Module::Build::Compat for
545             more details.
546              
547             B To correct a discrepancy between the documentation and code in
548             earlier versions of ExtUtils::ModuleMaker, we now explicitly provide
549             this synonym for the third option:
550              
551             'Module::Build and proxy Makefile.PL'
552              
553             (Thanks to David A Golden for spotting this bug.)
554              
555             =back
556              
557             =item * COMPACT
558              
559             For a module named ''Foo::Bar::Baz'' creates a base directory named
560             ''Foo-Bar-Baz'' instead of Foo/Bar/Baz. (Default is off.)
561              
562             =item * VERBOSE
563              
564             Prints messages to STDOUT as it creates directories, writes files, etc. (Default
565             is off.)
566              
567             =item * PERMISSIONS
568              
569             Used to create new directories. (Default is 0.56: group and world can not
570             write.)
571              
572             =item * USAGE_MESSAGE
573              
574             Message given when the module Cs. Scripts should set this to the same
575             string it would print if the user asked for help. (A reasonable default is
576             provided.)
577              
578             =item * NEED_POD
579              
580             Include POD section in F<*.pm> files created. (Default is on.)
581              
582             =item * NEED_NEW_METHOD
583              
584             Include a simple C method in the F<*.pm> files created. (Default is
585             on.)
586              
587             =item * CHANGES_IN_POD
588              
589             Omit a F file, but instead add a HISTORY section to the POD.
590             (Default is off).
591              
592             =item * INCLUDE_MANIFEST_SKIP
593              
594             Boolean value which, if true, includes a F file in the
595             distribution with reasonable default values facilitating use of the F
596             manifest> command during module development. (Thanks to David A Golden for
597             this feature. Default is off.)
598              
599             =item * INCLUDE_TODO
600              
601             Boolean value which, if true, includes a F file in the distribution in
602             which the module's author or maintainer can discuss future lines of
603             development. (Default is on.)
604              
605             =item * INCLUDE_LICENSE
606              
607             Boolean value which, if true, includes a F file in the distribution.
608             (Which LICENSE file is determined in the LICENSE option.) (Default is on.)
609              
610             =item * INCLUDE_SCRIPTS_DIRECTORY
611              
612             Boolean value which, if true, includes a F directory (at the same
613             level as F or F). (Default is on.)
614              
615             =item * INCLUDE_WARNINGS
616              
617             Boolean value which, if true, inserts C in all Perl modules
618             created by use of this module. (Default is off.)
619              
620             =item * INCLUDE_ID_LINE
621              
622             Boolean value which, if true, inserts C<#$Id$> in all Perl modules
623             created by use of this module for the purpose of inserting a Subversion file
624             'Id' string. (Default is off.)
625              
626             =back
627              
628             =item * Arguments Related to the Module's Author
629              
630             =over 4
631              
632             =item * AUTHOR
633              
634             Name of the author. If the author's name contains an apostrophe (C<'>),
635             then the corresponding value in the list passed to the constructor must
636             be double-quoted; otherwise F gets messed up.
637             (Defaults to dummy copy.)
638              
639             =item * EMAIL
640              
641             Email address of the author. If the author's e-mail address contains
642             an apostrophe (C<'>), then the corresponding value in the list passed
643             to the constructor must be double-quoted; otherwise
644             F gets messed up. (Defaults to dummy copy.)
645              
646             =item * CPANID
647              
648             The CPANID of the author. If this is omitted, then the line will not
649             be added to the documentation. (Defaults to dummy copy.)
650              
651             =item * WEBSITE
652              
653             The personal or organizational website of the author. If this is
654             omitted, then the line will not be added to the documentation.
655             (Defaults to dummy copy.)
656              
657             =item * ORGANIZATION
658              
659             Company or group owning the module. If this is omitted, then the line
660             will not be added to the documentation. (Defaults to dummy copy.)
661              
662             =back
663              
664             =item * Argument Related to Multiple Modules within a Distribution
665              
666             =over 4
667              
668             =item * EXTRA_MODULES
669              
670             A reference to an array of hashes, each of which contains values for
671             additional modules in the distribution.
672              
673             $mod = ExtUtils::ModuleMaker->new(
674             NAME => 'Alpha::Beta',
675             EXTRA_MODULES => [
676             { NAME => 'Alpha::Beta::Gamma' },
677             { NAME => 'Alpha::Beta::Delta' },
678             { NAME => 'Alpha::Beta::Gamma::Epsilon' },
679             ],
680             );
681              
682             As with the primary module, the only attribute required for each extra
683             module is C. Other attributes may be supplied but the primary
684             module's values will be used if no value is given here.
685              
686             Each extra module will be created in the correct relative place in the
687             F directory. By default, a test file will also be created in the F
688             directory corresponding to each extra module to test that it loads
689             properly. (See EXTRA_MODULES_SINGLE_TEST_FILE below to learn how to change
690             this behavior.) However, no other supporting documents (I README,
691             Changes) will be created.
692              
693             This is one major improvement over the earlier F as you can now
694             build multi-module packages.
695              
696             =back
697              
698             =item * Arguments Related to Test Files
699              
700             =over 4
701              
702             =item * FIRST_TEST_NUMBER
703              
704             A non-negative natural number from which the count begins in test files that
705             are numerically ordered. (Default is C<1>.)
706              
707             =item * TEST_NUMBER_FORMAT
708              
709             In test files that are numerically ordered, a Perl C formatting
710             string that specifies how FIRST_TEST_NUMBER is to be formatted. (Default is
711             C<"%03d">.)
712              
713             =item * TEST_NAME
714              
715             String forming the core of the name of a test file. (Default is C).
716              
717             =item * TEST_NAME_DERIVED_FROM_MODULE_NAME
718              
719             Boolean value which, when true, tells ExtUtils::ModuleMaker to create a file
720             in the test suite with a name derived from the F<.pm> package it is testing,
721             thereby overriding any value set in the TEST_NAME attribute. For example, for
722             a module called 'Alpha::Sigma::Tau', a test file named F
723             will be created. (Default is off.)
724              
725             =item * TEST_NAME_SEPARATOR
726              
727             String holding the character which joins components of a test file's name,
728             I the character used to join C<001> and in a file named
729             F<001_load.t>. (Defaults to an underscore C<_>.)
730              
731             =item * EXTRA_MODULES_SINGLE_TEST_FILE
732              
733             Boolean value which, when true and when extra modules have been specified in
734             the EXTRA_MODULES attribute, will put tests for those extra modules in a
735             single test file rather than in individual test files corresponding to each
736             module. (Default is off.)
737              
738             =item * INCLUDE_POD_COVERAGE_TEST
739              
740             Boolean value which, if true, causes a test file called F
741             to be included in the F directory. This test is advocated by some Perl
742             quality assurance experts and module authors. However, since the maintainer
743             of ExtUtils::ModuleMaker is not persuaded of its worth, default is off.
744              
745             =item * INCLUDE_POD_TEST
746              
747             Boolean value which, if true, causes a test file called F
748             to be included in the F directory. This test is advocated by some Perl
749             quality assurance experts and module authors. However, since the maintainer
750             of ExtUtils::ModuleMaker is not persuaded of its worth, default is off.
751              
752             =item * INCLUDE_FILE_IN_PM
753              
754             String holding a path to a file containing Perl code and/or documentation
755             which will be included in each F file created in a particular
756             distribution. By default, such content is placed after any constructor and
757             before the main POD block. This could, for example, be used to insert stub
758             subroutines in each package within a distribution. Default is off.
759              
760             =back
761              
762             =item * Arguments for Advanced Usages
763              
764             =over 4
765              
766             =item * INTERACTIVE
767              
768             Activates interactive mode in F utility. The interactive mode
769             presents the user with a series of menus from which the user selects features
770             by entering text at the command prompt. This attribute should only be used
771             by interactive scripts like F. (Default is off.)
772              
773             =item * ALT_BUILD
774              
775             Name of a Perl package holding methods which override those called withiin
776             C to shape the content of files created by using
777             ExtUtils::ModuleMaker. See "An Alternative Approach to Subclassing" below.
778              
779             =back
780              
781             =back
782              
783             =head3 C
784              
785             Creates all directories and files as configured by the key-value pairs
786             passed to C. Returns a
787             true value if all specified files are created -- but this says nothing
788             about whether those files have been created with the correct content.
789              
790             =head3 C
791              
792             When troubleshooting problems with an ExtUtils::ModuleMaker object, it
793             is often useful to use F to dump the contents of the
794             object. Use C when you only need to examine a few of the
795             object's attributes.
796              
797             $mod->dump_keys( qw| NAME ABSTRACT | );
798              
799             =head3 C
800              
801             When troubleshooting problems with an ExtUtils::ModuleMaker object, it
802             is often useful to use F to dump the contents of the
803             object. However, since certain elements of that object are often quite
804             lengthy (I the values of keys C and
805             C), it's handy to have a dumper function that dumps all
806             keys I certain designated keys.
807              
808             $mod->dump_keys_except(qw| LicenseParts USAGE_MESSAGE |);
809              
810             =head3 C
811              
812             Returns a string which nicely formats a short version of the License
813             and Copyright information.
814              
815             $license = $mod->get_license();
816             print $license;
817              
818             ... will print something like this:
819              
820             =====================================================================
821             =====================================================================
822             [License Information]
823             =====================================================================
824             =====================================================================
825             [Copyright Information]
826             =====================================================================
827             =====================================================================
828              
829             (Earlier versions of ExtUtils::ModuleMaker contained a
830             C function in each of submodules
831             F and
832             F. These functions were never
833             publicly documented or tested. C is intended as a
834             replacement for those two functions.)
835              
836             =head3 C
837              
838             Saves the values you entered as arguments passed to C in a personal
839             defaults file so that they supersede the defaults provided by
840             ExtUtils::ModuleMaker itself.
841              
842             This is an advanced usage of ExtUtils::ModuleMaker.
843             If you have used ExtUtils::ModuleMaker more than once, you have probably typed
844             in a choice for C, C, etc., more than once. To save
845             unnecessary typing and reduce typing errors, ExtUtils::ModuleMaker now offers
846             you the possibility of establishing B which override
847             the default values supplied with the distribution and found in
848             F.
849              
850             Suppose that you have called C as follows:
851              
852             $mod = ExtUtils::ModuleMaker->new(
853             NAME => 'Sample::Module',
854             ABSTRACT => 'Now is the time to join the party',
855             AUTHOR => 'Hilton Stallone',
856             CPANID => 'RAMBO',
857             ORGANIZATION => 'Parliamentary Pictures',
858             WEBSITE => 'http://parliamentarypictures.com',
859             EMAIL => 'hiltons@parliamentarypictures.com',
860             );
861              
862             While C<$mod> is still in scope, you can call:
863              
864             $mod->make_selections_defaults()
865              
866             and the values selected -- B
867             -- will be saved in a F file stored in your home
868             directory. The next time you invoke ExtUtils::ModuleMaker, the new
869             values will appear in the appropriate locations in the files created
870             by C. They will also appear in the menus provided on screen
871             by the F utility.
872              
873             What are those two important exceptions?
874              
875             =over 4
876              
877             =item * C
878              
879             You cannot enter a default value for C: the name of the module
880             you are creating. ExtUtil::ModuleMaker's own defaults file omits a value for
881             C to prevent you from overwriting an already existing module. (More
882             precisely, the default value is an empty string. ExtUtil::ModuleMaker will
883             throw an error if you attempt to create a module whose name is empty.) This
884             precaution applies to your personal defaults file as well.
885              
886             =item * C
887              
888             Since every module you create presumably has its own unique purpose, every
889             module must have a unique C to summarize that purpose.
890             ExtUtil::ModuleMaker supplies the following string as the default value for
891             the C key:
892              
893             Module abstract (<= 44 characters) goes here
894              
895             ... a string which, not coincidentally, happens to be exactly 44 characters
896             long -- so you can just overstrike it. This will be the default value for
897             C in any F file you create as well.
898              
899             =back
900              
901             =head1 CUSTOMIZATION
902              
903             ExtUtils::ModuleMaker is designed to be customizable to your needs and to
904             offer you more flexibility as you become more experienced with it.
905              
906             =head2 Via F Utility Interactive Mode
907              
908             As with everything else about ExtUtils::ModuleMaker, the easiest,
909             laziest way to get started is via the F utility; see
910             its documentation. Suppose that you have entered your correct name,
911             email address and website at the prompts in F's Author Menu.
912              
913             ------------------------
914              
915             modulemaker: Author Menu
916              
917             Feature Current Value
918             N - Author 'John Q Public'
919             C - CPAN ID 'MODAUTHOR'
920             O - Organization 'XYZ Corp.'
921             W - Website 'http://public.net/~jqpublic'
922             E - Email 'jqpublic@public.net'
923              
924             R - Return to main menu
925             X - Exit immediately
926              
927             Please choose which feature you would like to edit:
928              
929             Why should you ever have to enter this information again? Return
930             to the F Main Menu (C).
931              
932             ------------------------
933              
934             modulemaker: Main Menu
935              
936             Feature Current Value
937             N - Name of module ''
938             S - Abstract 'Module abstract (<= 44 characters) goes here'
939             A - Author information
940             L - License 'perl'
941             D - Directives
942             B - Build system 'ExtUtils::MakeMaker'
943              
944             G - Generate module
945             H - Generate module;
946             save selections as defaults
947              
948             X - Exit immediately
949              
950             Please choose which feature you would like to edit:
951              
952             Select C instead of C to generate the distribution. An internal
953             call to C will save those selections in a
954             personal defaults file and present them to you on the Author Menu the
955             next time you go to use it.
956              
957             =head2 Via F Utility Command-Line Options Mode
958              
959             For simplicity, not all of ExtUtils::ModuleMaker's default values are
960             represented on F's menus. Those that are not represented on
961             those menus cannot be changed from there. They I, however, in many
962             cases be specified as options passed to F on the command-line and
963             automatically saved as personal defaults by including the C flag as one of
964             those options. If, for example, your name is 'John Q Public' and you want all
965             modules you create to have compact top-level directories, you would call:
966              
967             % modulemaker -Icsn Sample::Module -u 'John Q Public'
968              
969             A distribution with a top-level directory F would be created.
970             'John Q Public' would appear in appropriate places in
971             F and F. You
972             could then throw away the entire F directory tree. The I
973             time you call C, the call
974              
975             % modulemaker -In Second::Module
976              
977             would suffice to generate a compact top-level directory and 'John Q Public'
978             would appear in appropriate locations instead of the dreaded 'A. U. Thor'.
979              
980             =head2 Via C
981              
982             In I cases, ExtUtils::ModuleMaker's default values can be overridden with
983             arguments passed to C inside a Perl program. The overriding can then
984             be made permanent by calling C.
985              
986             Suppose, for example,
987              
988             =over 4
989              
990             =item 1
991              
992             that you want the files in your test suite to appear in a numerical
993             order starting from C<0> rather than ExtUtils::ModuleMaker's own default
994             starting point of C<1>;
995              
996             =item 2
997              
998             that you want the number in
999             the test file's name to be formatted as a two-digit string padded with zeroes
1000             rather than ExtUtils::ModuleMaker's own default format of a three-digit,
1001             zero-padded string;
1002              
1003             =item 3
1004              
1005             that you want the numerical part of the test filename to be joined to the
1006             lexical part with a dot (C<.>) rather than ExtUtils::ModuleMaker's own
1007             default linkage character of an underscore (C<_>); and
1008              
1009             =item 4
1010              
1011             that you want the lexical part of the test filename to reflect the module's
1012             name rather than ExtUtils::ModuleMaker's default of C.
1013              
1014             =back
1015              
1016             Your Perl program would look like this:
1017              
1018             #!/usr/local/bin/perl
1019             use strict;
1020             use warnings;
1021             use ExtUtils::ModuleMaker;
1022              
1023             my $mod = ExtUtils::ModuleMaker->new(
1024             NAME => 'Sample::Module',
1025             AUTHOR => 'John Q Public',
1026             COMPACT => 1,
1027             FIRST_TEST_NUMBER => 0,
1028             TEST_NUMBER_FORMAT => "%02d",
1029             TEST_NAME_SEPARATOR => q{.},
1030             TEST_NAME_DERIVED_FROM_MODULE_NAME => 1,
1031             );
1032              
1033             $mod->make_selections_defaults();
1034              
1035             A subsequent call to the F utility,
1036              
1037             % modulemaker -In Second::Balcony::Jump
1038              
1039             would generate a directory tree with a compact top-level, 'John Q Public' in
1040             appropriate locations in F and
1041             F and a test file called
1042             F.
1043              
1044             =head2 Via Subclassing ExtUtils::ModuleMaker
1045              
1046             If you're a power-user, once you start playing with ExtUtils::ModuleMaker, you
1047             won't be able to stop. You'll ask yourself, ''Self, if I can change the
1048             default values, why can't I change the 'boilerplate' copy that appears inside
1049             the files which ExtUtils::ModuleMaker creates?''
1050              
1051             Now, you can. You can hack on the methods which
1052             C and C call internally to
1053             customize their results to your heart's desire. The key: build an entirely
1054             new Perl extension whose F file has methods that override the methods
1055             you need overridden -- and I those methods. Follow these steps:
1056              
1057             =head3 1. Study F, F<::Initializers> and F<::StandardText>
1058              
1059             ExtUtils::ModuleMaker's default values are stored in
1060             F, specifically, in its
1061             C method. Identify those values which you wish to change.
1062              
1063             ExtUtils::ModuleMaker's other internal methods are found in two other files:
1064             F and
1065             F. Rule of thumb: If an internal
1066             method is called within C, it is found in
1067             ExtUtils::ModuleMaker::Initializers. If it is called within
1068             C, it is found in ExtUtils::ModuleMaker::StandardText.
1069             Study these two packages to identify the methods you wish to override.
1070              
1071             I If changing a default value in ExtUtils::ModuleMaker::Defaults will
1072             achieve your objective, make that change rather than trying to override
1073             methods in ExtUtils::ModuleMaker::Initializers or
1074             ExtUtils::ModuleMaker::StandardText.
1075              
1076             I You should probably think about overriding methods in
1077             ExtUtils::ModuleMaker::StandardText before overriding those in
1078             ExtUtils::ModuleMaker::Initializers.
1079              
1080             =head3 2. Use F to Create the Framework for a New Distribution
1081              
1082             You're creating a new Perl extension. Who ya gonna call? F,
1083             natch! (If you have not read the documentation for F by this
1084             point, do so now.)
1085              
1086             Suppose that you've gotten on the 'Perl Best Practices' bandwagon and want to
1087             create all your Perl extensions in the style recommended by Damian Conway in
1088             the book of the same name. Use F to create the framework:
1089              
1090             % modulemaker -Icqn ExtUtils::ModuleMaker::PBP \
1091             -u 'James E Keenan' \
1092             -p JKEENAN \
1093             -o 'Perl Seminar NY' \
1094             -w http://search.cpan.org/~jkeenan/
1095              
1096             You used the C<-q> option above because you do I want or need a
1097             constructor in the new package you are creating. That package will I
1098             its constructor from ExtUtils::ModuleMaker.
1099              
1100             =head3 3. Edit the F File
1101              
1102             Open up the best text-editor at your disposal and proceed to hack:
1103              
1104             % vi ExtUtils-ModuleMaker-PBP/lib/ExtUtils/ModuleMaker/PBP.pm
1105              
1106             Add this line near the top of the file:
1107              
1108             use base qw{ ExtUtils::ModuleMaker };
1109              
1110             so that ExtUtils::ModuleMaker::PBP inherits from ExtUtils::ModuleMaker (which,
1111             in turn, inherits from ExtUtils::ModuleMaker::Defaults,
1112             ExtUtils::ModuleMaker::Initializers and ExtUtils::ModuleMaker::StandardText).
1113              
1114             If you have carefully studied ExtUtils::ModuleMaker::Defaults,
1115             ExtUtils::ModuleMaker::StandardText and I, you will write
1116             methods including the following:
1117              
1118             sub default_values {
1119             my $self = shift;
1120             my $defaults_ref = $self->SUPER::default_values();
1121             $defaults_ref->{COMPACT} = 1;
1122             $defaults_ref->{FIRST_TEST_NUMBER} = 0;
1123             $defaults_ref->{TEST_NUMBER_FORMAT} = "%02d";
1124             $defaults_ref->{EXTRA_MODULES_SINGLE_TEST_FILE} = 1;
1125             $defaults_ref->{TEST_NAME_SEPARATOR} = q{.};
1126             $defaults_ref->{INCLUDE_TODO} = 0;
1127             $defaults_ref->{INCLUDE_POD_COVERAGE_TEST} = 1;
1128             $defaults_ref->{INCLUDE_POD_TEST} = 1;
1129             return $defaults_ref;;
1130             }
1131              
1132             sub text_Makefile {
1133             my $self = shift;
1134             my $Makefile_format = q~
1135             use strict;
1136             use warnings;
1137             use ExtUtils::MakeMaker;
1138              
1139             WriteMakefile(
1140             NAME => '%s',
1141             AUTHOR => '%s <%s>',
1142             VERSION_FROM => '%s',
1143             ABSTRACT_FROM => '%s',
1144             PL_FILES => {},
1145             PREREQ_PM => {
1146             'Test::More' => 0,
1147             'version' => 0,
1148             },
1149             dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
1150             clean => { FILES => '%s-*' },
1151             );
1152             ~;
1153             my $text_of_Makefile = sprintf $Makefile_format,
1154             map { my $s = $_; $s =~ s{'}{\\'}g; $s; }
1155             $self->{NAME},
1156             $self->{AUTHOR},
1157             $self->{EMAIL},
1158             $self->{FILE},
1159             $self->{FILE},
1160             $self->{FILE};
1161             return $text_of_Makefile;
1162             }
1163              
1164             Of course, for true Perl laziness, you'll use CPAN distribution
1165             ExtUtils::ModuleMaker::PBP, written by the author of ExtUtils::ModuleMaker as
1166             an exemplar of subclassing ExtUtils::ModuleMaker and generating the same
1167             output as Damian Conway's Module::Starter::PBP.
1168              
1169             =head3 4. Test
1170              
1171             How do you know you have correctly subclassed ExtUtils::ModuleMaker? With a
1172             test suite, of course. With careful editing, you can use many of
1173             ExtUtils::ModuleMaker's own tests in your new distribution. You will, of
1174             course, have to change a number of tests, because the default values implied
1175             by Conway's recommendations are different from ExtUtils::ModuleMaker's own
1176             defaults. Among other things, you will have to do a search-and-replace on all
1177             constructor calls.
1178              
1179             % perl -pi'*.bak' -e 's{ExtUtils::ModuleMaker->new}{ExtUtils::ModuleMaker::PBP->new}g;'
1180              
1181             Of course, you I have written your tests first, right?
1182              
1183             =head3 5. Install and Use
1184              
1185             You would install your new distribution as you would any other Perl
1186             distribution, I with either ExtUtils::MakeMaker or Module::Build,
1187             depending on which you chose in creating your subclass.
1188              
1189             #!/usr/local/bin/perl
1190             use strict;
1191             use warnings;
1192             use ExtUtils::ModuleMaker::PBP;
1193              
1194             my $mod = ExtUtils::ModuleMaker::PBP->new(
1195             NAME => 'Sample::Module',
1196             );
1197              
1198             $mod->complete_build();
1199              
1200             For an adaptation of the F utility to work with
1201             ExtUtils::ModuleMaker::PBP, see F which is bundled with the latter
1202             package.
1203              
1204             =head3 An Alternative Approach to Subclassing
1205              
1206             There is one other way to subclass to ExtUtils::ModuleMaker which bears
1207             mentioning, more because the author used it in the development of this version
1208             of ExtUtils::ModuleMaker than because it is recommended. If for some reason
1209             you do not wish to create a full-fledged Perl distribution for your subclass,
1210             you can simply write the subclassing package and store it in the same
1211             directory hierarchy on your system in which your personal defaults file is
1212             stored.
1213              
1214             For example, suppose you are experimenting and only wish to override one
1215             method in ExtUtils::ModuleMaker::StandardText. You can create a package
1216             called ExtUtils::ModuleMaker::AlternativeText. If you are working on a
1217             Unix-like system, you would move that file such that its path would be:
1218              
1219             "$ENV{HOME}/.modulemaker/ExtUtils/ModuleMaker/AlternativeText.pm"
1220              
1221             You would then add one argument to your call to
1222             C:
1223              
1224             my $mod = ExtUtils::ModuleMaker->new(
1225             NAME => 'Sample::Module',
1226             ALT_BUILD => 'ExtUtils::ModuleMaker::AlternativeText',
1227             );
1228              
1229             =head1 CAVEATS
1230              
1231             =over 4
1232              
1233             =item * Tests Require Perl 5.6
1234              
1235             While the maintainer has attempted to make the code in
1236             F and the F utility compatible
1237             with versions of Perl older than 5.6, the test suite currently requires
1238             5.6 or later. The tests which require 5.6 or later are placed in SKIP blocks.
1239             Since the overwhelming majority of the tests I require 5.6, running the
1240             test suite on earlier Perl versions won't report much that is meaningful.
1241              
1242             =item * Testing of F's Interactive Mode
1243              
1244             The easiest, laziest and recommended way of using this distribution is
1245             the command-line utility F, especially its interactive
1246             mode. However, this is necessarily the most difficult test, as its
1247             testing would require capturing the STDIN, STDOUT and STDERR for a
1248             process spawned by a C call from within a test
1249             file. For now, the maintainer has relied on repeated visual inspection
1250             of the screen prompts generated by F. With luck, F-based
1251             tests will be available in a future version.
1252              
1253             =item * Testing F on Non-*nix-Like Operating Systems
1254              
1255             Since testing the F utility from within the test suite
1256             requires a C call, a clean test run depends in part on the way
1257             a given operating system parses command-line arguments. The maintainer
1258             has tested this on Darwin and Win32 and, thanks to a suggestion by A.
1259             Sinan Unur, solved a problem on Win32. Results on other operating
1260             systems may differ; feedback is welcome.
1261              
1262             =back
1263              
1264             =head1 TO DO
1265              
1266             =over 4
1267              
1268             =item *
1269              
1270             Tests for F's interactive mode.
1271              
1272             =item *
1273              
1274             Possible new C attribute which would insert modules from which
1275             user's new module will inherit.
1276              
1277             USE_AS_BASE => [ qw|
1278             Template::Toolkit
1279             Module::Build
1280             Lingua::Romana::Perligata
1281             Acme::Buffy
1282             | ],
1283              
1284             Such an attribute would require replacement copy for
1285             C.
1286              
1287             =item *
1288              
1289             Creation of a mailing list for ExtUtils::ModuleMaker.
1290              
1291             =back
1292              
1293             =head1 AUTHOR/MAINTAINER
1294              
1295             ExtUtils::ModuleMaker was originally written in 2001-02 by R. Geoffrey Avery
1296             (modulemaker [at] PlatypiVentures [dot] com). Since version 0.33 (July
1297             2005) it has been maintained by James E. Keenan (jkeenan [at] cpan [dot]
1298             org).
1299              
1300             =head1 SUPPORT
1301              
1302             Send email to jkeenan [at] cpan [dot] org. Please include 'modulemaker'
1303             in the subject line. Please report any bugs or feature requests to
1304             C, or through the web interface at
1305             L.
1306              
1307             Development repository: L
1308              
1309             =head1 ACKNOWLEDGMENTS
1310              
1311             Thanks first and foremost to Geoff Avery for creating ExtUtils::Modulemaker
1312             and popularizing it via presentations I attended at YAPC::NA::2003 (Boca
1313             Raton) and YAPC::EU::2003 (Paris).
1314              
1315             Soon after I took over maintenance of ExtUtils::ModuleMaker, David A
1316             Golden became a driving force in its ongoing development, providing
1317             suggestions for additional functionality as well as bug reports. David is the
1318             author of ExtUtils::ModuleMaker::TT which, while not a pure subclass of
1319             ExtUtils::ModuleMaker, extends its functionality for users of
1320             Template::Toolkit.
1321              
1322             Thanks for suggestions about testing the F utility to
1323             Michael G Schwern on perl.qa and A Sinan Unur and Paul Lalli on
1324             comp.lang.perl.misc. Thanks for help in dealing with a nasty bug in the
1325             testing to Perlmonks davidrw and tlm. That well known Perl hacker, Anonymous
1326             Guest, contributed another bug report on rt.cpan.org.
1327              
1328             As development proceeded, several issues were clarified by members of
1329             Perlmonks.org. CountZero, xdg, Tanktalus, holli, TheDamian and nothingmuch
1330             made particularly useful suggestions, as did Brian Clarkson.
1331              
1332             Thanks also go to the following beta testers: Alex Gill, Marc Prewitt, Scott
1333             Godin, Reinhard Urban and imacat.
1334              
1335             Version 0.39 of ExtUtils::ModuleMaker encountered spurious testing failure reports
1336             from testers.cpan.org. These were eventually diagnosed as being due to bugs
1337             in the automated testing programs and/or their operating environments on
1338             different systems -- I to problems outside ExtUtils::ModuleMaker
1339             itself. Several Perlmonks helped investigate this problem: chromatic,
1340             dave_the_m, randyk, and njh.
1341              
1342             Thanks to Paul M Sirianni for reporting bugs that led to versions 0.48 and
1343             0.51.
1344              
1345             Thanks to Chris Kirke for pointing to reports at
1346             http://cpants.cpanauthors.org/dist/ExtUtils-ModuleMaker of inconsistent
1347             $VERSION numbers across the component files.
1348              
1349             =head1 COPYRIGHT
1350              
1351             Copyright (c) 2001-2002 R. Geoffrey Avery.
1352             Revisions from v0.33 forward (c) 2005-2015 James E. Keenan.
1353             All rights reserved.
1354             This program is free software; you can redistribute
1355             it and/or modify it under the same terms as Perl itself.
1356              
1357             The full text of the license can be found in the
1358             LICENSE file included with this module.
1359              
1360             =head1 DISCLAIMER OF WARRANTY
1361              
1362             BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
1363             FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
1364             OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
1365             PROVIDE THE SOFTWARE ''AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER
1366             EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1367             WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
1368             ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
1369             YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
1370             NECESSARY SERVICING, REPAIR, OR CORRECTION.
1371              
1372             IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
1373             WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
1374             REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
1375             LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
1376             OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
1377             THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
1378             RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
1379             FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
1380             SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
1381             SUCH DAMAGES.
1382              
1383             =head1 SEE ALSO
1384              
1385             F, F, F, F, F,
1386             F, F, F.
1387              
1388             =cut
1389