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

NAME

ExtUtils::ModuleMaker - A simple replacement for h2xs -XA

SYNOPSIS

h2xs can be used for pure perl modules using the -XA flags. But it has many annoying features. ExtUtils::ModuleMaker is designed to bring module templates into the 21st Century.

In the simplest case it can be used from the command line as

        perl -MExtUtils::ModuleMaker -e "Quick_Module ('Sample::Module::Foo')"

DESCRIPTION

This module is a replacement for h2xs. It can be used from the command line with just a module name, similar to h2xs, or can be called from a Modulefile.PL similar to calling MakeMaker from Makefile.PL.

USAGE

  use ExtUtils::ModuleMaker;

  Generate_Module_Files (
                         NAME     => 'Sample::Module::Foo',
                         ABSTRACT => 'a sample module',
                         AUTHOR   => {NAME    => 'A. U. Thor',
                                      EMAIL   => 'a.u.thor@a.galaxy.far.far.away',
                                      CPANID  => 'AUTHOR',
                                      WEBSITE => 'http://a.galaxy.far.far.away/modules',
                                     },
                         VERSION  => 0.01,
                         LICENSE  => 'perl',
                         EXTRA_MODULES=> [
                                          {
                                           NAME     => 'Sample::Module::Bar',
                                           ABSTRACT => 'a second module',
                                          },
                                          {
                                           NAME     => 'Sample::Baz',
                                           ABSTRACT => 'a third module',
                                          },
                                         ],
  );

BUGS

Still only supports the simple perl only modules, not things with XS components.

SUPPORT

Send email to modulemaker@PlatypiVentures.com.

AUTHOR

    R. Geoffrey Avery
    CPAN ID: RGEOFFREY
    modulemaker@PlatypiVentures.com
    http://www.PlatypiVentures.com/perl/modules/ModuleMaker.shtml

COPYRIGHT

Copyright (c) 2001-2002 R. Geoffrey Avery. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

h2xs, ExtUtils::MakeMaker

PUBLIC METHODS

Each public function/method is described here. These are how you should interact with this module.

Quick_Module

 Usage     :
             perl -MExtUtils::ModuleMaker -e "Quick_Module ('Sample::Module')"
 or
             use ExtUtils::ModuleMaker;
             Quick_Module ('Sample::Module');

 Purpose   : Creates a Module.pm with supporing files
 Returns   : n/a
 Argument  : A name for the module, like 'Module' or 'Sample::Module'
 Throws    : 
 Comments  : More closely mimics h2xs behavior than Generate_Module_Files.
           : Included to allow simple creation from a command line.

See Also : Generate_Module_Files

Generate_Module_Files

 Usage     : How to use this function/method
 Purpose   : Creates one or more modules with supporing files
 Returns   : n/a
 Argument  : A hash with the information for the new module(s)
 Throws    : 
 Comments  : 

See Also : Verify_Data, Create_Changes, Create_Makefile, Create_README, : Create_Module, Create_MANIFEST, Create_MANIFEST_SKIP, : Create_cvsignore

NAME

The only required feature. This is the name of the primary module (with '::' separators if needed).

ABSTRACT

A short description of the module, this will be passed on to MakeMaker through Makefile.PL.

VERSION

A real number to be the version number. The default is 0.01.

LICENSE

Which license to include in the Copyright section. You can choose one of the standard licenses by including 'perl', 'gpl', 'artistic', and 18 others approved by opensource.org. The default is to choose the 'perl' flavor which is to share it "under the same terms as Perl itself". Any other value is passed on directly so you can have any license you want.

LICENSE == 'custom'

When set to 'custom', you get the opportunity to specify exactly these fields...

COPYRIGHT

Text to appear in the COPYRIGHT section of the pod

LICENSETEXT

The text for the LICENSE file

AUTHOR

A hash contining information about the author to pass on to all the necessary places in the files.

NAME

Name of the author.

EMAIL

Email address of the author.

CPANID

The CPANID of the author. If this is omited, then the line will not be added to the documentation.

WEBSITE

