summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README901
1 files changed, 901 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..db6ec6a
--- /dev/null
+++ b/README
@@ -0,0 +1,901 @@
+NAME
+ Module::Build - Build and install Perl modules
+
+SYNOPSIS
+ Standard process for building & installing modules:
+
+ perl Build.PL
+ ./Build
+ ./Build test
+ ./Build install
+
+ Or, if you're on a platform (like DOS or Windows) that doesn't require
+ the "./" notation, you can do this:
+
+ perl Build.PL
+ Build
+ Build test
+ Build install
+
+DESCRIPTION
+ "Module::Build" is a system for building, testing, and installing Perl
+ modules. It is meant to be an alternative to "ExtUtils::MakeMaker".
+ Developers may alter the behavior of the module through subclassing in a
+ much more straightforward way than with "MakeMaker". It also does not
+ require a "make" on your system - most of the "Module::Build" code is
+ pure-perl and written in a very cross-platform way.
+
+ See "MOTIVATIONS" for more comparisons between "ExtUtils::MakeMaker" and
+ "Module::Build".
+
+ To install "Module::Build", and any other module that uses
+ "Module::Build" for its installation process, do the following:
+
+ perl Build.PL # 'Build.PL' script creates the 'Build' script
+ ./Build # Need ./ to ensure we're using this "Build" script
+ ./Build test # and not another one that happens to be in the PATH
+ ./Build install
+
+ This illustrates initial configuration and the running of three
+ 'actions'. In this case the actions run are 'build' (the default
+ action), 'test', and 'install'. Other actions defined so far include:
+
+ <action_list>
+
+ You can run the 'help' action for a complete list of actions.
+
+GUIDE TO DOCUMENTATION
+ The documentation for "Module::Build" is broken up into sections:
+
+ General Usage (Module::Build)
+ This is the document you are currently reading. It describes basic
+ usage and background information. Its main purpose is to assist the
+ user who wants to learn how to invoke and control "Module::Build"
+ scripts at the command line.
+
+ Authoring Reference (Module::Build::Authoring)
+ This document describes the structure and organization of
+ "Module::Build", and the relevant concepts needed by authors who are
+ writing Build.PL scripts for a distribution or controlling
+ "Module::Build" processes programmatically.
+
+ API Reference (Module::Build::API)
+ This is a reference to the "Module::Build" API.
+
+ Cookbook (Module::Build::Cookbook)
+ This document demonstrates how to accomplish many common tasks. It
+ covers general command line usage and authoring of Build.PL scripts.
+ Includes working examples.
+
+ACTIONS
+ There are some general principles at work here. First, each task when
+ building a module is called an "action". These actions are listed above;
+ they correspond to the building, testing, installing, packaging, etc.,
+ tasks.
+
+ Second, arguments are processed in a very systematic way. Arguments are
+ always key=value pairs. They may be specified at "perl Build.PL" time
+ (i.e. "perl Build.PL destdir=/my/secret/place"), in which case their
+ values last for the lifetime of the "Build" script. They may also be
+ specified when executing a particular action (i.e. "Build test
+ verbose=1"), in which case their values last only for the lifetime of
+ that command. Per-action command line parameters take precedence over
+ parameters specified at "perl Build.PL" time.
+
+ The build process also relies heavily on the "Config.pm" module. If the
+ user wishes to override any of the values in "Config.pm", she may
+ specify them like so:
+
+ perl Build.PL --config cc=gcc --config ld=gcc
+
+ The following build actions are provided by default.
+
+ build
+ [version 0.01]
+
+ If you run the "Build" script without any arguments, it runs the
+ "build" action, which in turn runs the "code" and "docs" actions.
+
+ This is analogous to the "MakeMaker" *make all* target.
+
+ clean
+ [version 0.01]
+
+ This action will clean up any files that the build process may have
+ created, including the "blib/" directory (but not including the
+ "_build/" directory and the "Build" script itself).
+
+ code
+ [version 0.20]
+
+ This action builds your code base.
+
+ By default it just creates a "blib/" directory and copies any ".pm"
+ and ".pod" files from your "lib/" directory into the "blib/"
+ directory. It also compiles any ".xs" files from "lib/" and places
+ them in "blib/". Of course, you need a working C compiler (probably
+ the same one that built perl itself) for the compilation to work
+ properly.
+
+ The "code" action also runs any ".PL" files in your lib/ directory.
+ Typically these create other files, named the same but without the
+ ".PL" ending. For example, a file lib/Foo/Bar.pm.PL could create the
+ file lib/Foo/Bar.pm. The ".PL" files are processed first, so any
+ ".pm" files (or other kinds that we deal with) will get copied
+ correctly.
+
+ config_data
+ [version 0.26]
+
+ ...
+
+ diff
+ [version 0.14]
+
+ This action will compare the files about to be installed with their
+ installed counterparts. For .pm and .pod files, a diff will be shown
+ (this currently requires a 'diff' program to be in your PATH). For
+ other files like compiled binary files, we simply report whether
+ they differ.
+
+ A "flags" parameter may be passed to the action, which will be
+ passed to the 'diff' program. Consult your 'diff' documentation for
+ the parameters it will accept - a good one is "-u":
+
+ ./Build diff flags=-u
+
+ dist
+ [version 0.02]
+
+ This action is helpful for module authors who want to package up
+ their module for source distribution through a medium like CPAN. It
+ will create a tarball of the files listed in MANIFEST and compress
+ the tarball using GZIP compression.
+
+ By default, this action will use the "Archive::Tar" module. However,
+ you can force it to use binary "tar" and "gzip" executables by
+ supplying an explicit "tar" (and optional "gzip") parameter:
+
+ ./Build dist --tar C:\path\to\tar.exe --gzip C:\path\to\zip.exe
+
+ distcheck
+ [version 0.05]
+
+ Reports which files are in the build directory but not in the
+ MANIFEST file, and vice versa. (See manifest for details.)
+
+ distclean
+ [version 0.05]
+
+ Performs the 'realclean' action and then the 'distcheck' action.
+
+ distdir
+ [version 0.05]
+
+ Creates a "distribution directory" named "$dist_name-$dist_version"
+ (if that directory already exists, it will be removed first), then
+ copies all the files listed in the MANIFEST file to that directory.
+ This directory is what the distribution tarball is created from.
+
+ distinstall
+ [version 0.37]
+
+ Performs the 'distdir' action, then switches into that directory and
+ runs a "perl Build.PL", followed by the 'build' and 'install'
+ actions in that directory. Use PERL_MB_OPT or .modulebuildrc to set
+ options that should be applied during subprocesses
+
+ distmeta
+ [version 0.21]
+
+ Creates the META.yml file that describes the distribution.
+
+ META.yml is a file containing various bits of *metadata* about the
+ distribution. The metadata includes the distribution name, version,
+ abstract, prerequisites, license, and various other data about the
+ distribution. This file is created as META.yml in a simplified YAML
+ format.
+
+ META.yml file must also be listed in MANIFEST - if it's not, a
+ warning will be issued.
+
+ The current version of the META.yml specification can be found on
+ CPAN as CPAN::Meta::Spec.
+
+ distsign
+ [version 0.16]
+
+ Uses "Module::Signature" to create a SIGNATURE file for your
+ distribution, and adds the SIGNATURE file to the distribution's
+ MANIFEST.
+
+ disttest
+ [version 0.05]
+
+ Performs the 'distdir' action, then switches into that directory and
+ runs a "perl Build.PL", followed by the 'build' and 'test' actions
+ in that directory. Use PERL_MB_OPT or .modulebuildrc to set options
+ that should be applied during subprocesses
+
+ docs
+ [version 0.20]
+
+ This will generate documentation (e.g. Unix man pages and HTML
+ documents) for any installable items under blib/ that contain POD.
+ If there are no "bindoc" or "libdoc" installation targets defined
+ (as will be the case on systems that don't support Unix manpages) no
+ action is taken for manpages. If there are no "binhtml" or "libhtml"
+ installation targets defined no action is taken for HTML documents.
+
+ fakeinstall
+ [version 0.02]
+
+ This is just like the "install" action, but it won't actually do
+ anything, it will just report what it *would* have done if you had
+ actually run the "install" action.
+
+ help
+ [version 0.03]
+
+ This action will simply print out a message that is meant to help
+ you use the build process. It will show you a list of available
+ build actions too.
+
+ With an optional argument specifying an action name (e.g. "Build
+ help test"), the 'help' action will show you any POD documentation
+ it can find for that action.
+
+ html
+ [version 0.26]
+
+ This will generate HTML documentation for any binary or library
+ files under blib/ that contain POD. The HTML documentation will only
+ be installed if the install paths can be determined from values in
+ "Config.pm". You can also supply or override install paths on the
+ command line by specifying "install_path" values for the "binhtml"
+ and/or "libhtml" installation targets.
+
+ With an optional "html_links" argument set to a false value, you can
+ skip the search for other documentation to link to, because that can
+ waste a lot of time if there aren't any links to generate anyway:
+
+ ./Build html --html_links 0
+
+ install
+ [version 0.01]
+
+ This action will use "ExtUtils::Install" to install the files from
+ "blib/" into the system. See "INSTALL PATHS" for details about how
+ Module::Build determines where to install things, and how to
+ influence this process.
+
+ If you want the installation process to look around in @INC for
+ other versions of the stuff you're installing and try to delete it,
+ you can use the "uninst" parameter, which tells "ExtUtils::Install"
+ to do so:
+
+ ./Build install uninst=1
+
+ This can be a good idea, as it helps prevent multiple versions of a
+ module from being present on your system, which can be a confusing
+ situation indeed.
+
+ installdeps
+ [version 0.36]
+
+ This action will use the "cpan_client" parameter as a command to
+ install missing prerequisites. You will be prompted whether to
+ install optional dependencies.
+
+ The "cpan_client" option defaults to 'cpan' but can be set as an
+ option or in .modulebuildrc. It must be a shell command that takes a
+ list of modules to install as arguments (e.g. 'cpanp -i' for
+ CPANPLUS). If the program part is a relative path (e.g. 'cpan' or
+ 'cpanp'), it will be located relative to the perl program that
+ executed Build.PL.
+
+ /opt/perl/5.8.9/bin/perl Build.PL
+ ./Build installdeps --cpan_client 'cpanp -i'
+ # installs to 5.8.9
+
+ manifest
+ [version 0.05]
+
+ This is an action intended for use by module authors, not people
+ installing modules. It will bring the MANIFEST up to date with the
+ files currently present in the distribution. You may use a
+ MANIFEST.SKIP file to exclude certain files or directories from
+ inclusion in the MANIFEST. MANIFEST.SKIP should contain a bunch of
+ regular expressions, one per line. If a file in the distribution
+ directory matches any of the regular expressions, it won't be
+ included in the MANIFEST.
+
+ The following is a reasonable MANIFEST.SKIP starting point, you can
+ add your own stuff to it:
+
+ ^_build
+ ^Build$
+ ^blib
+ ~$
+ \.bak$
+ ^MANIFEST\.SKIP$
+ CVS
+
+ See the distcheck and skipcheck actions if you want to find out what
+ the "manifest" action would do, without actually doing anything.
+
+ manifest_skip
+ [version 0.3608]
+
+ This is an action intended for use by module authors, not people
+ installing modules. It will generate a boilerplate MANIFEST.SKIP
+ file if one does not already exist.
+
+ manpages
+ [version 0.28]
+
+ This will generate man pages for any binary or library files under
+ blib/ that contain POD. The man pages will only be installed if the
+ install paths can be determined from values in "Config.pm". You can
+ also supply or override install paths by specifying there values on
+ the command line with the "bindoc" and "libdoc" installation
+ targets.
+
+ pardist
+ [version 0.2806]
+
+ Generates a PAR binary distribution for use with PAR or PAR::Dist.
+
+ It requires that the PAR::Dist module (version 0.17 and up) is
+ installed on your system.
+
+ ppd [version 0.20]
+
+ Build a PPD file for your distribution.
+
+ This action takes an optional argument "codebase" which is used in
+ the generated PPD file to specify the (usually relative) URL of the
+ distribution. By default, this value is the distribution name
+ without any path information.
+
+ Example:
+
+ ./Build ppd --codebase "MSWin32-x86-multi-thread/Module-Build-0.21.tar.gz"
+
+ ppmdist
+ [version 0.23]
+
+ Generates a PPM binary distribution and a PPD description file. This
+ action also invokes the "ppd" action, so it can accept the same
+ "codebase" argument described under that action.
+
+ This uses the same mechanism as the "dist" action to tar & zip its
+ output, so you can supply "tar" and/or "gzip" parameters to affect
+ the result.
+
+ prereq_data
+ [version 0.32]
+
+ This action prints out a Perl data structure of all prerequisites
+ and the versions required. The output can be loaded again using
+ "eval()". This can be useful for external tools that wish to query a
+ Build script for prerequisites.
+
+ prereq_report
+ [version 0.28]
+
+ This action prints out a list of all prerequisites, the versions
+ required, and the versions actually installed. This can be useful
+ for reviewing the configuration of your system prior to a build, or
+ when compiling data to send for a bug report.
+
+ pure_install
+ [version 0.28]
+
+ This action is identical to the "install" action. In the future,
+ though, when "install" starts writing to the file
+ $(INSTALLARCHLIB)/perllocal.pod, "pure_install" won't, and that will
+ be the only difference between them.
+
+ realclean
+ [version 0.01]
+
+ This action is just like the "clean" action, but also removes the
+ "_build" directory and the "Build" script. If you run the
+ "realclean" action, you are essentially starting over, so you will
+ have to re-create the "Build" script again.
+
+ retest
+ [version 0.2806]
+
+ This is just like the "test" action, but doesn't actually build the
+ distribution first, and doesn't add blib/ to the load path, and
+ therefore will test against a *previously* installed version of the
+ distribution. This can be used to verify that a certain installed
+ distribution still works, or to see whether newer versions of a
+ distribution still pass the old regression tests, and so on.
+
+ skipcheck
+ [version 0.05]
+
+ Reports which files are skipped due to the entries in the
+ MANIFEST.SKIP file (See manifest for details)
+
+ test
+ [version 0.01]
+
+ This will use "Test::Harness" or "TAP::Harness" to run any
+ regression tests and report their results. Tests can be defined in
+ the standard places: a file called "test.pl" in the top-level
+ directory, or several files ending with ".t" in a "t/" directory.
+
+ If you want tests to be 'verbose', i.e. show details of test
+ execution rather than just summary information, pass the argument
+ "verbose=1".
+
+ If you want to run tests under the perl debugger, pass the argument
+ "debugger=1".
+
+ If you want to have Module::Build find test files with different
+ file name extensions, pass the "test_file_exts" argument with an
+ array of extensions, such as "[qw( .t .s .z )]".
+
+ If you want test to be run by "TAP::Harness", rather than
+ "Test::Harness", pass the argument "tap_harness_args" as an array
+ reference of arguments to pass to the TAP::Harness constructor.
+
+ In addition, if a file called "visual.pl" exists in the top-level
+ directory, this file will be executed as a Perl script and its
+ output will be shown to the user. This is a good place to put speed
+ tests or other tests that don't use the "Test::Harness" format for
+ output.
+
+ To override the choice of tests to run, you may pass a "test_files"
+ argument whose value is a whitespace-separated list of test scripts
+ to run. This is especially useful in development, when you only want
+ to run a single test to see whether you've squashed a certain bug
+ yet:
+
+ ./Build test --test_files t/something_failing.t
+
+ You may also pass several "test_files" arguments separately:
+
+ ./Build test --test_files t/one.t --test_files t/two.t
+
+ or use a "glob()"-style pattern:
+
+ ./Build test --test_files 't/01-*.t'
+
+ testall
+ [version 0.2807]
+
+ [Note: the 'testall' action and the code snippets below are
+ currently in alpha stage, see
+ "/www.nntp.perl.org/group/perl.module.build/2007/03/msg584.html"" in
+ "http: ]
+
+ Runs the "test" action plus each of the "test$type" actions defined
+ by the keys of the "test_types" parameter.
+
+ Currently, you need to define the ACTION_test$type method yourself
+ and enumerate them in the test_types parameter.
+
+ my $mb = Module::Build->subclass(
+ code => q(
+ sub ACTION_testspecial { shift->generic_test(type => 'special'); }
+ sub ACTION_testauthor { shift->generic_test(type => 'author'); }
+ )
+ )->new(
+ ...
+ test_types => {
+ special => '.st',
+ author => ['.at', '.pt' ],
+ },
+ ...
+
+ testcover
+ [version 0.26]
+
+ Runs the "test" action using "Devel::Cover", generating a
+ code-coverage report showing which parts of the code were actually
+ exercised during the tests.
+
+ To pass options to "Devel::Cover", set the $DEVEL_COVER_OPTIONS
+ environment variable:
+
+ DEVEL_COVER_OPTIONS=-ignore,Build ./Build testcover
+
+ testdb
+ [version 0.05]
+
+ This is a synonym for the 'test' action with the "debugger=1"
+ argument.
+
+ testpod
+ [version 0.25]
+
+ This checks all the files described in the "docs" action and
+ produces "Test::Harness"-style output. If you are a module author,
+ this is useful to run before creating a new release.
+
+ testpodcoverage
+ [version 0.28]
+
+ This checks the pod coverage of the distribution and produces
+ "Test::Harness"-style output. If you are a module author, this is
+ useful to run before creating a new release.
+
+ versioninstall
+ [version 0.16]
+
+ ** Note: since "only.pm" is so new, and since we just recently added
+ support for it here too, this feature is to be considered
+ experimental. **
+
+ If you have the "only.pm" module installed on your system, you can
+ use this action to install a module into the version-specific
+ library trees. This means that you can have several versions of the
+ same module installed and "use" a specific one like this:
+
+ use only MyModule => 0.55;
+
+ To override the default installation libraries in "only::config",
+ specify the "versionlib" parameter when you run the "Build.PL"
+ script:
+
+ perl Build.PL --versionlib /my/version/place/
+
+ To override which version the module is installed as, specify the
+ "version" parameter when you run the "Build.PL" script:
+
+ perl Build.PL --version 0.50
+
+ See the "only.pm" documentation for more information on
+ version-specific installs.
+
+OPTIONS
+ Command Line Options
+ The following options can be used during any invocation of "Build.PL" or
+ the Build script, during any action. For information on other options
+ specific to an action, see the documentation for the respective action.
+
+ NOTE: There is some preliminary support for options to use the more
+ familiar long option style. Most options can be preceded with the "--"
+ long option prefix, and the underscores changed to dashes (e.g.
+ "--use-rcfile"). Additionally, the argument to boolean options is
+ optional, and boolean options can be negated by prefixing them with "no"
+ or "no-" (e.g. "--noverbose" or "--no-verbose").
+
+ quiet
+ Suppress informative messages on output.
+
+ verbose
+ Display extra information about the Build on output. "verbose" will
+ turn off "quiet"
+
+ cpan_client
+ Sets the "cpan_client" command for use with the "installdeps"
+ action. See "installdeps" for more details.
+
+ use_rcfile
+ Load the ~/.modulebuildrc option file. This option can be set to
+ false to prevent the custom resource file from being loaded.
+
+ allow_mb_mismatch
+ Suppresses the check upon startup that the version of Module::Build
+ we're now running under is the same version that was initially
+ invoked when building the distribution (i.e. when the "Build.PL"
+ script was first run). As of 0.3601, a mismatch results in a warning
+ instead of a fatal error, so this option effectively just suppresses
+ the warning.
+
+ debug
+ Prints Module::Build debugging information to STDOUT, such as a
+ trace of executed build actions.
+
+ Default Options File (.modulebuildrc)
+ [version 0.28]
+
+ When Module::Build starts up, it will look first for a file,
+ $ENV{HOME}/.modulebuildrc. If it's not found there, it will look in the
+ .modulebuildrc file in the directories referred to by the environment
+ variables "HOMEDRIVE" + "HOMEDIR", "USERPROFILE", "APPDATA", "WINDIR",
+ "SYS$LOGIN". If the file exists, the options specified there will be
+ used as defaults, as if they were typed on the command line. The
+ defaults can be overridden by specifying new values on the command line.
+
+ The action name must come at the beginning of the line, followed by any
+ amount of whitespace and then the options. Options are given the same as
+ they would be on the command line. They can be separated by any amount
+ of whitespace, including newlines, as long there is whitespace at the
+ beginning of each continued line. Anything following a hash mark ("#")
+ is considered a comment, and is stripped before parsing. If more than
+ one line begins with the same action name, those lines are merged into
+ one set of options.
+
+ Besides the regular actions, there are two special pseudo-actions: the
+ key "*" (asterisk) denotes any global options that should be applied to
+ all actions, and the key 'Build_PL' specifies options to be applied when
+ you invoke "perl Build.PL".
+
+ * verbose=1 # global options
+ diff flags=-u
+ install --install_base /home/ken
+ --install_path html=/home/ken/docs/html
+ installdeps --cpan_client 'cpanp -i'
+
+ If you wish to locate your resource file in a different location, you
+ can set the environment variable "MODULEBUILDRC" to the complete
+ absolute path of the file containing your options.
+
+ Environment variables
+ MODULEBUILDRC
+ [version 0.28]
+
+ Specifies an alternate location for a default options file as
+ described above.
+
+ PERL_MB_OPT
+ [version 0.36]
+
+ Command line options that are applied to Build.PL or any Build
+ action. The string is split as the shell would (e.g. whitespace) and
+ the result is prepended to any actual command-line arguments.
+
+INSTALL PATHS
+ [version 0.19]
+
+ When you invoke Module::Build's "build" action, it needs to figure out
+ where to install things. The nutshell version of how this works is that
+ default installation locations are determined from Config.pm, and they
+ may be overridden by using the "install_path" parameter. An
+ "install_base" parameter lets you specify an alternative installation
+ root like /home/foo, and a "destdir" lets you specify a temporary
+ installation directory like /tmp/install in case you want to create
+ bundled-up installable packages.
+
+ Natively, Module::Build provides default installation locations for the
+ following types of installable items:
+
+ lib Usually pure-Perl module files ending in .pm.
+
+ arch
+ "Architecture-dependent" module files, usually produced by compiling
+ XS, Inline, or similar code.
+
+ script
+ Programs written in pure Perl. In order to improve reuse, try to
+ make these as small as possible - put the code into modules whenever
+ possible.
+
+ bin "Architecture-dependent" executable programs, i.e. compiled C code
+ or something. Pretty rare to see this in a perl distribution, but it
+ happens.
+
+ bindoc
+ Documentation for the stuff in "script" and "bin". Usually generated
+ from the POD in those files. Under Unix, these are manual pages
+ belonging to the 'man1' category.
+
+ libdoc
+ Documentation for the stuff in "lib" and "arch". This is usually
+ generated from the POD in .pm files. Under Unix, these are manual
+ pages belonging to the 'man3' category.
+
+ binhtml
+ This is the same as "bindoc" above, but applies to HTML documents.
+
+ libhtml
+ This is the same as "libdoc" above, but applies to HTML documents.
+
+ Four other parameters let you control various aspects of how
+ installation paths are determined:
+
+ installdirs
+ The default destinations for these installable things come from
+ entries in your system's "Config.pm". You can select from three
+ different sets of default locations by setting the "installdirs"
+ parameter as follows:
+
+ 'installdirs' set to:
+ core site vendor
+
+ uses the following defaults from Config.pm:
+
+ lib => installprivlib installsitelib installvendorlib
+ arch => installarchlib installsitearch installvendorarch
+ script => installscript installsitescript installvendorscript
+ bin => installbin installsitebin installvendorbin
+ bindoc => installman1dir installsiteman1dir installvendorman1dir
+ libdoc => installman3dir installsiteman3dir installvendorman3dir
+ binhtml => installhtml1dir installsitehtml1dir installvendorhtml1dir [*]
+ libhtml => installhtml3dir installsitehtml3dir installvendorhtml3dir [*]
+
+ * Under some OS (eg. MSWin32) the destination for HTML documents is
+ determined by the C<Config.pm> entry C<installhtmldir>.
+
+ The default value of "installdirs" is "site". If you're creating
+ vendor distributions of module packages, you may want to do
+ something like this:
+
+ perl Build.PL --installdirs vendor
+
+ or
+
+ ./Build install --installdirs vendor
+
+ If you're installing an updated version of a module that was
+ included with perl itself (i.e. a "core module"), then you may set
+ "installdirs" to "core" to overwrite the module in its present
+ location.
+
+ (Note that the 'script' line is different from "MakeMaker" -
+ unfortunately there's no such thing as "installsitescript" or
+ "installvendorscript" entry in "Config.pm", so we use the
+ "installsitebin" and "installvendorbin" entries to at least get the
+ general location right. In the future, if "Config.pm" adds some more
+ appropriate entries, we'll start using those.)
+
+ install_path
+ Once the defaults have been set, you can override them.
+
+ On the command line, that would look like this:
+
+ perl Build.PL --install_path lib=/foo/lib --install_path arch=/foo/lib/arch
+
+ or this:
+
+ ./Build install --install_path lib=/foo/lib --install_path arch=/foo/lib/arch
+
+ install_base
+ You can also set the whole bunch of installation paths by supplying
+ the "install_base" parameter to point to a directory on your system.
+ For instance, if you set "install_base" to "/home/ken" on a Linux
+ system, you'll install as follows:
+
+ lib => /home/ken/lib/perl5
+ arch => /home/ken/lib/perl5/i386-linux
+ script => /home/ken/bin
+ bin => /home/ken/bin
+ bindoc => /home/ken/man/man1
+ libdoc => /home/ken/man/man3
+ binhtml => /home/ken/html
+ libhtml => /home/ken/html
+
+ Note that this is *different* from how "MakeMaker"'s "PREFIX"
+ parameter works. "install_base" just gives you a default layout
+ under the directory you specify, which may have little to do with
+ the "installdirs=site" layout.
+
+ The exact layout under the directory you specify may vary by system
+ - we try to do the "sensible" thing on each platform.
+
+ destdir
+ If you want to install everything into a temporary directory first
+ (for instance, if you want to create a directory tree that a package
+ manager like "rpm" or "dpkg" could create a package from), you can
+ use the "destdir" parameter:
+
+ perl Build.PL --destdir /tmp/foo
+
+ or
+
+ ./Build install --destdir /tmp/foo
+
+ This will effectively install to "/tmp/foo/$sitelib",
+ "/tmp/foo/$sitearch", and the like, except that it will use
+ "File::Spec" to make the pathnames work correctly on whatever
+ platform you're installing on.
+
+ prefix
+ Provided for compatibility with "ExtUtils::MakeMaker"'s PREFIX
+ argument. "prefix" should be used when you want Module::Build to
+ install your modules, documentation, and scripts in the same place
+ as "ExtUtils::MakeMaker"'s PREFIX mechanism.
+
+ The following are equivalent.
+
+ perl Build.PL --prefix /tmp/foo
+ perl Makefile.PL PREFIX=/tmp/foo
+
+ Because of the complex nature of the prefixification logic, the
+ behavior of PREFIX in "MakeMaker" has changed subtly over time.
+ Module::Build's --prefix logic is equivalent to the PREFIX logic
+ found in "ExtUtils::MakeMaker" 6.30.
+
+ The maintainers of "MakeMaker" do understand the troubles with the
+ PREFIX mechanism, and added INSTALL_BASE support in version 6.31 of
+ "MakeMaker", which was released in 2006.
+
+ If you don't need to retain compatibility with old versions
+ (pre-6.31) of "ExtUtils::MakeMaker" or are starting a fresh Perl
+ installation we recommend you use "install_base" instead (and
+ "INSTALL_BASE" in "ExtUtils::MakeMaker"). See "Installing in the
+ same location as ExtUtils::MakeMaker" in Module::Build::Cookbook for
+ further information.
+
+MOTIVATIONS
+ There are several reasons I wanted to start over, and not just fix what
+ I didn't like about "MakeMaker":
+
+ * I don't like the core idea of "MakeMaker", namely that "make" should
+ be involved in the build process. Here are my reasons:
+
+ + When a person is installing a Perl module, what can you assume
+ about their environment? Can you assume they have "make"? No,
+ but you can assume they have some version of Perl.
+
+ + When a person is writing a Perl module for intended
+ distribution, can you assume that they know how to build a
+ Makefile, so they can customize their build process? No, but you
+ can assume they know Perl, and could customize that way.
+
+ For years, these things have been a barrier to people getting the
+ build/install process to do what they want.
+
+ * There are several architectural decisions in "MakeMaker" that make
+ it very difficult to customize its behavior. For instance, when
+ using "MakeMaker" you do "use ExtUtils::MakeMaker", but the object
+ created in "WriteMakefile()" is actually blessed into a package name
+ that's created on the fly, so you can't simply subclass
+ "ExtUtils::MakeMaker". There is a workaround "MY" package that lets
+ you override certain "MakeMaker" methods, but only certain
+ explicitly preselected (by "MakeMaker") methods can be overridden.
+ Also, the method of customization is very crude: you have to modify
+ a string containing the Makefile text for the particular target.
+ Since these strings aren't documented, and *can't* be documented
+ (they take on different values depending on the platform, version of
+ perl, version of "MakeMaker", etc.), you have no guarantee that your
+ modifications will work on someone else's machine or after an
+ upgrade of "MakeMaker" or perl.
+
+ * It is risky to make major changes to "MakeMaker", since it does so
+ many things, is so important, and generally works. "Module::Build"
+ is an entirely separate package so that I can work on it all I want,
+ without worrying about backward compatibility with "MakeMaker".
+
+ * Finally, Perl is said to be a language for system administration.
+ Could it really be the case that Perl isn't up to the task of
+ building and installing software? Even if that software is a bunch
+ of ".pm" files that just need to be copied from one place to
+ another? My sense was that we could design a system to accomplish
+ this in a flexible, extensible, and friendly manner. Or die trying.
+
+TO DO
+ The current method of relying on time stamps to determine whether a
+ derived file is out of date isn't likely to scale well, since it
+ requires tracing all dependencies backward, it runs into problems on
+ NFS, and it's just generally flimsy. It would be better to use an MD5
+ signature or the like, if available. See "cons" for an example.
+
+ - append to perllocal.pod
+ - add a 'plugin' functionality
+
+AUTHOR
+ Ken Williams <kwilliams@cpan.org>
+
+ Development questions, bug reports, and patches should be sent to the
+ Module-Build mailing list at <module-build@perl.org>.
+
+ Bug reports are also welcome at
+ <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build>.
+
+ The latest development version is available from the Git repository at
+ <https://github.com/Perl-Toolchain-Gang/Module-Build>
+
+COPYRIGHT
+ Copyright (c) 2001-2006 Ken Williams. All rights reserved.
+
+ This library is free software; you can redistribute it and/or modify it
+ under the same terms as Perl itself.
+
+SEE ALSO
+ perl(1), Module::Build::Cookbook, Module::Build::Authoring,
+ Module::Build::API, ExtUtils::MakeMaker
+
+ META.yml Specification: CPAN::Meta::Spec
+
+ <http://www.dsmit.com/cons/>
+
+ <http://search.cpan.org/dist/PerlBuildSystem/>
+