Provided by: libmodule-install-perl_1.19-2_all bug

NAME

       Module::AutoInstall - Automatic install of dependencies via CPAN

SYNOPSIS

       In Makefile.PL, with Module::Install available on the author's system:

           use inc::Module::Install;

           name        'Joe-Hacker';
           abstract    'Perl Interface to Joe Hacker';
           author      'Joe Hacker <joe@hacker.org>';
           include     'Module::AutoInstall';

           requires    'Module0';          # mandatory modules

           feature     'Feature1',
               -default    => 0,
               'Module2'   => '0.1';

           feature     'Feature2',
               -default    => 0,
               'Module3'   => '1.0';

           auto_install(
               make_args   => '--hello',   # option(s) for CPAN::Config
               force       => 1,           # pseudo-option to force install
               do_once     => 1,           # skip previously failed modules
           );

           WriteAll;

       Invoking the resulting Makefile.PL:

           % perl Makefile.PL                  # interactive behaviour
           % perl Makefile.PL --defaultdeps    # accept default value on prompts
           % perl Makefile.PL --checkdeps      # check only, no Makefile produced
           % perl Makefile.PL --skipdeps       # ignores all dependencies
           % perl Makefile.PL --testonly       # don't write installation targets

       Note that the trailing 'deps' of arguments may be omitted, too.

       Using "--defaultdeps" will make Makefile.PL behave similarly to a regular Makefile.PL file
       with "PREREQ_PM" dependencies.

       One can use environment variables (see "ENVIRONMENT") below to set a default behavior
       instead of specifying it in the command line for every invocation of Makefile.PL.

       Using make (or nmake):

           % make [all|test|install]           # install dependencies first
           % make checkdeps                    # same as the --checkdeps above
           % make installdeps                  # install dependencies only
           % make installdeps_notest           # same without running tests
           % make upgradedeps                  # upgrade all deps, even if installed
           % make upgradedeps_notest           # same without running tests
           % make listdeps                     # print unsatisifed deps, one per line
           % make listalldeps                  # print all deps, one per line

DESCRIPTION

       Module::AutoInstall lets module writers to specify a more sophisticated form of dependency
       information than the "PREREQ_PM" option offered by ExtUtils::MakeMaker.

       This module works best with the Module::Install framework, a drop-in replacement for
       MakeMaker.  However, this module also supports Makefile.PL files based on MakeMaker; see
       "EXAMPLES" for instructions.

       Specifying "installdeps_target;" instead of "auto_install;" will not try to install
       dependencies when running "make", but only when running "make installdeps".

   Prerequisites and Features
       Prerequisites are grouped into features, and the user could choose yes/no on each one's
       dependencies; the module writer may also supply a boolean value via "-default" to specify
       the default choice.

       The Core Features marked by the name "-core" will double-check with the user, if the user
       chooses not to install the mandatory modules.  This differs from the pre-0.26 'silent
       install' behaviour.

       Starting from version 0.27, if "-core" is set to the string "all" (case-insensitive),
       every feature will be considered mandatory.

       The dependencies are expressed as pairs of "Module" => "version" inside an array
       reference.  If the order does not matter, and there are no "-default", "-tests" or
       "-skiptests" directives for that feature, you may also use a hash reference.

   The Installation Process
       Once Module::AutoInstall has determined which module(s) are needed, it checks whether it's
       running under the CPAN shell and should therefore let CPAN handle the dependency.

       Finally, the "WriteMakefile()" is overridden to perform some additional checks, as well as
       skips tests associated with disabled features by the "-tests" option.

       The actual installation happens at the end of the "make config" target; both "make test"
       and "make install" will trigger the installation of required modules.

       If it's not running under CPAN, the installer will probe for an active connection by
       trying to resolve the domain "cpan.org", and check for the user's permission to use CPAN.
       If all went well, a separate
           CPAN instance is created to install the required modules.

       If you have the CPANPLUS package installed in your system, it is preferred by default over
       CPAN; it also accepts some extra options (e.g. "-target => 'skiptest', -skiptest => 1" to
       skip testing).

       All modules scheduled to be installed will be deleted from %INC first, so
       ExtUtils::MakeMaker will check the newly installed modules.

       Additionally, you could use the "make installdeps" target to install the modules, and the
       "make checkdeps" target to check dependencies without actually installing them; the "perl
       Makefile.PL --checkdeps" command has an equivalent effect.

       If the Makefile.PL itself needs to use an independent module (e.g.  Acme::KillarApp, v1.21
       or greater), then use something like below:

           BEGIN {
               require Module::AutoInstall;
               # the first argument is an arrayref of the -config flags
               Module::AutoInstall->install([], 'Acme::KillerApp' => 1.21);
           }
           use Acme::KillerApp 1.21;

           Module::AutoInstall->import(
               # ... arguments as usual ...
           );

       Note the version test in the use clause; if you are so close to the cutting edge that
       Acme::KillerApp 1.20 is the latest version on CPAN, this will prevent your module from
       going awry.

   User-Defined Hooks
       User-defined pre-installation and post-installation hooks are available via
       "MY::preinstall" and "MY::postinstall" subroutines, as shown below:

           # pre-install handler; takes $module_name and $version
           sub MY::preinstall  { return 1; } # return false to skip install

           # post-install handler; takes $module_name, $version, $success
           sub MY::postinstall { return; }   # the return value doesn't matter

       Note that since Module::AutoInstall performs installation at the time of "use" (i.e.
       before perl parses the remainder of Makefile.PL), you have to declare those two handlers
       before the "use" statement for them to take effect.

       If the user did not choose to install a module or it already exists on the system, neither
       of the handlers is invoked.  Both handlers are invoked exactly once for each module when
       installation is attempted.

       "MY::preinstall" takes two arguments, $module_name and $version; if it returns a false
       value, installation for that module will be skipped, and "MY::postinstall" won't be called
       at all.

       "MY::postinstall" takes three arguments, $module_name, $version and $success.  The last
       one denotes whether the installation succeeded or not: 1 means installation completed
       successfully, 0 means failure during install, and "undef" means that the installation was
       not attempted at all, possibly due to connection problems, or that module does not exist
       on CPAN at all.

   Customized "MY::postamble"
       Starting from version 0.43, Module::AutoInstall supports modules that require a
       "MY::postamble" subroutine in their Makefile.PL.  The user-defined "MY::postamble", if
       present, is responsible for calling "Module::AutoInstall::postamble" and include the
       output in its return value.

       For example, the DBD::* (database driver) modules for the Perl DBI are required to include
       the postamble generated by the function "dbd_postamble", so their Makefile.PL may contain
       lines like this:

           sub MY::postamble {
               return &Module::AutoInstall::postamble . &dbd_postamble;
           }

       Note that the Module::AutoInstall module does not export the "postamble" function, so the
       name should always be fully qualified.