The personal or organizational website of the author.

EXTRA_MODULES

An array of hashes that each contain values for NAME and ABSTRACT. Each extra module will be created in the correct relative place in the lib directory, but no extra supporting documents, like README or Changes.

This is one major improvement over the earlier h2xs as you can now build multi module packages.

compact

For a module named "Foo::Bar::Baz" creates a base directory named "Foo-Bar-Baz" instead of Foo/Bar/Baz.

PRIVATE METHODS

Each private function/method is described here. These methods and functions are considered private and are intended for internal use by this module. They are not considered part of the public interface and are described here for documentation purposes only.

Verify_Data

 Usage     : 
 Purpose   : To fill in default values for unspecified features
 Returns   : n/a
 Argument  : pointer to hash of data for modules
 Throws    : 
 Comments  : 

See Also : Create_Base_Directory

Create_Base_Directory

 Usage     : 
 Purpose   :
             Create the directory where all the files will be created.
 Returns   :
             $DIR = directory name where the files will live
 Argument  :
             $package_name = name of module separated by '::'
 Throws    : 
 Comments  : 

See Also : Check_Dir

Check_Dir

 Usage     :
             Check_Dir ($dir, $MODE);
 Purpose   :
             Creates a directory with the correct mode if needed.
 Returns   : n/a
 Argument  :
             $dir = directory name
             $MODE = mode of directory (e.g. 0777, 0755)
 Throws    : 
 Comments  : 

See Also :

Create_Makefile

 Usage     : Create_Makefile ($p_module_data);
 Purpose   : Write the Makefile.PL file
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    : 
 Comments  : 

See Also :

Create_Changes

 Usage     : Create_Changes ($p_module_data);
 Purpose   : 
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    : 
 Comments  : 

See Also :

Create_License

 Usage     : Create_License ($p_module_data);
 Purpose   : 
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    : 
 Comments  : 

See Also :

Create_MANIFEST

 Usage     : Create_MANIFEST ($p_module_data);
 Purpose   : 
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    : 
 Comments  : 

See Also :

Create_README

 Usage     : Create_README ($p_module_data);
 Purpose   : 
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    : 
 Comments  : 

See Also :

Create_MANIFEST_SKIP

 Usage     : Create_MANIFEST_SKIP ($p_module_data);
 Purpose   : Writes MANIFEST.SKIP which prevents the following tagets
             `make install` and `make dist` from using distribution files,
             editor backups, revision control (CVS & RCS) and dynamically-
             created MakeMaker files & directories.
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    :
 Comments  :
 Author    : joshua@cpan.org

The regular expressions, explained:

^Makefile$ - created by `perl Makefile.PL`
^blib/ - created by `make`
^Makefile\.[a-z]+$ - ignores `Makefile.old`
^pm_to_blib$ - created by `make`
CVS/.* - CVS stores working dir info in the CVS directory
,v$ - RCS files
^te?mp/ - Temporary directory
\.old$ - Makefile gets renamed to Makefile.old each time you `make`
\.bak$ - Backup files
~$ - Editor-created file backup
^# - Editor-created file backup
\.shar$ - `make shardist` distribution
\.tar$ - `make tardist` distribution
\.tgz$ - `make dist` distribution
\.tar\.gz$ - `make dist` distribution
\.zip$ - `make zipdist` distribution
_uu$ - `make uutardist` distribution

Create_cvsignore

 Usage     : Create_cvsignore ($p_module_data);
 Purpose   : Writes .cvsignore. Prevents MakeMaker's dynamically-
             created files from getting checked into CVS (or listed
             during `cvs update`.
 Returns   : n/a
 Argument  : $p_module_data = hash with all the data
 Throws    :
 Comments  :
 Author    : joshua@cpan.org

See Also :

Create_Module

 Usage     : 
 Purpose   : 
 Returns   : 
 Argument  : 
 Throws    : 
 Comments  : 

See Also :

Create_Test_Init

 Usage     : 
 Purpose   : 
 Returns   : 
 Argument  : 
 Throws    : 
 Comments  : 

See Also :