Barrie Slaymaker > Module-Husbandry-0.002 > Module::Husbandry

Download:
Module-Husbandry-0.002.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 0.002   Source  

NAME ^

Module::Husbandry - build and manage perl modules in a Perl module distribution

SYNOPSIS ^

DESCRIPTION ^

FUNCTION ^

parse_module_specs
    my @specs = parse_module_specs @ARGV, \%options;

Parses a module specification, one of:

    Foo
    Foo::Bar
    lib/Foo.pm
    lib/Foo/Bar.pm
    lib/Foo/Bar.pod

and returns the package name (Foo::Bar) and the path to the file (lib/Foo/Bar.pm) for each parameter in a hash. The result HASHes look like:

    {
         Filename       => "lib/Foo/Bar.pm",
         Package        => "Foo::Bar",
         Spec           => $spec,   ## What was passed in
    };

Any name containing characters other that A-Z, 0-9, :, or ' are assumed to be filenames. Filenames should begin with lib/ (or LIB/ on Win32) or will be warned about.

The only option provided is:

    as_dir    Set this to 1 to suppress the add "/" instead of ".pm"
              the Filename when a module name is converted to a filename.
              Does not affect anything when a filename is parsed.  This
              is used by mvpm's recurse option.
parse_bin_specs
    my @specs = parse_bin_specs @ARGV, \%options;

Parses specifications for a "bin" program, like:

    foo
    bin/foo

and returns the program name (foo) and the path to the file (bin/foo) for each parameter in a hash. The result HASHes look like:

    {
         Filename       => "bin/foo",
         Program        => "foo",
         Spec           => $spec,   ## What was passed in
    };

If a spec has no directory separators, "bin/" is prepended. If a spec has directory separator, no "bin/" is prepended.

parse_dist_specs

Takes a list of distributions specs (Foo::Bar, Foo-Bar) and returns a hash like

    {
        Package => "Foo::Bar",
        Spec    => $spec,
    }
reconfigure_dist

Runs perl Makefile.PL using the current Perl.

TODO: Support Module::Build methodology.

add_to_MANIFEST
    add_to_MANIFEST "foo", "bar";

Adds one or more files to the MANIFEST.

rm_from_MANIFEST
    rm_from_MANIFEST "foo", "bar";

Remove one or more files to the MANIFEST.

install_file
    install_file $from_file_hash, $to_file_hash, \%macros;

Locates the approptiate file in the .newpm directory and copies it, instantiating any <%macros%> needed.

Reads <%meta foo bar %> and <%meta foo=bar %> tags.

    Meta tags
    =========
    <%meta chmod 0755 %>    chmod the resulting file (numeric only)

Any unrecognized meta or macro tags are ignored with a warning.

Adds file to MANIFEST.

TODO: adapt to Module::Build's manifesting procedures.

templates_for
    my @from_files = templates_for @to_files;

Given a list of files to write to, find the appropriate source files.

test_scripts_for
    my @test_scripts = test_scripts_for @modules;

Returns test scripts for any .pm and .pl file in @modules:

    {
        Filename => "t/Foo.t",
    }

where @modules is an array of HASHes returned by parse_module_specs.

skeleton_files
    my %skel_map = skeleton_files $target_dir;

Returns a list of from/to files to install from the skeleton directory.

cppm
    cppm $from, $to, \%options

Copies a file in a distribution and a related test suite (if found).

TODO: Don't rewrite changelogs. Not sure how best to recognize them; this could be an option for the mythical .newpmrc.

TODO: Make the filename substitutions patterns case insensitive on Win32?

newpm

Create new modules in ./lib/... and, if it's a .pm module, a test suite in ./t/...

Does not build the make file.

newpmbin

Create new script files in bin/. Does not add a test script (since there's no safe way to test an arbitrary program).

newpmdist

Create a new distribution in . and populate it from the skeleton files. newpm() a new module.

mvpm
    mvpm $from, $to, \%options

Changes the name of a file in a distribution and all occurences of the file's name (and, if applicable, package name) in it and in all other files.

A backup of any files changed is placed in .newpm/bak_0000 (where 0000 increments each time).

TODO: some kind of locking so simultaneous mvpms don't happen to choose the same backup directory name.

TODO: Don't rewrite changelogs. Not sure how best to recognize them; this could be an option for the mythical .newpmrc.

TODO: Make the filename substitutions patterns case insensitive on Win32?

rmpm

Removes any modules and tests named after a package (or module) name.

Warns about any other files that refer to the doomed package.

A backup is made in the backup directory (.mvpm/... for now, will change)..

TODO: Allow a site-specific rm command to be used, like 'trash', so this command may be better integrated with a user's working environment. This will wait until we restructure the directories.

usage
parse_cli
    my ( $options, @params ) = parse_options @ARGV, \%spec;

Reads the command line and parses out the options and other parameters. Options may be intermixed with parameters.

Options -h|-?|--help and -- do the normal things always.

-n|--describe print out what *would* happen, but do nothing.

LIMITATIONS ^

ASSumes a dir tree and file naming conventions like:

    Foo-Bar/
        Makefile.PL
        ...
        lib/Foo/Bar.pm
        t/Foo-Bar.pm

This probably won't work out all that well for XS distributions, not sure how they work. Let me know and we'll see if we can add it :)

Not tested on Win32.

Does not know about Module::Build.

Does not use anything like a .newpmrc file.

COPYRIGHT ^

    Copyright 2002, R. Barrie Slaymaker, Jr., All Rights Reserved

LICENSE ^

You may use this module under the terms of the BSD, Artistic, oir GPL licenses, any version.

AUTHOR ^

Barrie Slaymaker <barries@slaysys.com>

syntax highlighting: