---
name: "Module::Package::Plugin"
section: "3pm"
platform: "linux"
package: "libmodule-package-perl"
version: "0.30-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Module::Package::Plugin"
---

# Module::Package::Plugin(3pm)

## SYNOPSIS

```
    package Module::Package::Name;
    package Module::Package::Name::flavor;
    use Moo;
    extends 'Module::Package::Plugin';
    sub main {
        my ($self) = @_;
        $self->mi->some_module_install_author_plugin;
        $self->mi->other_author_plugin;
    }
    1;
```

## DESCRIPTION

This module is the base class for Module::Package plugins.

## EXAMPLE

Take a look at the Module::Package::Ingy module, for a decent starting point example. That plugin module is actually used to package Module::Package itself.

## API

To create a Module::Package plugin you need to subclass Module::Package::Plugin and override the `"main"` method, and possibly other things. This section describes how that works.

Makefile.PL processing happens in the following order:

```
    - 'use inc::Module::Package...' is invoked
    - $plugin->initial is called
    - BEGIN blocks in Makefile.PL are run
    - $plugin->main is called
    - The body of Makefile.PL is run
    - $plugin->final is called
```

### initial

This method is call during the processing of 'use inc::Module::Package'. You probably don't need to subclass it. If you do you probably want to call the SUPER method.

It runs the deps\_list, if any and guesses the primary modules file path.

### main

This is the method you must override. Do all the things you want. You can call `"all_from"`, if you need to get sequencing right, otherwise it gets called by **final()**. Don't call `"WriteAll"`, it get's called automatically in **final()**.

### final

This does all the things after the entire Makefile.PL body has run. You probably don't need to override it.

## OPTIONS

The following options are available for use from the Makefile.PL:

```
    use Module::Package 'Foo:bar',
        deps_list => 0|1,
        install_bin => 0|1,
        install_share => 0|1,
        manifest_skip => 0|1,
        requires_from => 0|1;
```

These options can be used by any subclass of this module.

### deps\_list

Default is 1.

This option tells Module::Package to generate a `"author_requires"` deps list, when you run the Makefile.PL. This list will go in the file `"pkg/deps_list.pl"` if that exists, or after a '\_\_END\_\_' statement in your Makefile.PL. If neither is available, a reminder will be warned (only when the author runs it).

This list is important if you want people to be able to collaborate on your modules easily.

### install\_bin

Default is 1.

All files in a `"bin/"` directory will be installed. It will call the `"install_script"` plugin for you. Set this option to 0 to disable it.

### install\_share

Default is 1.

All files in a `"share/"` directory will be installed. It will call the `"install_share"` plugin for you. Set this option to 0 to disable it.

### manifest\_skip

Default is 1.

This option will generate a sane MANIFEST.SKIP for you and delete it again when you run `"make clean"`. You can add your own skips in the file called `"pkg/manifest.skip"`. You almost certainly want this option on. Set to 0 if you are weird.

### requires\_from

Default is 1.

This option will attempt to find all the requirements from the primary module. If you make any of your own requires or requires\_from calls, this option will do nothing.
