summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/ExtUtils::MakeMaker.3perl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man3/ExtUtils::MakeMaker.3perl
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man3/ExtUtils::MakeMaker.3perl')
-rw-r--r--upstream/archlinux/man3/ExtUtils::MakeMaker.3perl2077
1 files changed, 2077 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/ExtUtils::MakeMaker.3perl b/upstream/archlinux/man3/ExtUtils::MakeMaker.3perl
new file mode 100644
index 00000000..61eae469
--- /dev/null
+++ b/upstream/archlinux/man3/ExtUtils::MakeMaker.3perl
@@ -0,0 +1,2077 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "ExtUtils::MakeMaker 3perl"
+.TH ExtUtils::MakeMaker 3perl 2024-02-11 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+ExtUtils::MakeMaker \- Create a module Makefile
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use ExtUtils::MakeMaker;
+\&
+\& WriteMakefile(
+\& NAME => "Foo::Bar",
+\& VERSION_FROM => "lib/Foo/Bar.pm",
+\& );
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This utility is designed to write a Makefile for an extension module
+from a Makefile.PL. It is based on the Makefile.SH model provided by
+Andy Dougherty and the perl5\-porters.
+.PP
+It splits the task of generating the Makefile into several subroutines
+that can be individually overridden. Each subroutine returns the text
+it wishes to have written to the Makefile.
+.PP
+As there are various Make programs with incompatible syntax, which
+use operating system shells, again with incompatible syntax, it is
+important for users of this module to know which flavour of Make
+a Makefile has been written for so they'll use the correct one and
+won't have to face the possibly bewildering errors resulting from
+using the wrong one.
+.PP
+On POSIX systems, that program will likely be GNU Make; on Microsoft
+Windows, it will be either Microsoft NMake, DMake or GNU Make.
+See the section on the "MAKE" parameter for details.
+.PP
+ExtUtils::MakeMaker (EUMM) is object oriented. Each directory below the current
+directory that contains a Makefile.PL is treated as a separate
+object. This makes it possible to write an unlimited number of
+Makefiles with a single invocation of \fBWriteMakefile()\fR.
+.PP
+All inputs to WriteMakefile are Unicode characters, not just octets. EUMM
+seeks to handle all of these correctly. It is currently still not possible
+to portably use Unicode characters in module names, because this requires
+Perl to handle Unicode filenames, which is not yet the case on Windows.
+.PP
+See ExtUtils::MakeMaker::FAQ for details of the design and usage.
+.SS "How To Write A Makefile.PL"
+.IX Subsection "How To Write A Makefile.PL"
+See ExtUtils::MakeMaker::Tutorial.
+.PP
+The long answer is the rest of the manpage :\-)
+.SS "Default Makefile Behaviour"
+.IX Subsection "Default Makefile Behaviour"
+The generated Makefile enables the user of the extension to invoke
+.PP
+.Vb 4
+\& perl Makefile.PL # optionally "perl Makefile.PL verbose"
+\& make
+\& make test # optionally set TEST_VERBOSE=1
+\& make install # See below
+.Ve
+.PP
+The Makefile to be produced may be altered by adding arguments of the
+form \f(CW\*(C`KEY=VALUE\*(C'\fR. E.g.
+.PP
+.Vb 1
+\& perl Makefile.PL INSTALL_BASE=~
+.Ve
+.PP
+Other interesting targets in the generated Makefile are
+.PP
+.Vb 5
+\& make config # to check if the Makefile is up\-to\-date
+\& make clean # delete local temp files (Makefile gets renamed)
+\& make realclean # delete derived files (including ./blib)
+\& make ci # check in all the files in the MANIFEST file
+\& make dist # see below the Distribution Support section
+.Ve
+.SS "make test"
+.IX Subsection "make test"
+MakeMaker checks for the existence of a file named \fItest.pl\fR in the
+current directory, and if it exists it executes the script with the
+proper set of perl \f(CW\*(C`\-I\*(C'\fR options.
+.PP
+MakeMaker also checks for any files matching glob("t/*.t"). It will
+execute all matching files in alphabetical order via the
+Test::Harness module with the \f(CW\*(C`\-I\*(C'\fR switches set correctly.
+.PP
+You can also organize your tests within subdirectories in the \fIt/\fR directory.
+To do so, use the \fItest\fR directive in your \fIMakefile.PL\fR. For example, if you
+had tests in:
+.PP
+.Vb 2
+\& t/foo
+\& t/foo/bar
+.Ve
+.PP
+You could tell make to run tests in both of those directories with the
+following directives:
+.PP
+.Vb 2
+\& test => {TESTS => \*(Aqt/*/*.t t/*/*/*.t\*(Aq}
+\& test => {TESTS => \*(Aqt/foo/*.t t/foo/bar/*.t\*(Aq}
+.Ve
+.PP
+The first will run all test files in all first-level subdirectories and all
+subdirectories they contain. The second will run tests in only the \fIt/foo\fR
+and \fIt/foo/bar\fR.
+.PP
+If you'd like to see the raw output of your tests, set the
+\&\f(CW\*(C`TEST_VERBOSE\*(C'\fR variable to true.
+.PP
+.Vb 1
+\& make test TEST_VERBOSE=1
+.Ve
+.PP
+If you want to run particular test files, set the \f(CW\*(C`TEST_FILES\*(C'\fR variable.
+It is possible to use globbing with this mechanism.
+.PP
+.Vb 1
+\& make test TEST_FILES=\*(Aqt/foobar.t t/dagobah*.t\*(Aq
+.Ve
+.PP
+Windows users who are using \f(CW\*(C`nmake\*(C'\fR should note that due to a bug in \f(CW\*(C`nmake\*(C'\fR,
+when specifying \f(CW\*(C`TEST_FILES\*(C'\fR you must use back-slashes instead of forward-slashes.
+.PP
+.Vb 1
+\& nmake test TEST_FILES=\*(Aqt\efoobar.t t\edagobah*.t\*(Aq
+.Ve
+.SS "make testdb"
+.IX Subsection "make testdb"
+A useful variation of the above is the target \f(CW\*(C`testdb\*(C'\fR. It runs the
+test under the Perl debugger (see perldebug). If the file
+\&\fItest.pl\fR exists in the current directory, it is used for the test.
+.PP
+If you want to debug some other testfile, set the \f(CW\*(C`TEST_FILE\*(C'\fR variable
+thusly:
+.PP
+.Vb 1
+\& make testdb TEST_FILE=t/mytest.t
+.Ve
+.PP
+By default the debugger is called using \f(CW\*(C`\-d\*(C'\fR option to perl. If you
+want to specify some other option, set the \f(CW\*(C`TESTDB_SW\*(C'\fR variable:
+.PP
+.Vb 1
+\& make testdb TESTDB_SW=\-Dx
+.Ve
+.SS "make install"
+.IX Subsection "make install"
+make alone puts all relevant files into directories that are named by
+the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR and
+INST_MAN3DIR. All these default to something below ./blib if you are
+\&\fInot\fR building below the perl source directory. If you \fIare\fR
+building below the perl source, INST_LIB and INST_ARCHLIB default to
+\&../../lib, and INST_SCRIPT is not defined.
+.PP
+The \fIinstall\fR target of the generated Makefile copies the files found
+below each of the INST_* directories to their INSTALL*
+counterparts. Which counterparts are chosen depends on the setting of
+INSTALLDIRS according to the following table:
+.PP
+.Vb 2
+\& INSTALLDIRS set to
+\& perl site vendor
+\&
+\& PERLPREFIX SITEPREFIX VENDORPREFIX
+\& INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH
+\& INST_LIB INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB
+\& INST_BIN INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN
+\& INST_SCRIPT INSTALLSCRIPT INSTALLSITESCRIPT INSTALLVENDORSCRIPT
+\& INST_MAN1DIR INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR
+\& INST_MAN3DIR INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR
+.Ve
+.PP
+The INSTALL... macros in turn default to their \f(CW%Config\fR
+($Config{installprivlib}, \f(CW$Config\fR{installarchlib}, etc.) counterparts.
+.PP
+You can check the values of these variables on your system with
+.PP
+.Vb 1
+\& perl \*(Aq\-V:install.*\*(Aq
+.Ve
+.PP
+And to check the sequence in which the library directories are
+searched by perl, run
+.PP
+.Vb 1
+\& perl \-le \*(Aqprint join $/, @INC\*(Aq
+.Ve
+.PP
+Sometimes older versions of the module you're installing live in other
+directories in \f(CW@INC\fR. Because Perl loads the first version of a module it
+finds, not the newest, you might accidentally get one of these older
+versions even after installing a brand new version. To delete \fIall other
+versions of the module you're installing\fR (not simply older ones) set the
+\&\f(CW\*(C`UNINST\*(C'\fR variable.
+.PP
+.Vb 1
+\& make install UNINST=1
+.Ve
+.SS INSTALL_BASE
+.IX Subsection "INSTALL_BASE"
+INSTALL_BASE can be passed into Makefile.PL to change where your
+module will be installed. INSTALL_BASE is more like what everyone
+else calls "prefix" than PREFIX is.
+.PP
+To have everything installed in your home directory, do the following.
+.PP
+.Vb 2
+\& # Unix users, INSTALL_BASE=~ works fine
+\& perl Makefile.PL INSTALL_BASE=/path/to/your/home/dir
+.Ve
+.PP
+Like PREFIX, it sets several INSTALL* attributes at once. Unlike
+PREFIX it is easy to predict where the module will end up. The
+installation pattern looks like this:
+.PP
+.Vb 6
+\& INSTALLARCHLIB INSTALL_BASE/lib/perl5/$Config{archname}
+\& INSTALLPRIVLIB INSTALL_BASE/lib/perl5
+\& INSTALLBIN INSTALL_BASE/bin
+\& INSTALLSCRIPT INSTALL_BASE/bin
+\& INSTALLMAN1DIR INSTALL_BASE/man/man1
+\& INSTALLMAN3DIR INSTALL_BASE/man/man3
+.Ve
+.PP
+INSTALL_BASE in MakeMaker and \f(CW\*(C`\-\-install_base\*(C'\fR in Module::Build (as
+of 0.28) install to the same location. If you want MakeMaker and
+Module::Build to install to the same location simply set INSTALL_BASE
+and \f(CW\*(C`\-\-install_base\*(C'\fR to the same location.
+.PP
+INSTALL_BASE was added in 6.31.
+.SS "PREFIX and LIB attribute"
+.IX Subsection "PREFIX and LIB attribute"
+PREFIX and LIB can be used to set several INSTALL* attributes in one
+go. Here's an example for installing into your home directory.
+.PP
+.Vb 2
+\& # Unix users, PREFIX=~ works fine
+\& perl Makefile.PL PREFIX=/path/to/your/home/dir
+.Ve
+.PP
+This will install all files in the module under your home directory,
+with man pages and libraries going into an appropriate place (usually
+~/man and ~/lib). How the exact location is determined is complicated
+and depends on how your Perl was configured. INSTALL_BASE works more
+like what other build systems call "prefix" than PREFIX and we
+recommend you use that instead.
+.PP
+Another way to specify many INSTALL directories with a single
+parameter is LIB.
+.PP
+.Vb 1
+\& perl Makefile.PL LIB=~/lib
+.Ve
+.PP
+This will install the module's architecture-independent files into
+~/lib, the architecture-dependent files into ~/lib/$archname.
+.PP
+Note, that in both cases the tilde expansion is done by MakeMaker, not
+by perl by default, nor by make.
+.PP
+Conflicts between parameters LIB, PREFIX and the various INSTALL*
+arguments are resolved so that:
+.IP \(bu 4
+setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB,
+INSTALLSITELIB, INSTALLSITEARCH (and they are not affected by PREFIX);
+.IP \(bu 4
+without LIB, setting PREFIX replaces the initial \f(CW$Config{prefix}\fR
+part of those INSTALL* arguments, even if the latter are explicitly
+set (but are set to still start with \f(CW$Config{prefix}\fR).
+.PP
+If the user has superuser privileges, and is not working on AFS or
+relatives, then the defaults for INSTALLPRIVLIB, INSTALLARCHLIB,
+INSTALLSCRIPT, etc. will be appropriate, and this incantation will be
+the best:
+.PP
+.Vb 4
+\& perl Makefile.PL;
+\& make;
+\& make test
+\& make install
+.Ve
+.PP
+make install by default writes some documentation of what has been
+done into the file \f(CW\*(C`$(INSTALLARCHLIB)/perllocal.pod\*(C'\fR. This feature
+can be bypassed by calling make pure_install.
+.SS "AFS users"
+.IX Subsection "AFS users"
+will have to specify the installation directories as these most
+probably have changed since perl itself has been installed. They will
+have to do this by calling
+.PP
+.Vb 3
+\& perl Makefile.PL INSTALLSITELIB=/afs/here/today \e
+\& INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
+\& make
+.Ve
+.PP
+Be careful to repeat this procedure every time you recompile an
+extension, unless you are sure the AFS installation directories are
+still valid.
+.SS "Static Linking of a new Perl Binary"
+.IX Subsection "Static Linking of a new Perl Binary"
+An extension that is built with the above steps is ready to use on
+systems supporting dynamic loading. On systems that do not support
+dynamic loading, any newly created extension has to be linked together
+with the available resources. MakeMaker supports the linking process
+by creating appropriate targets in the Makefile whenever an extension
+is built. You can invoke the corresponding section of the makefile with
+.PP
+.Vb 1
+\& make perl
+.Ve
+.PP
+That produces a new perl binary in the current directory with all
+extensions linked in that can be found in INST_ARCHLIB, SITELIBEXP,
+and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
+UNIX, this is called \fIMakefile.aperl\fR (may be system dependent). If you
+want to force the creation of a new perl, it is recommended that you
+delete this \fIMakefile.aperl\fR, so the directories are searched through
+for linkable libraries again.
+.PP
+The binary can be installed into the directory where perl normally
+resides on your machine with
+.PP
+.Vb 1
+\& make inst_perl
+.Ve
+.PP
+To produce a perl binary with a different name than \f(CW\*(C`perl\*(C'\fR, either say
+.PP
+.Vb 3
+\& perl Makefile.PL MAP_TARGET=myperl
+\& make myperl
+\& make inst_perl
+.Ve
+.PP
+or say
+.PP
+.Vb 3
+\& perl Makefile.PL
+\& make myperl MAP_TARGET=myperl
+\& make inst_perl MAP_TARGET=myperl
+.Ve
+.PP
+In any case you will be prompted with the correct invocation of the
+\&\f(CW\*(C`inst_perl\*(C'\fR target that installs the new binary into INSTALLBIN.
+.PP
+make inst_perl by default writes some documentation of what has been
+done into the file \f(CW\*(C`$(INSTALLARCHLIB)/perllocal.pod\*(C'\fR. This
+can be bypassed by calling make pure_inst_perl.
+.PP
+Warning: the inst_perl: target will most probably overwrite your
+existing perl binary. Use with care!
+.PP
+Sometimes you might want to build a statically linked perl although
+your system supports dynamic loading. In this case you may explicitly
+set the linktype with the invocation of the Makefile.PL or make:
+.PP
+.Vb 1
+\& perl Makefile.PL LINKTYPE=static # recommended
+.Ve
+.PP
+or
+.PP
+.Vb 1
+\& make LINKTYPE=static # works on most systems
+.Ve
+.SS "Determination of Perl Library and Installation Locations"
+.IX Subsection "Determination of Perl Library and Installation Locations"
+MakeMaker needs to know, or to guess, where certain things are
+located. Especially INST_LIB and INST_ARCHLIB (where to put the files
+during the \fBmake\fR\|(1) run), PERL_LIB and PERL_ARCHLIB (where to read
+existing modules from), and PERL_INC (header files and \f(CW\*(C`libperl*.*\*(C'\fR).
+.PP
+Extensions may be built either using the contents of the perl source
+directory tree or from the installed perl library. The recommended way
+is to build extensions after you have run 'make install' on perl
+itself. You can do that in any directory on your hard disk that is not
+below the perl source tree. The support for extensions below the ext
+directory of the perl distribution is only good for the standard
+extensions that come with perl.
+.PP
+If an extension is being built below the \f(CW\*(C`ext/\*(C'\fR directory of the perl
+source then MakeMaker will set PERL_SRC automatically (e.g.,
+\&\f(CW\*(C`../..\*(C'\fR). If PERL_SRC is defined and the extension is recognized as
+a standard extension, then other variables default to the following:
+.PP
+.Vb 5
+\& PERL_INC = PERL_SRC
+\& PERL_LIB = PERL_SRC/lib
+\& PERL_ARCHLIB = PERL_SRC/lib
+\& INST_LIB = PERL_LIB
+\& INST_ARCHLIB = PERL_ARCHLIB
+.Ve
+.PP
+If an extension is being built away from the perl source then MakeMaker
+will leave PERL_SRC undefined and default to using the installed copy
+of the perl library. The other variables default to the following:
+.PP
+.Vb 5
+\& PERL_INC = $archlibexp/CORE
+\& PERL_LIB = $privlibexp
+\& PERL_ARCHLIB = $archlibexp
+\& INST_LIB = ./blib/lib
+\& INST_ARCHLIB = ./blib/arch
+.Ve
+.PP
+If perl has not yet been installed then PERL_SRC can be defined on the
+command line as shown in the previous section.
+.SS "Which architecture dependent directory?"
+.IX Subsection "Which architecture dependent directory?"
+If you don't want to keep the defaults for the INSTALL* macros,
+MakeMaker helps you to minimize the typing needed: the usual
+relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined
+by Configure at perl compilation time. MakeMaker supports the user who
+sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not,
+then MakeMaker defaults the latter to be the same subdirectory of
+INSTALLPRIVLIB as Configure decided for the counterparts in \f(CW%Config\fR,
+otherwise it defaults to INSTALLPRIVLIB. The same relationship holds
+for INSTALLSITELIB and INSTALLSITEARCH.
+.PP
+MakeMaker gives you much more freedom than needed to configure
+internal variables and get different results. It is worth mentioning
+that \fBmake\fR\|(1) also lets you configure most of the variables that are
+used in the Makefile. But in the majority of situations this will not
+be necessary, and should only be done if the author of a package
+recommends it (or you know what you're doing).
+.SS "Using Attributes and Parameters"
+.IX Subsection "Using Attributes and Parameters"
+The following attributes may be specified as arguments to \fBWriteMakefile()\fR
+or as NAME=VALUE pairs on the command line. Attributes that became
+available with later versions of MakeMaker are indicated.
+.PP
+In order to maintain portability of attributes with older versions of
+MakeMaker you may want to use App::EUMM::Upgrade with your \f(CW\*(C`Makefile.PL\*(C'\fR.
+.IP ABSTRACT 2
+.IX Item "ABSTRACT"
+One line description of the module. Will be included in PPD file.
+.IP ABSTRACT_FROM 2
+.IX Item "ABSTRACT_FROM"
+Name of the file that contains the package description. MakeMaker looks
+for a line in the POD matching /^($package\es\-\es)(.*)/. This is typically
+the first line in the "=head1 NAME" section. \f(CW$2\fR becomes the abstract.
+.IP AUTHOR 2
+.IX Item "AUTHOR"
+Array of strings containing name (and email address) of package author(s).
+Is used in CPAN Meta files (META.yml or META.json) and PPD
+(Perl Package Description) files for PPM (Perl Package Manager).
+.IP BINARY_LOCATION 2
+.IX Item "BINARY_LOCATION"
+Used when creating PPD files for binary packages. It can be set to a
+full or relative path or URL to the binary archive for a particular
+architecture. For example:
+.Sp
+.Vb 1
+\& perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz
+.Ve
+.Sp
+builds a PPD package that references a binary of the \f(CW\*(C`Agent\*(C'\fR package,
+located in the \f(CW\*(C`x86\*(C'\fR directory relative to the PPD itself.
+.IP BUILD_REQUIRES 2
+.IX Item "BUILD_REQUIRES"
+Available in version 6.55_03 and above.
+.Sp
+A hash of modules that are needed to build your module but not run it.
+.Sp
+This will go into the \f(CW\*(C`build_requires\*(C'\fR field of your \fIMETA.yml\fR and the \f(CW\*(C`build\*(C'\fR of the \f(CW\*(C`prereqs\*(C'\fR field of your \fIMETA.json\fR.
+.Sp
+Defaults to \f(CW\*(C`{ "ExtUtils::MakeMaker" => 0 }\*(C'\fR if this attribute is not specified.
+.Sp
+The format is the same as PREREQ_PM.
+.IP C 2
+.IX Item "C"
+Ref to array of *.c file names. Initialised from a directory scan
+and the values portion of the XS attribute hash. This is not
+currently used by MakeMaker but may be handy in Makefile.PLs.
+.IP CCFLAGS 2
+.IX Item "CCFLAGS"
+String that will be included in the compiler call command line between
+the arguments INC and OPTIMIZE. Note that setting this will overwrite its
+default value (\f(CW$Config::Config{ccflags}\fR); to preserve that, include
+the default value directly, e.g.:
+.Sp
+.Vb 1
+\& CCFLAGS => "$Config::Config{ccflags} ..."
+.Ve
+.IP CONFIG 2
+.IX Item "CONFIG"
+Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
+config.sh. MakeMaker will add to CONFIG the following values anyway:
+ar
+cc
+cccdlflags
+ccdlflags
+cpprun
+dlext
+dlsrc
+ld
+lddlflags
+ldflags
+libc
+lib_ext
+obj_ext
+ranlib
+sitelibexp
+sitearchexp
+so
+.IP CONFIGURE 2
+.IX Item "CONFIGURE"
+CODE reference. The subroutine should return a hash reference. The
+hash may contain further attributes, e.g. {LIBS => ...}, that have to
+be determined by some evaluation method.
+.IP CONFIGURE_REQUIRES 2
+.IX Item "CONFIGURE_REQUIRES"
+Available in version 6.52 and above.
+.Sp
+A hash of modules that are required to run Makefile.PL itself, but not
+to run your distribution.
+.Sp
+This will go into the \f(CW\*(C`configure_requires\*(C'\fR field of your \fIMETA.yml\fR and the \f(CW\*(C`configure\*(C'\fR of the \f(CW\*(C`prereqs\*(C'\fR field of your \fIMETA.json\fR.
+.Sp
+Defaults to \f(CW\*(C`{ "ExtUtils::MakeMaker" => 0 }\*(C'\fR if this attribute is not specified.
+.Sp
+The format is the same as PREREQ_PM.
+.IP DEFINE 2
+.IX Item "DEFINE"
+Something like \f(CW"\-DHAVE_UNISTD_H"\fR
+.IP DESTDIR 2
+.IX Item "DESTDIR"
+This is the root directory into which the code will be installed. It
+\&\fIprepends itself to the normal prefix\fR. For example, if your code
+would normally go into \fI/usr/local/lib/perl\fR you could set DESTDIR=~/tmp/
+and installation would go into \fI~/tmp/usr/local/lib/perl\fR.
+.Sp
+This is primarily of use for people who repackage Perl modules.
+.Sp
+NOTE: Due to the nature of make, it is important that you put the trailing
+slash on your DESTDIR. \fI~/tmp/\fR not \fI~/tmp\fR.
+.IP DIR 2
+.IX Item "DIR"
+Ref to array of subdirectories containing Makefile.PLs e.g. ['sdbm']
+in ext/SDBM_File
+.IP DISTNAME 2
+.IX Item "DISTNAME"
+A safe filename for the package.
+.Sp
+Defaults to NAME below but with :: replaced with \-.
+.Sp
+For example, Foo::Bar becomes Foo-Bar.
+.IP DISTVNAME 2
+.IX Item "DISTVNAME"
+Your name for distributing the package with the version number
+included. This is used by 'make dist' to name the resulting archive
+file.
+.Sp
+Defaults to DISTNAME-VERSION.
+.Sp
+For example, version 1.04 of Foo::Bar becomes Foo\-Bar\-1.04.
+.Sp
+On some OS's where . has special meaning VERSION_SYM may be used in
+place of VERSION.
+.IP DLEXT 2
+.IX Item "DLEXT"
+Specifies the extension of the module's loadable object. For example:
+.Sp
+.Vb 1
+\& DLEXT => \*(Aqunusual_ext\*(Aq, # Default value is $Config{so}
+.Ve
+.Sp
+NOTE: When using this option to alter the extension of a module's
+loadable object, it is also necessary that the module's pm file
+specifies the same change:
+.Sp
+.Vb 1
+\& local $DynaLoader::dl_dlext = \*(Aqunusual_ext\*(Aq;
+.Ve
+.IP DL_FUNCS 2
+.IX Item "DL_FUNCS"
+Hashref of symbol names for routines to be made available as universal
+symbols. Each key/value pair consists of the package name and an
+array of routine names in that package. Used only under AIX, OS/2,
+VMS and Win32 at present. The routine names supplied will be expanded
+in the same way as XSUB names are expanded by the \fBXS()\fR macro.
+Defaults to
+.Sp
+.Vb 1
+\& {"$(NAME)" => ["boot_$(NAME)" ] }
+.Ve
+.Sp
+e.g.
+.Sp
+.Vb 2
+\& {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
+\& "NetconfigPtr" => [ \*(AqDESTROY\*(Aq] }
+.Ve
+.Sp
+Please see the ExtUtils::Mksymlists documentation for more information
+about the DL_FUNCS, DL_VARS and FUNCLIST attributes.
+.IP DL_VARS 2
+.IX Item "DL_VARS"
+Array of symbol names for variables to be made available as universal symbols.
+Used only under AIX, OS/2, VMS and Win32 at present. Defaults to [].
+(e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ])
+.IP EXCLUDE_EXT 2
+.IX Item "EXCLUDE_EXT"
+Array of extension names to exclude when doing a static build. This
+is ignored if INCLUDE_EXT is present. Consult INCLUDE_EXT for more
+details. (e.g. [ qw( Socket POSIX ) ] )
+.Sp
+This attribute may be most useful when specified as a string on the
+command line: perl Makefile.PL EXCLUDE_EXT='Socket Safe'
+.IP EXE_FILES 2
+.IX Item "EXE_FILES"
+Ref to array of executable files. The files will be copied to the
+INST_SCRIPT directory. Make realclean will delete them from there
+again.
+.Sp
+If your executables start with something like #!perl or
+#!/usr/bin/perl MakeMaker will change this to the path of the perl
+\&'Makefile.PL' was invoked with so the programs will be sure to run
+properly even if perl is not in /usr/bin/perl.
+.IP FIRST_MAKEFILE 2
+.IX Item "FIRST_MAKEFILE"
+The name of the Makefile to be produced. This is used for the second
+Makefile that will be produced for the MAP_TARGET.
+.Sp
+Defaults to 'Makefile' or 'Descrip.MMS' on VMS.
+.Sp
+(Note: we couldn't use MAKEFILE because dmake uses this for something
+else).
+.IP FULLPERL 2
+.IX Item "FULLPERL"
+Perl binary able to run this extension, load XS modules, etc...
+.IP FULLPERLRUN 2
+.IX Item "FULLPERLRUN"
+Like PERLRUN, except it uses FULLPERL.
+.IP FULLPERLRUNINST 2
+.IX Item "FULLPERLRUNINST"
+Like PERLRUNINST, except it uses FULLPERL.
+.IP FUNCLIST 2
+.IX Item "FUNCLIST"
+This provides an alternate means to specify function names to be
+exported from the extension. Its value is a reference to an
+array of function names to be exported by the extension. These
+names are passed through unaltered to the linker options file.
+.IP H 2
+.IX Item "H"
+Ref to array of *.h file names. Similar to C.
+.IP IMPORTS 2
+.IX Item "IMPORTS"
+This attribute is used to specify names to be imported into the
+extension. Takes a hash ref.
+.Sp
+It is only used on OS/2 and Win32.
+.IP INC 2
+.IX Item "INC"
+Include file dirs eg: \f(CW"\-I/usr/5include \-I/path/to/inc"\fR
+.IP INCLUDE_EXT 2
+.IX Item "INCLUDE_EXT"
+Array of extension names to be included when doing a static build.
+MakeMaker will normally build with all of the installed extensions when
+doing a static build, and that is usually the desired behavior. If
+INCLUDE_EXT is present then MakeMaker will build only with those extensions
+which are explicitly mentioned. (e.g. [ qw( Socket POSIX ) ])
+.Sp
+It is not necessary to mention DynaLoader or the current extension when
+filling in INCLUDE_EXT. If the INCLUDE_EXT is mentioned but is empty then
+only DynaLoader and the current extension will be included in the build.
+.Sp
+This attribute may be most useful when specified as a string on the
+command line: perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
+.IP INSTALLARCHLIB 2
+.IX Item "INSTALLARCHLIB"
+Used by 'make install', which copies files from INST_ARCHLIB to this
+directory if INSTALLDIRS is set to perl.
+.IP INSTALLBIN 2
+.IX Item "INSTALLBIN"
+Directory to install binary files (e.g. tkperl) into if
+INSTALLDIRS=perl.
+.IP INSTALLDIRS 2
+.IX Item "INSTALLDIRS"
+Determines which of the sets of installation directories to choose:
+perl, site or vendor. Defaults to site.
+.IP INSTALLMAN1DIR 2
+.IX Item "INSTALLMAN1DIR"
+.PD 0
+.IP INSTALLMAN3DIR 2
+.IX Item "INSTALLMAN3DIR"
+.PD
+These directories get the man pages at 'make install' time if
+INSTALLDIRS=perl. Defaults to \f(CW$Config\fR{installman*dir}.
+.Sp
+If set to 'none', no man pages will be installed.
+.IP INSTALLPRIVLIB 2
+.IX Item "INSTALLPRIVLIB"
+Used by 'make install', which copies files from INST_LIB to this
+directory if INSTALLDIRS is set to perl.
+.Sp
+Defaults to \f(CW$Config\fR{installprivlib}.
+.IP INSTALLSCRIPT 2
+.IX Item "INSTALLSCRIPT"
+Available in version 6.30_02 and above.
+.Sp
+Used by 'make install' which copies files from INST_SCRIPT to this
+directory if INSTALLDIRS=perl.
+.IP INSTALLSITEARCH 2
+.IX Item "INSTALLSITEARCH"
+Used by 'make install', which copies files from INST_ARCHLIB to this
+directory if INSTALLDIRS is set to site (default).
+.IP INSTALLSITEBIN 2
+.IX Item "INSTALLSITEBIN"
+Used by 'make install', which copies files from INST_BIN to this
+directory if INSTALLDIRS is set to site (default).
+.IP INSTALLSITELIB 2
+.IX Item "INSTALLSITELIB"
+Used by 'make install', which copies files from INST_LIB to this
+directory if INSTALLDIRS is set to site (default).
+.IP INSTALLSITEMAN1DIR 2
+.IX Item "INSTALLSITEMAN1DIR"
+.PD 0
+.IP INSTALLSITEMAN3DIR 2
+.IX Item "INSTALLSITEMAN3DIR"
+.PD
+These directories get the man pages at 'make install' time if
+INSTALLDIRS=site (default). Defaults to
+$(SITEPREFIX)/man/man$(MAN*EXT).
+.Sp
+If set to 'none', no man pages will be installed.
+.IP INSTALLSITESCRIPT 2
+.IX Item "INSTALLSITESCRIPT"
+Used by 'make install' which copies files from INST_SCRIPT to this
+directory if INSTALLDIRS is set to site (default).
+.IP INSTALLVENDORARCH 2
+.IX Item "INSTALLVENDORARCH"
+Used by 'make install', which copies files from INST_ARCHLIB to this
+directory if INSTALLDIRS is set to vendor. Note that if you do not set
+this, the value of INSTALLVENDORLIB will be used, which is probably not
+what you want.
+.IP INSTALLVENDORBIN 2
+.IX Item "INSTALLVENDORBIN"
+Used by 'make install', which copies files from INST_BIN to this
+directory if INSTALLDIRS is set to vendor.
+.IP INSTALLVENDORLIB 2
+.IX Item "INSTALLVENDORLIB"
+Used by 'make install', which copies files from INST_LIB to this
+directory if INSTALLDIRS is set to vendor.
+.IP INSTALLVENDORMAN1DIR 2
+.IX Item "INSTALLVENDORMAN1DIR"
+.PD 0
+.IP INSTALLVENDORMAN3DIR 2
+.IX Item "INSTALLVENDORMAN3DIR"
+.PD
+These directories get the man pages at 'make install' time if
+INSTALLDIRS=vendor. Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT).
+.Sp
+If set to 'none', no man pages will be installed.
+.IP INSTALLVENDORSCRIPT 2
+.IX Item "INSTALLVENDORSCRIPT"
+Available in version 6.30_02 and above.
+.Sp
+Used by 'make install' which copies files from INST_SCRIPT to this
+directory if INSTALLDIRS is set to vendor.
+.IP INST_ARCHLIB 2
+.IX Item "INST_ARCHLIB"
+Same as INST_LIB for architecture dependent files.
+.IP INST_BIN 2
+.IX Item "INST_BIN"
+Directory to put real binary files during 'make'. These will be copied
+to INSTALLBIN during 'make install'
+.IP INST_LIB 2
+.IX Item "INST_LIB"
+Directory where we put library files of this extension while building
+it.
+.IP INST_MAN1DIR 2
+.IX Item "INST_MAN1DIR"
+Directory to hold the man pages at 'make' time
+.IP INST_MAN3DIR 2
+.IX Item "INST_MAN3DIR"
+Directory to hold the man pages at 'make' time
+.IP INST_SCRIPT 2
+.IX Item "INST_SCRIPT"
+Directory where executable files should be installed during
+\&'make'. Defaults to "./blib/script", just to have a dummy location during
+testing. make install will copy the files in INST_SCRIPT to
+INSTALLSCRIPT.
+.IP LD 2
+.IX Item "LD"
+Program to be used to link libraries for dynamic loading.
+.Sp
+Defaults to \f(CW$Config\fR{ld}.
+.IP LDDLFLAGS 2
+.IX Item "LDDLFLAGS"
+Any special flags that might need to be passed to ld to create a
+shared library suitable for dynamic loading. It is up to the makefile
+to use it. (See "lddlflags" in Config)
+.Sp
+Defaults to \f(CW$Config\fR{lddlflags}.
+.IP LDFROM 2
+.IX Item "LDFROM"
+Defaults to "$(OBJECT)" and is used in the ld command to specify
+what files to link/load from (also see dynamic_lib below for how to
+specify ld flags)
+.IP LIB 2
+.IX Item "LIB"
+LIB should only be set at \f(CW\*(C`perl Makefile.PL\*(C'\fR time but is allowed as a
+MakeMaker argument. It has the effect of setting both INSTALLPRIVLIB
+and INSTALLSITELIB to that value regardless any explicit setting of
+those arguments (or of PREFIX). INSTALLARCHLIB and INSTALLSITEARCH
+are set to the corresponding architecture subdirectory.
+.IP LIBPERL_A 2
+.IX Item "LIBPERL_A"
+The filename of the perllibrary that will be used together with this
+extension. Defaults to libperl.a.
+.IP LIBS 2
+.IX Item "LIBS"
+An anonymous array of alternative library
+specifications to be searched for (in order) until
+at least one library is found. E.g.
+.Sp
+.Vb 1
+\& \*(AqLIBS\*(Aq => ["\-lgdbm", "\-ldbm \-lfoo", "\-L/path \-ldbm.nfs"]
+.Ve
+.Sp
+Mind, that any element of the array
+contains a complete set of arguments for the ld
+command. So do not specify
+.Sp
+.Vb 1
+\& \*(AqLIBS\*(Aq => ["\-ltcl", "\-ltk", "\-lX11"]
+.Ve
+.Sp
+See ODBM_File/Makefile.PL for an example, where an array is needed. If
+you specify a scalar as in
+.Sp
+.Vb 1
+\& \*(AqLIBS\*(Aq => "\-ltcl \-ltk \-lX11"
+.Ve
+.Sp
+MakeMaker will turn it into an array with one element.
+.IP LICENSE 2
+.IX Item "LICENSE"
+Available in version 6.31 and above.
+.Sp
+The licensing terms of your distribution. Generally it's "perl_5" for the
+same license as Perl itself.
+.Sp
+See CPAN::Meta::Spec for the list of options.
+.Sp
+Defaults to "unknown".
+.IP LINKTYPE 2
+.IX Item "LINKTYPE"
+\&'static' or 'dynamic' (default unless usedl=undef in
+config.sh). Should only be used to force static linking (also see
+linkext below).
+.IP MAGICXS 2
+.IX Item "MAGICXS"
+Available in version 6.8305 and above.
+.Sp
+When this is set to \f(CW1\fR, \f(CW\*(C`OBJECT\*(C'\fR will be automagically derived from
+\&\f(CW\*(C`O_FILES\*(C'\fR.
+.IP MAKE 2
+.IX Item "MAKE"
+Available in version 6.30_01 and above.
+.Sp
+Variant of make you intend to run the generated Makefile with. This
+parameter lets Makefile.PL know what make quirks to account for when
+generating the Makefile.
+.Sp
+MakeMaker also honors the MAKE environment variable. This parameter
+takes precedence.
+.Sp
+Currently the only significant values are 'dmake' and 'nmake' for Windows
+users, instructing MakeMaker to generate a Makefile in the flavour of
+DMake ("Dennis Vadura's Make") or Microsoft NMake respectively.
+.Sp
+Defaults to \f(CW$Config\fR{make}, which may go looking for a Make program
+in your environment.
+.Sp
+How are you supposed to know what flavour of Make a Makefile has
+been generated for if you didn't specify a value explicitly? Search
+the generated Makefile for the definition of the MAKE variable,
+which is used to recursively invoke the Make utility. That will tell
+you what Make you're supposed to invoke the Makefile with.
+.IP MAKEAPERL 2
+.IX Item "MAKEAPERL"
+Boolean which tells MakeMaker that it should include the rules to
+make a perl. This is handled automatically as a switch by
+MakeMaker. The user normally does not need it.
+.IP MAKEFILE_OLD 2
+.IX Item "MAKEFILE_OLD"
+When 'make clean' or similar is run, the $(FIRST_MAKEFILE) will be
+backed up at this location.
+.Sp
+Defaults to $(FIRST_MAKEFILE).old or $(FIRST_MAKEFILE)_old on VMS.
+.IP MAN1PODS 2
+.IX Item "MAN1PODS"
+Hashref of pod-containing files. MakeMaker will default this to all
+EXE_FILES files that include POD directives. The files listed
+here will be converted to man pages and installed as was requested
+at Configure time.
+.Sp
+This hash should map POD files (or scripts containing POD) to the
+man file names under the \f(CW\*(C`blib/man1/\*(C'\fR directory, as in the following
+example:
+.Sp
+.Vb 4
+\& MAN1PODS => {
+\& \*(Aqdoc/command.pod\*(Aq => \*(Aqblib/man1/command.1\*(Aq,
+\& \*(Aqscripts/script.pl\*(Aq => \*(Aqblib/man1/script.1\*(Aq,
+\& }
+.Ve
+.IP MAN3PODS 2
+.IX Item "MAN3PODS"
+Hashref that assigns to *.pm and *.pod files the files into which the
+manpages are to be written. MakeMaker parses all *.pod and *.pm files
+for POD directives. Files that contain POD will be the default keys of
+the MAN3PODS hashref. These will then be converted to man pages during
+\&\f(CW\*(C`make\*(C'\fR and will be installed during \f(CW\*(C`make install\*(C'\fR.
+.Sp
+Example similar to MAN1PODS.
+.IP MAP_TARGET 2
+.IX Item "MAP_TARGET"
+If it is intended that a new perl binary be produced, this variable
+may hold a name for that binary. Defaults to perl
+.IP META_ADD 2
+.IX Item "META_ADD"
+.PD 0
+.IP META_MERGE 2
+.IX Item "META_MERGE"
+.PD
+Available in version 6.46 and above.
+.Sp
+A hashref of items to add to the CPAN Meta file (\fIMETA.yml\fR or
+\&\fIMETA.json\fR).
+.Sp
+They differ in how they behave if they have the same key as the
+default metadata. META_ADD will override the default value with its
+own. META_MERGE will merge its value with the default.
+.Sp
+Unless you want to override the defaults, prefer META_MERGE so as to
+get the advantage of any future defaults.
+.Sp
+Where prereqs are concerned, if META_MERGE is used, prerequisites are merged
+with their counterpart \f(CWWriteMakefile()\fR argument
+(PREREQ_PM is merged into {prereqs}{runtime}{requires},
+BUILD_REQUIRES into \f(CW\*(C`{prereqs}{build}{requires}\*(C'\fR,
+CONFIGURE_REQUIRES into \f(CW\*(C`{prereqs}{configure}{requires}\*(C'\fR,
+and TEST_REQUIRES into \f(CW\*(C`{prereqs}{test}{requires})\*(C'\fR.
+When prereqs are specified with META_ADD, the only prerequisites added to the
+file come from the metadata, not \f(CWWriteMakefile()\fR arguments.
+.Sp
+Note that these configuration options are only used for generating \fIMETA.yml\fR
+and \fIMETA.json\fR \-\- they are NOT used for \fIMYMETA.yml\fR and \fIMYMETA.json\fR.
+Therefore data in these fields should NOT be used for dynamic (user-side)
+configuration.
+.Sp
+By default CPAN Meta specification \f(CW1.4\fR is used. In order to use
+CPAN Meta specification \f(CW2.0\fR, indicate with \f(CW\*(C`meta\-spec\*(C'\fR the version
+you want to use.
+.Sp
+.Vb 1
+\& META_MERGE => {
+\&
+\& "meta\-spec" => { version => 2 },
+\&
+\& resources => {
+\&
+\& repository => {
+\& type => \*(Aqgit\*(Aq,
+\& url => \*(Aqgit://github.com/Perl\-Toolchain\-Gang/ExtUtils\-MakeMaker.git\*(Aq,
+\& web => \*(Aqhttps://github.com/Perl\-Toolchain\-Gang/ExtUtils\-MakeMaker\*(Aq,
+\& },
+\&
+\& },
+\&
+\& },
+.Ve
+.IP MIN_PERL_VERSION 2
+.IX Item "MIN_PERL_VERSION"
+Available in version 6.48 and above.
+.Sp
+The minimum required version of Perl for this distribution.
+.Sp
+Either the 5.006001 or the 5.6.1 format is acceptable.
+.IP MYEXTLIB 2
+.IX Item "MYEXTLIB"
+If the extension links to a library that it builds, set this to the
+name of the library (see SDBM_File)
+.IP NAME 2
+.IX Item "NAME"
+The package representing the distribution. For example, \f(CW\*(C`Test::More\*(C'\fR
+or \f(CW\*(C`ExtUtils::MakeMaker\*(C'\fR. It will be used to derive information about
+the distribution such as the "DISTNAME", installation locations
+within the Perl library and where XS files will be looked for by
+default (see "XS").
+.Sp
+\&\f(CW\*(C`NAME\*(C'\fR \fImust\fR be a valid Perl package name and it \fImust\fR have an
+associated \f(CW\*(C`.pm\*(C'\fR file. For example, \f(CW\*(C`Foo::Bar\*(C'\fR is a valid \f(CW\*(C`NAME\*(C'\fR
+and there must exist \fIFoo/Bar.pm\fR. Any XS code should be in
+\&\fIBar.xs\fR unless stated otherwise.
+.Sp
+Your distribution \fBmust\fR have a \f(CW\*(C`NAME\*(C'\fR.
+.IP NEEDS_LINKING 2
+.IX Item "NEEDS_LINKING"
+MakeMaker will figure out if an extension contains linkable code
+anywhere down the directory tree, and will set this variable
+accordingly, but you can speed it up a very little bit if you define
+this boolean variable yourself.
+.IP NOECHO 2
+.IX Item "NOECHO"
+Command so make does not print the literal commands it's running.
+.Sp
+By setting it to an empty string you can generate a Makefile that
+prints all commands. Mainly used in debugging MakeMaker itself.
+.Sp
+Defaults to \f(CW\*(C`@\*(C'\fR.
+.IP NORECURS 2
+.IX Item "NORECURS"
+Boolean. Attribute to inhibit descending into subdirectories.
+.IP NO_META 2
+.IX Item "NO_META"
+When true, suppresses the generation and addition to the MANIFEST of
+the META.yml and META.json module meta-data files during 'make distdir'.
+.Sp
+Defaults to false.
+.IP NO_MYMETA 2
+.IX Item "NO_MYMETA"
+Available in version 6.57_02 and above.
+.Sp
+When true, suppresses the generation of MYMETA.yml and MYMETA.json module
+meta-data files during 'perl Makefile.PL'.
+.Sp
+Defaults to false.
+.IP NO_PACKLIST 2
+.IX Item "NO_PACKLIST"
+Available in version 6.7501 and above.
+.Sp
+When true, suppresses the writing of \f(CW\*(C`packlist\*(C'\fR files for installs.
+.Sp
+Defaults to false.
+.IP NO_PERLLOCAL 2
+.IX Item "NO_PERLLOCAL"
+Available in version 6.7501 and above.
+.Sp
+When true, suppresses the appending of installations to \f(CW\*(C`perllocal\*(C'\fR.
+.Sp
+Defaults to false.
+.IP NO_VC 2
+.IX Item "NO_VC"
+In general, any generated Makefile checks for the current version of
+MakeMaker and the version the Makefile was built under. If NO_VC is
+set, the version check is neglected. Do not write this into your
+Makefile.PL, use it interactively instead.
+.IP OBJECT 2
+.IX Item "OBJECT"
+List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
+string or an array containing all object files, e.g. "tkpBind.o
+tkpButton.o tkpCanvas.o" or ["tkpBind.o", "tkpButton.o", "tkpCanvas.o"]
+.Sp
+(Where BASEEXT is the last component of NAME, and OBJ_EXT is \f(CW$Config\fR{obj_ext}.)
+.IP OPTIMIZE 2
+.IX Item "OPTIMIZE"
+Defaults to \f(CW\*(C`\-O\*(C'\fR. Set it to \f(CW\*(C`\-g\*(C'\fR to turn debugging on. The flag is
+passed to subdirectory makes.
+.IP PERL 2
+.IX Item "PERL"
+Perl binary for tasks that can be done by miniperl. If it contains
+spaces or other shell metacharacters, it needs to be quoted in a way
+that protects them, since this value is intended to be inserted in a
+shell command line in the Makefile. E.g.:
+.Sp
+.Vb 3
+\& # Perl executable lives in "C:/Program Files/Perl/bin"
+\& # Normally you don\*(Aqt need to set this yourself!
+\& $ perl Makefile.PL PERL=\*(Aq"C:/Program Files/Perl/bin/perl.exe" \-w\*(Aq
+.Ve
+.IP PERL_CORE 2
+.IX Item "PERL_CORE"
+Set only when MakeMaker is building the extensions of the Perl core
+distribution.
+.IP PERLMAINCC 2
+.IX Item "PERLMAINCC"
+The call to the program that is able to compile perlmain.c. Defaults
+to $(CC).
+.IP PERL_ARCHLIB 2
+.IX Item "PERL_ARCHLIB"
+Same as for PERL_LIB, but for architecture dependent files.
+.Sp
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_ARCHLIB) is automatically in \f(CW@INC\fR,
+and adding it would get in the way of PERL5LIB).
+.IP PERL_LIB 2
+.IX Item "PERL_LIB"
+Directory containing the Perl library to use.
+.Sp
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_LIB) is automatically in \f(CW@INC\fR,
+and adding it would get in the way of PERL5LIB).
+.IP PERL_MALLOC_OK 2
+.IX Item "PERL_MALLOC_OK"
+defaults to 0. Should be set to TRUE if the extension can work with
+the memory allocation routines substituted by the Perl \fBmalloc()\fR subsystem.
+This should be applicable to most extensions with exceptions of those
+.RS 2
+.IP \(bu 4
+with bugs in memory allocations which are caught by Perl's \fBmalloc()\fR;
+.IP \(bu 4
+which interact with the memory allocator in other ways than via
+\&\fBmalloc()\fR, \fBrealloc()\fR, \fBfree()\fR, \fBcalloc()\fR, \fBsbrk()\fR and \fBbrk()\fR;
+.IP \(bu 4
+which rely on special alignment which is not provided by Perl's \fBmalloc()\fR.
+.RE
+.RS 2
+.Sp
+\&\fBNOTE.\fR Neglecting to set this flag in \fIany one\fR of the loaded extension
+nullifies many advantages of Perl's \fBmalloc()\fR, such as better usage of
+system resources, error detection, memory usage reporting, catchable failure
+of memory allocations, etc.
+.RE
+.IP PERLPREFIX 2
+.IX Item "PERLPREFIX"
+Directory under which core modules are to be installed.
+.Sp
+Defaults to \f(CW$Config\fR{installprefixexp}, falling back to
+\&\f(CW$Config\fR{installprefix}, \f(CW$Config\fR{prefixexp} or \f(CW$Config\fR{prefix} should
+\&\f(CW$Config\fR{installprefixexp} not exist.
+.Sp
+Overridden by PREFIX.
+.IP PERLRUN 2
+.IX Item "PERLRUN"
+Use this instead of $(PERL) when you wish to run perl. It will set up
+extra necessary flags for you.
+.IP PERLRUNINST 2
+.IX Item "PERLRUNINST"
+Use this instead of $(PERL) when you wish to run perl to work with
+modules. It will add things like \-I$(INST_ARCH) and other necessary
+flags so perl can see the modules you're about to install.
+.IP PERL_SRC 2
+.IX Item "PERL_SRC"
+Directory containing the Perl source code (use of this should be
+avoided, it may be undefined)
+.IP PERM_DIR 2
+.IX Item "PERM_DIR"
+Available in version 6.51_01 and above.
+.Sp
+Desired permission for directories. Defaults to \f(CW755\fR.
+.IP PERM_RW 2
+.IX Item "PERM_RW"
+Desired permission for read/writable files. Defaults to \f(CW644\fR.
+.IP PERM_RWX 2
+.IX Item "PERM_RWX"
+Desired permission for executable files. Defaults to \f(CW755\fR.
+.IP PL_FILES 2
+.IX Item "PL_FILES"
+MakeMaker can run programs to generate files for you at build time.
+By default any file named *.PL (except Makefile.PL and Build.PL) in
+the top level directory will be assumed to be a Perl program and run
+passing its own basename in as an argument. This basename is actually a build
+target, and there is an intention, but not a requirement, that the *.PL file
+make the file passed to to as an argument. For example...
+.Sp
+.Vb 1
+\& perl foo.PL foo
+.Ve
+.Sp
+This behavior can be overridden by supplying your own set of files to
+search. PL_FILES accepts a hash ref, the key being the file to run
+and the value is passed in as the first argument when the PL file is run.
+.Sp
+.Vb 1
+\& PL_FILES => {\*(Aqbin/foobar.PL\*(Aq => \*(Aqbin/foobar\*(Aq}
+\&
+\& PL_FILES => {\*(Aqfoo.PL\*(Aq => \*(Aqfoo.c\*(Aq}
+.Ve
+.Sp
+Would run bin/foobar.PL like this:
+.Sp
+.Vb 1
+\& perl bin/foobar.PL bin/foobar
+.Ve
+.Sp
+If multiple files from one program are desired an array ref can be used.
+.Sp
+.Vb 1
+\& PL_FILES => {\*(Aqbin/foobar.PL\*(Aq => [qw(bin/foobar1 bin/foobar2)]}
+.Ve
+.Sp
+In this case the program will be run multiple times using each target file.
+.Sp
+.Vb 2
+\& perl bin/foobar.PL bin/foobar1
+\& perl bin/foobar.PL bin/foobar2
+.Ve
+.Sp
+If an output file depends on extra input files beside the script itself,
+a hash ref can be used in version 7.36 and above:
+.Sp
+.Vb 4
+\& PL_FILES => { \*(Aqfoo.PL\*(Aq => {
+\& \*(Aqfoo.out\*(Aq => \*(Aqfoo.in\*(Aq,
+\& \*(Aqbar.out\*(Aq => [qw(bar1.in bar2.in)],
+\& }
+.Ve
+.Sp
+In this case the extra input files will be passed to the program after
+the target file:
+.Sp
+.Vb 2
+\& perl foo.PL foo.out foo.in
+\& perl foo.PL bar.out bar1.in bar2.in
+.Ve
+.Sp
+PL files are normally run \fBafter\fR pm_to_blib and include INST_LIB and
+INST_ARCH in their \f(CW@INC\fR, so the just built modules can be
+accessed... unless the PL file is making a module (or anything else in
+PM) in which case it is run \fBbefore\fR pm_to_blib and does not include
+INST_LIB and INST_ARCH in its \f(CW@INC\fR. This apparently odd behavior
+is there for backwards compatibility (and it's somewhat DWIM). The argument
+passed to the .PL is set up as a target to build in the Makefile. In other
+sections such as \f(CW\*(C`postamble\*(C'\fR you can specify a dependency on the
+filename/argument that the .PL is supposed (or will have, now that that is
+is a dependency) to generate. Note the file to be generated will still be
+generated and the .PL will still run even without an explicit dependency created
+by you, since the \f(CW\*(C`all\*(C'\fR target still depends on running all eligible to run.PL
+files.
+.IP PM 2
+.IX Item "PM"
+Hashref of .pm files and *.pl files to be installed. e.g.
+.Sp
+.Vb 1
+\& {\*(Aqname_of_file.pm\*(Aq => \*(Aq$(INST_LIB)/install_as.pm\*(Aq}
+.Ve
+.Sp
+By default this will include *.pm and *.pl and the files found in
+the PMLIBDIRS directories. Defining PM in the
+Makefile.PL will override PMLIBDIRS.
+.IP PMLIBDIRS 2
+.IX Item "PMLIBDIRS"
+Ref to array of subdirectories containing library files. Defaults to
+[ 'lib', $(BASEEXT) ]. The directories will be scanned and \fIany\fR files
+they contain will be installed in the corresponding location in the
+library. A \fBlibscan()\fR method can be used to alter the behaviour.
+Defining PM in the Makefile.PL will override PMLIBDIRS.
+.Sp
+(Where BASEEXT is the last component of NAME.)
+.IP PM_FILTER 2
+.IX Item "PM_FILTER"
+A filter program, in the traditional Unix sense (input from stdin, output
+to stdout) that is passed on each .pm file during the build (in the
+\&\fBpm_to_blib()\fR phase). It is empty by default, meaning no filtering is done.
+You could use:
+.Sp
+.Vb 1
+\& PM_FILTER => \*(Aqperl \-ne "print unless /^\e\e#/"\*(Aq,
+.Ve
+.Sp
+to remove all the leading comments on the fly during the build. In order
+to be as portable as possible, please consider using a Perl one-liner
+rather than Unix (or other) utilities, as above. The # is escaped for
+the Makefile, since what is going to be generated will then be:
+.Sp
+.Vb 1
+\& PM_FILTER = perl \-ne "print unless /^\e#/"
+.Ve
+.Sp
+Without the \e before the #, we'd have the start of a Makefile comment,
+and the macro would be incorrectly defined.
+.Sp
+You will almost certainly be better off using the \f(CW\*(C`PL_FILES\*(C'\fR system,
+instead. See above, or the ExtUtils::MakeMaker::FAQ entry.
+.IP POLLUTE 2
+.IX Item "POLLUTE"
+Prior to 5.6 various interpreter variables were available without a \f(CW\*(C`PL_\*(C'\fR
+prefix, eg. \f(CW\*(C`PL_undef\*(C'\fR was available as \f(CW\*(C`undef\*(C'\fR. As of release 5.6, these
+are only defined if the POLLUTE flag is enabled:
+.Sp
+.Vb 1
+\& perl Makefile.PL POLLUTE=1
+.Ve
+.Sp
+Please inform the module author if this is necessary to successfully install
+a module under 5.6 or later.
+.IP PPM_INSTALL_EXEC 2
+.IX Item "PPM_INSTALL_EXEC"
+Name of the executable used to run \f(CW\*(C`PPM_INSTALL_SCRIPT\*(C'\fR below. (e.g. perl)
+.IP PPM_INSTALL_SCRIPT 2
+.IX Item "PPM_INSTALL_SCRIPT"
+Name of the script that gets executed by the Perl Package Manager after
+the installation of a package.
+.IP PPM_UNINSTALL_EXEC 2
+.IX Item "PPM_UNINSTALL_EXEC"
+Available in version 6.8502 and above.
+.Sp
+Name of the executable used to run \f(CW\*(C`PPM_UNINSTALL_SCRIPT\*(C'\fR below. (e.g. perl)
+.IP PPM_UNINSTALL_SCRIPT 2
+.IX Item "PPM_UNINSTALL_SCRIPT"
+Available in version 6.8502 and above.
+.Sp
+Name of the script that gets executed by the Perl Package Manager before
+the removal of a package.
+.IP PREFIX 2
+.IX Item "PREFIX"
+This overrides all the default install locations. Man pages,
+libraries, scripts, etc... MakeMaker will try to make an educated
+guess about where to place things under the new PREFIX based on your
+Config defaults. Failing that, it will fall back to a structure
+which should be sensible for your platform.
+.Sp
+If you specify LIB or any INSTALL* variables they will not be affected
+by the PREFIX.
+.IP PREREQ_FATAL 2
+.IX Item "PREREQ_FATAL"
+Bool. If this parameter is true, failing to have the required modules
+(or the right versions thereof) will be fatal. \f(CW\*(C`perl Makefile.PL\*(C'\fR
+will \f(CW\*(C`die\*(C'\fR instead of simply informing the user of the missing dependencies.
+.Sp
+It is \fIextremely\fR rare to have to use \f(CW\*(C`PREREQ_FATAL\*(C'\fR. Its use by module
+authors is \fIstrongly discouraged\fR and should never be used lightly.
+.Sp
+For dependencies that are required in order to run \f(CW\*(C`Makefile.PL\*(C'\fR,
+see \f(CW\*(C`CONFIGURE_REQUIRES\*(C'\fR.
+.Sp
+Module installation tools have ways of resolving unmet dependencies but
+to do that they need a \fIMakefile\fR. Using \f(CW\*(C`PREREQ_FATAL\*(C'\fR breaks this.
+That's bad.
+.Sp
+Assuming you have good test coverage, your tests should fail with
+missing dependencies informing the user more strongly that something
+is wrong. You can write a \fIt/00compile.t\fR test which will simply
+check that your code compiles and stop "make test" prematurely if it
+doesn't. See "BAIL_OUT" in Test::More for more details.
+.IP PREREQ_PM 2
+.IX Item "PREREQ_PM"
+A hash of modules that are needed to run your module. The keys are
+the module names ie. Test::More, and the minimum version is the
+value. If the required version number is 0 any version will do.
+The versions given may be a Perl v\-string (see version) or a range
+(see CPAN::Meta::Requirements).
+.Sp
+This will go into the \f(CW\*(C`requires\*(C'\fR field of your \fIMETA.yml\fR and the
+\&\f(CW\*(C`runtime\*(C'\fR of the \f(CW\*(C`prereqs\*(C'\fR field of your \fIMETA.json\fR.
+.Sp
+.Vb 3
+\& PREREQ_PM => {
+\& # Require Test::More at least 0.47
+\& "Test::More" => "0.47",
+\&
+\& # Require any version of Acme::Buffy
+\& "Acme::Buffy" => 0,
+\& }
+.Ve
+.IP PREREQ_PRINT 2
+.IX Item "PREREQ_PRINT"
+Bool. If this parameter is true, the prerequisites will be printed to
+stdout and MakeMaker will exit. The output format is an evalable hash
+ref.
+.Sp
+.Vb 5
+\& $PREREQ_PM = {
+\& \*(AqA::B\*(Aq => Vers1,
+\& \*(AqC::D\*(Aq => Vers2,
+\& ...
+\& };
+.Ve
+.Sp
+If a distribution defines a minimal required perl version, this is
+added to the output as an additional line of the form:
+.Sp
+.Vb 1
+\& $MIN_PERL_VERSION = \*(Aq5.008001\*(Aq;
+.Ve
+.Sp
+If BUILD_REQUIRES is not empty, it will be dumped as \f(CW$BUILD_REQUIRES\fR hashref.
+.IP PRINT_PREREQ 2
+.IX Item "PRINT_PREREQ"
+RedHatism for \f(CW\*(C`PREREQ_PRINT\*(C'\fR. The output format is different, though:
+.Sp
+.Vb 1
+\& perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
+.Ve
+.Sp
+A minimal required perl version, if present, will look like this:
+.Sp
+.Vb 1
+\& perl(perl)>=5.008001
+.Ve
+.IP SITEPREFIX 2
+.IX Item "SITEPREFIX"
+Like PERLPREFIX, but only for the site install locations.
+.Sp
+Defaults to \f(CW$Config\fR{siteprefixexp}. Perls prior to 5.6.0 didn't have
+an explicit siteprefix in the Config. In those cases
+\&\f(CW$Config\fR{installprefix} will be used.
+.Sp
+Overridable by PREFIX
+.IP SIGN 2
+.IX Item "SIGN"
+Available in version 6.18 and above.
+.Sp
+When true, perform the generation and addition to the MANIFEST of the
+SIGNATURE file in the distdir during 'make distdir', via 'cpansign
+\&\-s'.
+.Sp
+Note that you need to install the Module::Signature module to
+perform this operation.
+.Sp
+Defaults to false.
+.IP SKIP 2
+.IX Item "SKIP"
+Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
+Makefile. Caution! Do not use the SKIP attribute for the negligible
+speedup. It may seriously damage the resulting Makefile. Only use it
+if you really need it.
+.IP TEST_REQUIRES 2
+.IX Item "TEST_REQUIRES"
+Available in version 6.64 and above.
+.Sp
+A hash of modules that are needed to test your module but not run or
+build it.
+.Sp
+This will go into the \f(CW\*(C`build_requires\*(C'\fR field of your \fIMETA.yml\fR and the \f(CW\*(C`test\*(C'\fR of the \f(CW\*(C`prereqs\*(C'\fR field of your \fIMETA.json\fR.
+.Sp
+The format is the same as PREREQ_PM.
+.IP TYPEMAPS 2
+.IX Item "TYPEMAPS"
+Ref to array of typemap file names. Use this when the typemaps are
+in some directory other than the current directory or when they are
+not named \fBtypemap\fR. The last typemap in the list takes
+precedence. A typemap in the current directory has highest
+precedence, even if it isn't listed in TYPEMAPS. The default system
+typemap has lowest precedence.
+.IP VENDORPREFIX 2
+.IX Item "VENDORPREFIX"
+Like PERLPREFIX, but only for the vendor install locations.
+.Sp
+Defaults to \f(CW$Config\fR{vendorprefixexp}.
+.Sp
+Overridable by PREFIX
+.IP VERBINST 2
+.IX Item "VERBINST"
+If true, make install will be verbose
+.IP VERSION 2
+.IX Item "VERSION"
+Your version number for distributing the package. This defaults to
+0.1.
+.IP VERSION_FROM 2
+.IX Item "VERSION_FROM"
+Instead of specifying the VERSION in the Makefile.PL you can let
+MakeMaker parse a file to determine the version number. The parsing
+routine requires that the file named by VERSION_FROM contains one
+single line to compute the version number. The first line in the file
+that contains something like a \f(CW$VERSION\fR assignment or \f(CW\*(C`package Name
+VERSION\*(C'\fR will be used. The following lines will be parsed o.k.:
+.Sp
+.Vb 7
+\& # Good
+\& package Foo::Bar 1.23; # 1.23
+\& $VERSION = \*(Aq1.00\*(Aq; # 1.00
+\& *VERSION = \e\*(Aq1.01\*(Aq; # 1.01
+\& ($VERSION) = q$Revision$ =~ /(\ed+)/g; # The digits in $Revision$
+\& $FOO::VERSION = \*(Aq1.10\*(Aq; # 1.10
+\& *FOO::VERSION = \e\*(Aq1.11\*(Aq; # 1.11
+.Ve
+.Sp
+but these will fail:
+.Sp
+.Vb 4
+\& # Bad
+\& my $VERSION = \*(Aq1.01\*(Aq;
+\& local $VERSION = \*(Aq1.02\*(Aq;
+\& local $FOO::VERSION = \*(Aq1.30\*(Aq;
+.Ve
+.Sp
+(Putting \f(CW\*(C`my\*(C'\fR or \f(CW\*(C`local\*(C'\fR on the preceding line will work o.k.)
+.Sp
+"Version strings" are incompatible and should not be used.
+.Sp
+.Vb 3
+\& # Bad
+\& $VERSION = 1.2.3;
+\& $VERSION = v1.2.3;
+.Ve
+.Sp
+version objects are fine. As of MakeMaker 6.35 version.pm will be
+automatically loaded, but you must declare the dependency on version.pm.
+For compatibility with older MakeMaker you should load on the same line
+as \f(CW$VERSION\fR is declared.
+.Sp
+.Vb 2
+\& # All on one line
+\& use version; our $VERSION = qv(1.2.3);
+.Ve
+.Sp
+The file named in VERSION_FROM is not added as a dependency to
+Makefile. This is not really correct, but it would be a major pain
+during development to have to rewrite the Makefile for any smallish
+change in that file. If you want to make sure that the Makefile
+contains the correct VERSION macro after any change of the file, you
+would have to do something like
+.Sp
+.Vb 1
+\& depend => { Makefile => \*(Aq$(VERSION_FROM)\*(Aq }
+.Ve
+.Sp
+See attribute \f(CW\*(C`depend\*(C'\fR below.
+.IP VERSION_SYM 2
+.IX Item "VERSION_SYM"
+A sanitized VERSION with . replaced by _. For places where . has
+special meaning (some filesystems, RCS labels, etc...)
+.IP XS 2
+.IX Item "XS"
+Hashref of .xs files. MakeMaker will default this. e.g.
+.Sp
+.Vb 1
+\& {\*(Aqname_of_file.xs\*(Aq => \*(Aqname_of_file.c\*(Aq}
+.Ve
+.Sp
+The .c files will automatically be included in the list of files
+deleted by a make clean.
+.IP XSBUILD 2
+.IX Item "XSBUILD"
+Available in version 7.12 and above.
+.Sp
+Hashref with options controlling the operation of \f(CW\*(C`XSMULTI\*(C'\fR:
+.Sp
+.Vb 10
+\& {
+\& xs => {
+\& all => {
+\& # options applying to all .xs files for this distribution
+\& },
+\& \*(Aqlib/Class/Name/File\*(Aq => { # specifically for this file
+\& DEFINE => \*(Aq\-Dfunktastic\*(Aq, # defines for only this file
+\& INC => "\-I$funkyliblocation", # include flags for only this file
+\& # OBJECT => \*(Aqlib/Class/Name/File$(OBJ_EXT)\*(Aq, # default
+\& LDFROM => "lib/Class/Name/File\e$(OBJ_EXT) $otherfile\e$(OBJ_EXT)", # what\*(Aqs linked
+\& },
+\& },
+\& }
+.Ve
+.Sp
+Note \f(CW\*(C`xs\*(C'\fR is the file-extension. More possibilities may arise in the
+future. Note that object names are specified without their XS extension.
+.Sp
+\&\f(CW\*(C`LDFROM\*(C'\fR defaults to the same as \f(CW\*(C`OBJECT\*(C'\fR. \f(CW\*(C`OBJECT\*(C'\fR defaults to,
+for \f(CW\*(C`XSMULTI\*(C'\fR, just the XS filename with the extension replaced with
+the compiler-specific object-file extension.
+.Sp
+The distinction between \f(CW\*(C`OBJECT\*(C'\fR and \f(CW\*(C`LDFROM\*(C'\fR: \f(CW\*(C`OBJECT\*(C'\fR is the make
+target, so make will try to build it. However, \f(CW\*(C`LDFROM\*(C'\fR is what will
+actually be linked together to make the shared object or static library
+(SO/SL), so if you override it, make sure it includes what you want to
+make the final SO/SL, almost certainly including the XS basename with
+\&\f(CW\*(C`$(OBJ_EXT)\*(C'\fR appended.
+.IP XSMULTI 2
+.IX Item "XSMULTI"
+Available in version 7.12 and above.
+.Sp
+When this is set to \f(CW1\fR, multiple XS files may be placed under \fIlib/\fR
+next to their corresponding \f(CW\*(C`*.pm\*(C'\fR files (this is essential for compiling
+with the correct \f(CW\*(C`VERSION\*(C'\fR values). This feature should be considered
+experimental, and details of it may change.
+.Sp
+This feature was inspired by, and small portions of code copied from,
+ExtUtils::MakeMaker::BigHelper. Hopefully this feature will render
+that module mainly obsolete.
+.IP XSOPT 2
+.IX Item "XSOPT"
+String of options to pass to xsubpp. This might include \f(CW\*(C`\-C++\*(C'\fR or
+\&\f(CW\*(C`\-extern\*(C'\fR. Do not include typemaps here; the TYPEMAP parameter exists for
+that purpose.
+.IP XSPROTOARG 2
+.IX Item "XSPROTOARG"
+May be set to \f(CW\*(C`\-prototypes\*(C'\fR, \f(CW\*(C`\-noprototypes\*(C'\fR or the empty string. The
+empty string is equivalent to the xsubpp default, or \f(CW\*(C`\-noprototypes\*(C'\fR.
+See the xsubpp documentation for details. MakeMaker
+defaults to the empty string.
+.IP XS_VERSION 2
+.IX Item "XS_VERSION"
+Your version number for the .xs file of this package. This defaults
+to the value of the VERSION attribute.
+.SS "Additional lowercase attributes"
+.IX Subsection "Additional lowercase attributes"
+can be used to pass parameters to the methods which implement that
+part of the Makefile. Parameters are specified as a hash ref but are
+passed to the method as a hash.
+.IP clean 2
+.IX Item "clean"
+.Vb 1
+\& {FILES => "*.xyz foo"}
+.Ve
+.IP depend 2
+.IX Item "depend"
+.Vb 1
+\& {ANY_TARGET => ANY_DEPENDENCY, ...}
+.Ve
+.Sp
+(ANY_TARGET must not be given a double-colon rule by MakeMaker.)
+.IP dist 2
+.IX Item "dist"
+.Vb 3
+\& {TARFLAGS => \*(AqcvfF\*(Aq, COMPRESS => \*(Aqgzip\*(Aq, SUFFIX => \*(Aq.gz\*(Aq,
+\& SHAR => \*(Aqshar \-m\*(Aq, DIST_CP => \*(Aqln\*(Aq, ZIP => \*(Aq/bin/zip\*(Aq,
+\& ZIPFLAGS => \*(Aq\-rl\*(Aq, DIST_DEFAULT => \*(Aqprivate tardist\*(Aq }
+.Ve
+.Sp
+If you specify COMPRESS, then SUFFIX should also be altered, as it is
+needed to tell make the target file of the compression. Setting
+DIST_CP to ln can be useful, if you need to preserve the timestamps on
+your files. DIST_CP can take the values 'cp', which copies the file,
+\&'ln', which links the file, and 'best' which copies symbolic links and
+links the rest. Default is 'best'.
+.IP dynamic_lib 2
+.IX Item "dynamic_lib"
+.Vb 1
+\& {ARMAYBE => \*(Aqar\*(Aq, OTHERLDFLAGS => \*(Aq...\*(Aq, INST_DYNAMIC_DEP => \*(Aq...\*(Aq}
+.Ve
+.IP linkext 2
+.IX Item "linkext"
+.Vb 1
+\& {LINKTYPE => \*(Aqstatic\*(Aq, \*(Aqdynamic\*(Aq or \*(Aq\*(Aq}
+.Ve
+.Sp
+NB: Extensions that have nothing but *.pm files had to say
+.Sp
+.Vb 1
+\& {LINKTYPE => \*(Aq\*(Aq}
+.Ve
+.Sp
+with Pre\-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
+can be deleted safely. MakeMaker recognizes when there's nothing to
+be linked.
+.IP macro 2
+.IX Item "macro"
+.Vb 1
+\& {ANY_MACRO => ANY_VALUE, ...}
+.Ve
+.IP postamble 2
+.IX Item "postamble"
+Anything put here will be passed to
+\&\fBMY::postamble()\fR if you have one.
+.IP realclean 2
+.IX Item "realclean"
+.Vb 1
+\& {FILES => \*(Aq$(INST_ARCHAUTODIR)/*.xyz\*(Aq}
+.Ve
+.IP test 2
+.IX Item "test"
+Specify the targets for testing.
+.Sp
+.Vb 1
+\& {TESTS => \*(Aqt/*.t\*(Aq}
+.Ve
+.Sp
+\&\f(CW\*(C`RECURSIVE_TEST_FILES\*(C'\fR can be used to include all directories
+recursively under \f(CW\*(C`t\*(C'\fR that contain \f(CW\*(C`.t\*(C'\fR files. It will be ignored if
+you provide your own \f(CW\*(C`TESTS\*(C'\fR attribute, defaults to false.
+.Sp
+.Vb 1
+\& {RECURSIVE_TEST_FILES=>1}
+.Ve
+.Sp
+This is supported since 6.76
+.IP tool_autosplit 2
+.IX Item "tool_autosplit"
+.Vb 1
+\& {MAXLEN => 8}
+.Ve
+.SS "Overriding MakeMaker Methods"
+.IX Subsection "Overriding MakeMaker Methods"
+If you cannot achieve the desired Makefile behaviour by specifying
+attributes you may define private subroutines in the Makefile.PL.
+Each subroutine returns the text it wishes to have written to
+the Makefile. To override a section of the Makefile you can
+either say:
+.PP
+.Vb 1
+\& sub MY::c_o { "new literal text" }
+.Ve
+.PP
+or you can edit the default by saying something like:
+.PP
+.Vb 6
+\& package MY; # so that "SUPER" works right
+\& sub c_o {
+\& my $inherited = shift\->SUPER::c_o(@_);
+\& $inherited =~ s/old text/new text/;
+\& $inherited;
+\& }
+.Ve
+.PP
+If you are running experiments with embedding perl as a library into
+other applications, you might find MakeMaker is not sufficient. You'd
+better have a look at ExtUtils::Embed which is a collection of utilities
+for embedding.
+.PP
+If you still need a different solution, try to develop another
+subroutine that fits your needs and submit the diffs to
+\&\f(CW\*(C`makemaker@perl.org\*(C'\fR
+.PP
+For a complete description of all MakeMaker methods see
+ExtUtils::MM_Unix.
+.PP
+Here is a simple example of how to add a new target to the generated
+Makefile:
+.PP
+.Vb 4
+\& sub MY::postamble {
+\& return <<\*(AqMAKE_FRAG\*(Aq;
+\& $(MYEXTLIB): sdbm/Makefile
+\& cd sdbm && $(MAKE) all
+\&
+\& MAKE_FRAG
+\& }
+.Ve
+.SS "The End Of Cargo Cult Programming"
+.IX Subsection "The End Of Cargo Cult Programming"
+\&\fBWriteMakefile()\fR now does some basic sanity checks on its parameters to
+protect against typos and malformatted values. This means some things
+which happened to work in the past will now throw warnings and
+possibly produce internal errors.
+.PP
+Some of the most common mistakes:
+.ie n .IP """MAN3PODS => \*(Aq \*(Aq""" 2
+.el .IP "\f(CWMAN3PODS => \*(Aq \*(Aq\fR" 2
+.IX Item "MAN3PODS => "
+This is commonly used to suppress the creation of man pages. MAN3PODS
+takes a hash ref not a string, but the above worked by accident in old
+versions of MakeMaker.
+.Sp
+The correct code is \f(CW\*(C`MAN3PODS => { }\*(C'\fR.
+.SS "Hintsfile support"
+.IX Subsection "Hintsfile support"
+MakeMaker.pm uses the architecture-specific information from
+Config.pm. In addition it evaluates architecture specific hints files
+in a \f(CW\*(C`hints/\*(C'\fR directory. The hints files are expected to be named
+like their counterparts in \f(CW\*(C`PERL_SRC/hints\*(C'\fR, but with an \f(CW\*(C`.pl\*(C'\fR file
+name extension (eg. \f(CW\*(C`next_3_2.pl\*(C'\fR). They are simply \f(CW\*(C`eval\*(C'\fRed by
+MakeMaker within the \fBWriteMakefile()\fR subroutine, and can be used to
+execute commands as well as to include special variables. The rules
+which hintsfile is chosen are the same as in Configure.
+.PP
+The hintsfile is \fBeval()\fRed immediately after the arguments given to
+WriteMakefile are stuffed into a hash reference \f(CW$self\fR but before this
+reference becomes blessed. So if you want to do the equivalent to
+override or create an attribute you would say something like
+.PP
+.Vb 1
+\& $self\->{LIBS} = [\*(Aq\-ldbm \-lucb \-lc\*(Aq];
+.Ve
+.SS "Distribution Support"
+.IX Subsection "Distribution Support"
+For authors of extensions MakeMaker provides several Makefile
+targets. Most of the support comes from the ExtUtils::Manifest module,
+where additional documentation can be found.
+.IP "make distcheck" 4
+.IX Item "make distcheck"
+reports which files are below the build directory but not in the
+MANIFEST file and vice versa. (See "fullcheck" in ExtUtils::Manifest for
+details)
+.IP "make skipcheck" 4
+.IX Item "make skipcheck"
+reports which files are skipped due to the entries in the
+\&\f(CW\*(C`MANIFEST.SKIP\*(C'\fR file (See "skipcheck" in ExtUtils::Manifest for
+details)
+.IP "make distclean" 4
+.IX Item "make distclean"
+does a realclean first and then the distcheck. Note that this is not
+needed to build a new distribution as long as you are sure that the
+MANIFEST file is ok.
+.IP "make veryclean" 4
+.IX Item "make veryclean"
+does a realclean first and then removes backup files such as \f(CW\*(C`*~\*(C'\fR,
+\&\f(CW\*(C`*.bak\*(C'\fR, \f(CW\*(C`*.old\*(C'\fR and \f(CW\*(C`*.orig\*(C'\fR
+.IP "make manifest" 4
+.IX Item "make manifest"
+rewrites the MANIFEST file, adding all remaining files found (See
+"mkmanifest" in ExtUtils::Manifest for details)
+.IP "make distdir" 4
+.IX Item "make distdir"
+Copies all the files that are in the MANIFEST file to a newly created
+directory with the name \f(CW\*(C`$(DISTNAME)\-$(VERSION)\*(C'\fR. If that directory
+exists, it will be removed first.
+.Sp
+Additionally, it will create META.yml and META.json module meta-data file
+in the distdir and add this to the distdir's MANIFEST. You can shut this
+behavior off with the NO_META flag.
+.IP "make disttest" 4
+.IX Item "make disttest"
+Makes a distdir first, and runs a \f(CW\*(C`perl Makefile.PL\*(C'\fR, a make, and
+a make test in that directory.
+.IP "make tardist" 4
+.IX Item "make tardist"
+First does a distdir. Then a command $(PREOP) which defaults to a null
+command, followed by $(TO_UNIX), which defaults to a null command under
+UNIX, and will convert files in distribution directory to UNIX format
+otherwise. Next it runs \f(CW\*(C`tar\*(C'\fR on that directory into a tarfile and
+deletes the directory. Finishes with a command $(POSTOP) which
+defaults to a null command.
+.IP "make dist" 4
+.IX Item "make dist"
+Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
+.IP "make uutardist" 4
+.IX Item "make uutardist"
+Runs a tardist first and uuencodes the tarfile.
+.IP "make shdist" 4
+.IX Item "make shdist"
+First does a distdir. Then a command $(PREOP) which defaults to a null
+command. Next it runs \f(CW\*(C`shar\*(C'\fR on that directory into a sharfile and
+deletes the intermediate directory again. Finishes with a command
+$(POSTOP) which defaults to a null command. Note: For shdist to work
+properly a \f(CW\*(C`shar\*(C'\fR program that can handle directories is mandatory.
+.IP "make zipdist" 4
+.IX Item "make zipdist"
+First does a distdir. Then a command $(PREOP) which defaults to a null
+command. Runs \f(CW\*(C`$(ZIP) $(ZIPFLAGS)\*(C'\fR on that directory into a
+zipfile. Then deletes that directory. Finishes with a command
+$(POSTOP) which defaults to a null command.
+.IP "make ci" 4
+.IX Item "make ci"
+Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
+.PP
+Customization of the dist targets can be done by specifying a hash
+reference to the dist attribute of the WriteMakefile call. The
+following parameters are recognized:
+.PP
+.Vb 12
+\& CI (\*(Aqci \-u\*(Aq)
+\& COMPRESS (\*(Aqgzip \-\-best\*(Aq)
+\& POSTOP (\*(Aq@ :\*(Aq)
+\& PREOP (\*(Aq@ :\*(Aq)
+\& TO_UNIX (depends on the system)
+\& RCS_LABEL (\*(Aqrcs \-q \-Nv$(VERSION_SYM):\*(Aq)
+\& SHAR (\*(Aqshar\*(Aq)
+\& SUFFIX (\*(Aq.gz\*(Aq)
+\& TAR (\*(Aqtar\*(Aq)
+\& TARFLAGS (\*(Aqcvf\*(Aq)
+\& ZIP (\*(Aqzip\*(Aq)
+\& ZIPFLAGS (\*(Aq\-r\*(Aq)
+.Ve
+.PP
+An example:
+.PP
+.Vb 7
+\& WriteMakefile(
+\& ...other options...
+\& dist => {
+\& COMPRESS => "bzip2",
+\& SUFFIX => ".bz2"
+\& }
+\& );
+.Ve
+.SS "Module Meta-Data (META and MYMETA)"
+.IX Subsection "Module Meta-Data (META and MYMETA)"
+Long plaguing users of MakeMaker based modules has been the problem of
+getting basic information about the module out of the sources
+\&\fIwithout\fR running the \fIMakefile.PL\fR and doing a bunch of messy
+heuristics on the resulting \fIMakefile\fR. Over the years, it has become
+standard to keep this information in one or more CPAN Meta files
+distributed with each distribution.
+.PP
+The original format of CPAN Meta files was YAML and the corresponding
+file was called \fIMETA.yml\fR. In 2010, version 2 of the CPAN::Meta::Spec
+was released, which mandates JSON format for the metadata in order to
+overcome certain compatibility issues between YAML serializers and to
+avoid breaking older clients unable to handle a new version of the spec.
+The CPAN::Meta library is now standard for accessing old and new-style
+Meta files.
+.PP
+If CPAN::Meta is installed, MakeMaker will automatically generate
+\&\fIMETA.json\fR and \fIMETA.yml\fR files for you and add them to your \fIMANIFEST\fR as
+part of the 'distdir' target (and thus the 'dist' target). This is intended to
+seamlessly and rapidly populate CPAN with module meta-data. If you wish to
+shut this feature off, set the \f(CW\*(C`NO_META\*(C'\fR \f(CWWriteMakefile()\fR flag to true.
+.PP
+At the 2008 QA Hackathon in Oslo, Perl module toolchain maintainers agreed
+to use the CPAN Meta format to communicate post-configuration requirements
+between toolchain components. These files, \fIMYMETA.json\fR and \fIMYMETA.yml\fR,
+are generated when \fIMakefile.PL\fR generates a \fIMakefile\fR (if CPAN::Meta
+is installed). Clients like CPAN or CPANPLUS will read these
+files to see what prerequisites must be fulfilled before building or testing
+the distribution. If you wish to shut this feature off, set the \f(CW\*(C`NO_MYMETA\*(C'\fR
+\&\f(CWWriteMakefile()\fR flag to true.
+.SS "Disabling an extension"
+.IX Subsection "Disabling an extension"
+If some events detected in \fIMakefile.PL\fR imply that there is no way
+to create the Module, but this is a normal state of things, then you
+can create a \fIMakefile\fR which does nothing, but succeeds on all the
+"usual" build targets. To do so, use
+.PP
+.Vb 2
+\& use ExtUtils::MakeMaker qw(WriteEmptyMakefile);
+\& WriteEmptyMakefile();
+.Ve
+.PP
+instead of \fBWriteMakefile()\fR.
+.PP
+This may be useful if other modules expect this module to be \fIbuilt\fR
+OK, as opposed to \fIwork\fR OK (say, this system-dependent module builds
+in a subdirectory of some other distribution, or is listed as a
+dependency in a CPAN::Bundle, but the functionality is supported by
+different means on the current architecture).
+.SS "Other Handy Functions"
+.IX Subsection "Other Handy Functions"
+.IP prompt 4
+.IX Item "prompt"
+.Vb 2
+\& my $value = prompt($message);
+\& my $value = prompt($message, $default);
+.Ve
+.Sp
+The \f(CWprompt()\fR function provides an easy way to request user input
+used to write a makefile. It displays the \f(CW$message\fR as a prompt for
+input. If a \f(CW$default\fR is provided it will be used as a default. The
+function returns the \f(CW$value\fR selected by the user.
+.Sp
+If \f(CWprompt()\fR detects that it is not running interactively and there
+is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
+is set to true, the \f(CW$default\fR will be used without prompting. This
+prevents automated processes from blocking on user input.
+.Sp
+If no \f(CW$default\fR is provided an empty string will be used instead.
+.IP os_unsupported 4
+.IX Item "os_unsupported"
+.Vb 2
+\& os_unsupported();
+\& os_unsupported if $^O eq \*(AqMSWin32\*(Aq;
+.Ve
+.Sp
+The \f(CWos_unsupported()\fR function provides a way to correctly exit your
+\&\f(CW\*(C`Makefile.PL\*(C'\fR before calling \f(CW\*(C`WriteMakefile\*(C'\fR. It is essentially a
+\&\f(CW\*(C`die\*(C'\fR with the message "OS unsupported".
+.Sp
+This is supported since 7.26
+.SS "Supported versions of Perl"
+.IX Subsection "Supported versions of Perl"
+Please note that while this module works on Perl 5.6, it is no longer
+being routinely tested on 5.6 \- the earliest Perl version being routinely
+tested, and expressly supported, is 5.8.1. However, patches to repair
+any breakage on 5.6 are still being accepted.
+.SH ENVIRONMENT
+.IX Header "ENVIRONMENT"
+.IP PERL_MM_OPT 4
+.IX Item "PERL_MM_OPT"
+Command line options used by \f(CW\*(C`MakeMaker\->new()\*(C'\fR, and thus by
+\&\f(CWWriteMakefile()\fR. The string is split as the shell would, and the result
+is processed before any actual command line arguments are processed.
+.Sp
+.Vb 1
+\& PERL_MM_OPT=\*(AqCCFLAGS="\-Wl,\-rpath \-Wl,/foo/bar/lib" LIBS="\-lwibble \-lwobble"\*(Aq
+.Ve
+.IP PERL_MM_USE_DEFAULT 4
+.IX Item "PERL_MM_USE_DEFAULT"
+If set to a true value then MakeMaker's prompt function will
+always return the default without waiting for user input.
+.IP PERL_CORE 4
+.IX Item "PERL_CORE"
+Same as the PERL_CORE parameter. The parameter overrides this.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+Module::Build is a pure-Perl alternative to MakeMaker which does
+not rely on make or any other external utility. It may be easier to
+extend to suit your needs.
+.PP
+Module::Build::Tiny is a minimal pure-Perl alternative to MakeMaker
+that follows the Build.PL protocol of Module::Build but without its
+complexity and cruft, implementing only the installation of the module
+and leaving authoring to mbtiny or other authoring tools.
+.PP
+Module::Install is a (now discouraged) wrapper around MakeMaker which
+adds features not normally available.
+.PP
+ExtUtils::ModuleMaker and Module::Starter are both modules to
+help you setup your distribution.
+.PP
+CPAN::Meta and CPAN::Meta::Spec explain CPAN Meta files in detail.
+.PP
+File::ShareDir::Install makes it easy to install static, sometimes
+also referred to as 'shared' files. File::ShareDir helps accessing
+the shared files after installation. Test::File::ShareDir helps when
+writing tests to use the shared files both before and after installation.
+.PP
+Dist::Zilla is an authoring tool which allows great customization and
+extensibility of the author experience, relying on the existing install
+tools like ExtUtils::MakeMaker only for installation.
+.PP
+Dist::Milla is a Dist::Zilla bundle that greatly simplifies common
+usage.
+.PP
+Minilla is a minimal authoring tool that does the same things as
+Dist::Milla without the overhead of Dist::Zilla.
+.SH AUTHORS
+.IX Header "AUTHORS"
+Andy Dougherty \f(CW\*(C`doughera@lafayette.edu\*(C'\fR, Andreas König
+\&\f(CW\*(C`andreas.koenig@mind.de\*(C'\fR, Tim Bunce \f(CW\*(C`timb@cpan.org\*(C'\fR. VMS
+support by Charles Bailey \f(CW\*(C`bailey@newman.upenn.edu\*(C'\fR. OS/2 support
+by Ilya Zakharevich \f(CW\*(C`ilya@math.ohio\-state.edu\*(C'\fR.
+.PP
+Currently maintained by Michael G Schwern \f(CW\*(C`schwern@pobox.com\*(C'\fR
+.PP
+Send patches and ideas to \f(CW\*(C`makemaker@perl.org\*(C'\fR.
+.PP
+Send bug reports via http://rt.cpan.org/. Please send your
+generated Makefile along with your report.
+.PP
+For more up-to-date information, see <https://metacpan.org/release/ExtUtils\-MakeMaker>.
+.PP
+Repository available at <https://github.com/Perl\-Toolchain\-Gang/ExtUtils\-MakeMaker>.
+.SH LICENSE
+.IX Header "LICENSE"
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+.PP
+See <http://www.perl.com/perl/misc/Artistic.html>