CAVEATS

       Module::AutoInstall will add "UNINST=1" to your make install flags if your effective uid
       is 0 (root), unless you explicitly disable it by setting CPAN's "make_install_arg"
       configuration option (or the "makeflags" option of CPANPLUS) to include "UNINST=0".  This
       may cause dependency problems if you are using a fine-tuned directory structure for your
       site.  Please consult "FAQ" in CPAN for an explanation in detail.

       If either version or Sort::Versions is available, they will be used to compare the
       required version with the existing module's version and the CPAN module's.  Otherwise it
       silently falls back to use cmp.  This may cause inconsistent behaviours in pathetic
       situations.

ENVIRONMENT

       Module::AutoInstall uses a single environment variable, "PERL_AUTOINSTALL".  It is taken
       as the command line argument passed to Makefile.PL; you could set it to "--alldeps",
       "--defaultdeps" or "--skipdeps" to avoid all interactive behaviour.

       "--alldeps" will install all features, while "--defaultdeps" will only install features
       for which the default answer is 'y'.

       "--skipdeps" will refrain from loading CPAN and not install anything, unless you're
       running under CPAN or CPANPLUS, in which case required dependencies will be installed.

       It is also read from the "PERL_EXTUTILS_AUTOINSTALL" environment variable if
       "PERL_AUTOINSTALL" is not defined.

       You can also set "PERL_AUTOINSTALL_PREFER_CPAN" to use CPAN to install dependencies. By
       default CPANPLUS is used.

SEE ALSO

       Module::Install

       perlmodlib, ExtUtils::MakeMaker, Sort::Versions, CPAN, CPANPLUS

AUTHORS

       Audrey Tang <autrijus@autrijus.org>

       Adam Kennedy <adamk@cpan.org>

       Matt S Trout <mst@shadowcat.co.u>

IF THIS BREAKS

       Report a ticket to bugs-Module-Install <at> rt.cpan.org and cc Matt - I appear to have
       volunteered as primary maintainer for this stuff so if you run into any problems please
       tell me

COPYRIGHT

       Copyright 2001, 2002, 2003, 2004, 2005, 2006 by Audrey Tang

       Some parts copyright 2006 Adam Kennedy

       This program is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself.

       See <http://www.perl.com/perl/misc/Artistic.html>