Module::Install - Standalone, extensible Perl module installer
This document describes version 0.19_95 of Module::Install, released March 28, 2003.
THIS IS A PRE-ALPHA SNAPSHOT RELEASE. THE INTERFACE IS SUBJECT TO CHANGE, AND IS LIKELY TO BE BUGGY. USE IT AT YOUR OWN RISK.
In your Makefile.PL:
# drop-in replacement to ExtUtils::MakeMaker! use inc::Module::Install; WriteMakefile(); # leave it empty to determine automatically
Standard usage:
use inc::Module::Install; name('Your-Module'); abstract('Some Abstract here'); author('Your Name <email@example.com>'); license('perl'); include_deps('Test::More', 5.004); requires('Test::More'); recommends('Acme::ComeFrom', 0.01); check_nmake(); # check and download nmake.exe for Win32 &Makefile->write;
Or rename it to Build.PL; just change the last line to:
&Build->generate_makefile_pl; &Build->write;
You can also put all setting into META.yml, and use this instead:
use inc::Module::Install; &Meta->read; # parses META.yml &AutoInstall->run; # auto-install dependencies from CPAN &Makefile->write; # generates Makefile # &Build->write; # generates ./Build if desired
This module provides a drop-in replacement for ExtUtils::MakeMaker. If you want to start working with real-world examples right away, check out Module::Install-Cookbook. For some personal opinions behind this module's making, see Module::Install-Philosophy.
It is designed to let module authors eliminate all duplicated codes in Makefile.PL and Build.PL, by abstracting them into extensions, and distribute them under the inc/ directory.
To start using it, just replace the use ExtUtils::MakeMaker; line from Makefile.PL with use inc::Module::Install;, then run it once:
use ExtUtils::MakeMaker;
use inc::Module::Install;
% perl Makefile.PL include inc/Module/Install.pm include inc/Module/Install/MakeMaker.pm include inc/Module/Install/Base.pm Updating your MANIFEST file: Adding inc/Module/Install.pm Adding inc/Module/Install/Base.pm Adding inc/Module/Install/MakeMaker.pm
Now your distribution will have an extra inc/ directory, with the minimal loader code inc/Module/Install.pm copied into it. Also, since you made use of the WriteMakefile function, the Module::Install::MakeMaker extension is also copied into inc/, along with the base extension class Module::Install::Base.
WriteMakefile
End-users of your distribution do not need to install anything extra; the distribution already includes all necessary extensions, with their POD documentations removed. Note that because it does not include unused extensions or Module::Install itself, the impact on distribution size is minimized.
If this module was not loaded from inc/, calls the init method of Module::Install::Admin to include and reload itself; see "Bootstrapping" in Module::Install::Admin for details.
init
Otherwise, export a default AUTOLOAD handler to the caller's package.
AUTOLOAD
The @args array is passed to new to intialize the top-level Module::Install object; it should usually be left empty.
@args
new
Returns an AUTOLOAD handler bound to the caller package.
Constructor, taking a hash of named arguments. Usually you do not want change any of them.
Call an extension method, passing @args to it.
Include and load an extension object implementing $method.
$method
Loads all extensions under $path; for each extension, create a singleton object with _top pointing to $top_obj, and populates the arrayref $self->{extensions} with those objects.
$path
_top
$top_obj
$self->{extensions}
Returns an array of [ $file_name, $package_name ] for each extension module found under $path and its subdirectories.
[ $file_name, $package_name ]
All extensions belong to the Module::Install::* namespace, and inherits from Module::Install::Base. There are three kinds of them:
Methods defined by a standard extension may be called as plain functions inside Makefile.PL; a corresponding object will be spawned automatically. Other extensions may also invoke its methods just like their own methods:
# delegates to $other_extension_obj->method_name(@args) $self->method_name(@args);
At the first time an extension's method is invoked, a POD-stripped version of it will be included under the inc/Module/Install/ directory, and becomes fixed -- i.e. even if the user installs a different version of the same extension, the included one will still be used instead.
If you wish to upgrade extensions in inc/ with installed ones, simply remove the inc/ directory and run perl Makefile.PL again. Alternatively, typing make reset will also do this for you.
perl Makefile.PL
make reset
Those extensions take the form of Module::Install::private and Module::Install::private::*.
Authors are encouraged to put all existing Makefile.PL magics into such extensions (e.g. Module::Install::private for common bits; Module::Install::private::PAR for functions specific to a distribution).
Private extensions need not to be released on CPAN; simply put them somewhere in your @INC, under the Module/Install/ directory, and start using their functions in Makefile.PL. Like standard extensions, they will never be installed on the end-user's machine, and therefore never conflict with other people's private extensions.
@INC
Module/Install/
Extensions under the Module::Install::Admin::* namespace are never included with the distribution. Their methods are not directly accessible from Makefile.PL or other extensions; they are invoked like this:
# delegates to $other_admin_extension_obj->method_name(@args) $self->admin->method_name(@args);
These methods only take effect during the initialization run, when inc/ is being populated; they are ignored for end-users. Again, to re-initialize everything, remove the inc/ directory via make reset and run perl Makefile.PL.
Scripts (usually one-liners stored as part of Makefile) that wish to dispatch AUTOLOAD functions into administrative extensions (instead of standard extensions) should use the Module::Install::Admin module directly. See Module::Install::Admin for details.
Module::Install comes with several standard extensions:
Provides auto_install() to automatically fetch and install prerequisites via CPANPLUS or CPAN, specified either by the features metadata or by method arguments.
auto_install()
features
You may wish to add a include('ExtUtils::AutoInstall'); before auto_install() to include ExtUtils::AutoInstall with your distribution. Otherwise, this extension will attempt to automatically install it from CPAN.
include('ExtUtils::AutoInstall');
The base class of all extensions, providing new, initialized, admin, load and the AUTOLOAD dispatcher.
initialized
admin
load
Provides &Build->write to generate a Module::Build compliant Build file, as well as other Module::Build support functions.
&Build->write
Handles fetching files from remote servers via FTP.
Provides the include($pkg) function to include pod-stripped package(s) from @INC to inc/.
include($pkg)
Also provides the include_deps($pkg, $base_perl_version) function to include every non-core modules needed by $pkg, as of Perl version $base_perl_version.
include_deps($pkg, $base_perl_version)
$pkg
$base_perl_version
Provides &Inline->write to replace Inline::MakeMaker's functionality of making (and cleaning after) Inline-based modules.
&Inline->write
Simple wrapper class for ExtUtils::MakeMaker::WriteMakefile.
ExtUtils::MakeMaker::WriteMakefile
Provides &Makefile->write to generate a ExtUtils::MakeMaker compliant Makefile; preferred over Module::Install::MakeMaker. It adds several extra make targets, as well as being more intelligent at guessing unspecified arguments.
&Makefile->write
make
Guess the distribution name.
Guess the distribution version.
Provides &Meta->write to generate a YAML-compliant META.yml file, and &Meta->read to parse it for &Makefile, &Build and &AutoInstall to use.
&Meta->write
&Meta->read
&Makefile
&Build
&AutoInstall
Makes pre-compiled module binary packages from blib, and download existing ones to save the user from recompiling.
Determines if a command is available on the user's machine, and run external commands via IPC::Run3.
Functions related for installing modules on Win32, e.g. automatically fetching and installing nmake.exe for users that need it.
Module::Install also comes with several administrative extensions:
Functions for finding extensions, installed packages and files in subdirectories.
Functions for manipulating and updating the MANIFEST file.
Functions for manipulating and updating the META.yml file.
Handles scanning for non-core dependencies via Module::ScanDeps and Module::CoreList.
Please consult their own POD documentations for detailed information.
Here is a brief overview of the reasons:
Does everything ExtUtils::MakeMaker does. Requires no installation for end-users. Generate stock Makefile.PL for Module::Build users. Guaranteed forward-compatibility. Automatically updates your MANIFEST. Include prerequisite modules (even the entire dependency tree). Auto-installation of prerequisites. Support for Inline::C. Support for precompiled binaries.
Following features are planned in the near future:
Distributing scripts is easy. # needs Module::Install::Scripts
Besides, if you author more than one CPAN modules, chances are there are duplicated in their Makefile.PL or with some other CPAN module you copied the code from. Module::Install makes it really easy for you to abstract away such codes; see next question.
According to Brian Ingerson, the author of CPAN::MakeMaker, their difference is that Module::Install is sane.
Module::Install is sane
Also, this module is not self-modifying, and offers a clear separation between standard, private and administrative extensions. Therefore writing extensions for Module::Install is easier -- instead of tweaking your local copy of CPAN/MakeMaker.pm, just make a new Module::Install::* module.
CPAN/MakeMaker.pm
Module::Install-Cookbook, Module::Install-Philosophy, inc::Module::Install
Module::Install::AutoInstall, Module::Install::Base, Module::Install::Build, Module::Install::Directives, Module::Install::Fetch, Module::Install::Include, Module::Install::MakeMaker, Module::Install::Makefile, Module::Install::Makefile::CleanFiles, Module::Install::Makefile::Name, Module::Install::Makefile::Version, Module::Install::Metadata, Module::Install::Run, Module::Install::Win32
Module::Install::Admin, Module::Install::Admin::Find, Module::Install::Admin::Manifest, Module::Install::Admin::Metadata, Module::Install::Admin::ScanDeps
CPAN::MakeMaker, Inline::MakeMaker, ExtUtils::MakeMaker, Module::Build
Brian Ingerson <INGY@cpan.org>, Autrijus Tang <autrijus@autrijus.org>
Copyright 2003 by Autrijus Tang <autrijus@autrijus.org>, Brian Ingerson <INGY@cpan.org>.
Copyright 2002 by Brian Ingerson <INGY@cpan.org>.
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
To install Module::Install, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Module::Install
CPAN shell
perl -MCPAN -e shell install Module::Install
For more information on module installation, please visit the detailed CPAN module installation guide.