{
    "mode": "perldoc",
    "parameter": "ExtUtils::MakeMaker",
    "section": "",
    "url": "https://www.chedong.com/phpMan.php/perldoc/ExtUtils%3A%3AMakeMaker/json",
    "generated": "2026-08-22T16:03:37Z",
    "synopsis": "use ExtUtils::MakeMaker;\nWriteMakefile(\nNAME              => \"Foo::Bar\",\nVERSIONFROM      => \"lib/Foo/Bar.pm\",\n);",
    "sections": {
        "NAME": {
            "content": "ExtUtils::MakeMaker - Create a module Makefile\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "use ExtUtils::MakeMaker;\n\nWriteMakefile(\nNAME              => \"Foo::Bar\",\nVERSIONFROM      => \"lib/Foo/Bar.pm\",\n);\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "This utility is designed to write a Makefile for an extension module from a Makefile.PL. It is\nbased on the Makefile.SH model provided by Andy Dougherty and the perl5-porters.\n\nIt splits the task of generating the Makefile into several subroutines that can be individually\noverridden. Each subroutine returns the text it wishes to have written to the Makefile.\n\nAs there are various Make programs with incompatible syntax, which use operating system shells,\nagain with incompatible syntax, it is important for users of this module to know which flavour\nof Make a Makefile has been written for so they'll use the correct one and won't have to face\nthe possibly bewildering errors resulting from using the wrong one.\n\nOn POSIX systems, that program will likely be GNU Make; on Microsoft Windows, it will be either\nMicrosoft NMake, DMake or GNU Make. See the section on the \"MAKE\" parameter for details.\n\nExtUtils::MakeMaker (EUMM) is object oriented. Each directory below the current directory that\ncontains a Makefile.PL is treated as a separate object. This makes it possible to write an\nunlimited number of Makefiles with a single invocation of WriteMakefile().\n\nAll inputs to WriteMakefile are Unicode characters, not just octets. EUMM seeks to handle all of\nthese correctly. It is currently still not possible to portably use Unicode characters in module\nnames, because this requires Perl to handle Unicode filenames, which is not yet the case on\nWindows.\n\nSee ExtUtils::MakeMaker::FAQ for details of the design and usage.\n",
            "subsections": [
                {
                    "name": "How To Write A Makefile.PL",
                    "content": "See ExtUtils::MakeMaker::Tutorial.\n\nThe long answer is the rest of the manpage :-)\n"
                },
                {
                    "name": "Default Makefile Behaviour",
                    "content": "The generated Makefile enables the user of the extension to invoke\n\nperl Makefile.PL # optionally \"perl Makefile.PL verbose\"\nmake\nmake test        # optionally set TESTVERBOSE=1\nmake install     # See below\n\nThe Makefile to be produced may be altered by adding arguments of the form \"KEY=VALUE\". E.g.\n\nperl Makefile.PL INSTALLBASE=~\n\nOther interesting targets in the generated Makefile are\n\nmake config     # to check if the Makefile is up-to-date\nmake clean      # delete local temp files (Makefile gets renamed)\nmake realclean  # delete derived files (including ./blib)\nmake ci         # check in all the files in the MANIFEST file\nmake dist       # see below the Distribution Support section\n\nmake test\nMakeMaker checks for the existence of a file named test.pl in the current directory, and if it\nexists it executes the script with the proper set of perl \"-I\" options.\n\nMakeMaker also checks for any files matching glob(\"t/*.t\"). It will execute all matching files\nin alphabetical order via the Test::Harness module with the \"-I\" switches set correctly.\n\nYou can also organize your tests within subdirectories in the t/ directory. To do so, use the\ntest directive in your *Makefile.PL*. For example, if you had tests in:\n\nt/foo\nt/foo/bar\n\nYou could tell make to run tests in both of those directories with the following directives:\n\ntest => {TESTS => 't/*/*.t t/*/*/*.t'}\ntest => {TESTS => 't/foo/*.t t/foo/bar/*.t'}\n\nThe first will run all test files in all first-level subdirectories and all subdirectories they\ncontain. The second will run tests in only the t/foo and t/foo/bar.\n\nIf you'd like to see the raw output of your tests, set the \"TESTVERBOSE\" variable to true.\n\nmake test TESTVERBOSE=1\n\nIf you want to run particular test files, set the \"TESTFILES\" variable. It is possible to use\nglobbing with this mechanism.\n\nmake test TESTFILES='t/foobar.t t/dagobah*.t'\n\nWindows users who are using \"nmake\" should note that due to a bug in \"nmake\", when specifying\n\"TESTFILES\" you must use back-slashes instead of forward-slashes.\n\nnmake test TESTFILES='t\\foobar.t t\\dagobah*.t'\n\nmake testdb\nA useful variation of the above is the target \"testdb\". It runs the test under the Perl debugger\n(see perldebug). If the file test.pl exists in the current directory, it is used for the test.\n\nIf you want to debug some other testfile, set the \"TESTFILE\" variable thusly:\n\nmake testdb TESTFILE=t/mytest.t\n\nBy default the debugger is called using \"-d\" option to perl. If you want to specify some other\noption, set the \"TESTDBSW\" variable:\n\nmake testdb TESTDBSW=-Dx\n\nmake install\nmake alone puts all relevant files into directories that are named by the macros INSTLIB,\nINSTARCHLIB, INSTSCRIPT, INSTMAN1DIR and INSTMAN3DIR. All these default to something below\n./blib if you are *not* building below the perl source directory. If you *are* building below\nthe perl source, INSTLIB and INSTARCHLIB default to ../../lib, and INSTSCRIPT is not defined.\n\nThe *install* target of the generated Makefile copies the files found below each of the INST*\ndirectories to their INSTALL* counterparts. Which counterparts are chosen depends on the setting\nof INSTALLDIRS according to the following table:\n\nINSTALLDIRS set to\nperl        site          vendor\n\nPERLPREFIX      SITEPREFIX          VENDORPREFIX\nINSTARCHLIB   INSTALLARCHLIB  INSTALLSITEARCH     INSTALLVENDORARCH\nINSTLIB       INSTALLPRIVLIB  INSTALLSITELIB      INSTALLVENDORLIB\nINSTBIN       INSTALLBIN      INSTALLSITEBIN      INSTALLVENDORBIN\nINSTSCRIPT    INSTALLSCRIPT   INSTALLSITESCRIPT   INSTALLVENDORSCRIPT\nINSTMAN1DIR   INSTALLMAN1DIR  INSTALLSITEMAN1DIR  INSTALLVENDORMAN1DIR\nINSTMAN3DIR   INSTALLMAN3DIR  INSTALLSITEMAN3DIR  INSTALLVENDORMAN3DIR\n\nThe INSTALL... macros in turn default to their %Config ($Config{installprivlib},\n$Config{installarchlib}, etc.) counterparts.\n\nYou can check the values of these variables on your system with\n\nperl '-V:install.*'\n\nAnd to check the sequence in which the library directories are searched by perl, run\n\nperl -le 'print join $/, @INC'\n\nSometimes older versions of the module you're installing live in other directories in @INC.\nBecause Perl loads the first version of a module it finds, not the newest, you might\naccidentally get one of these older versions even after installing a brand new version. To\ndelete *all other versions of the module you're installing* (not simply older ones) set the\n\"UNINST\" variable.\n\nmake install UNINST=1\n\nINSTALLBASE\nINSTALLBASE can be passed into Makefile.PL to change where your module will be installed.\nINSTALLBASE is more like what everyone else calls \"prefix\" than PREFIX is.\n\nTo have everything installed in your home directory, do the following.\n\n# Unix users, INSTALLBASE=~ works fine\nperl Makefile.PL INSTALLBASE=/path/to/your/home/dir\n\nLike PREFIX, it sets several INSTALL* attributes at once. Unlike PREFIX it is easy to predict\nwhere the module will end up. The installation pattern looks like this:\n\nINSTALLARCHLIB     INSTALLBASE/lib/perl5/$Config{archname}\nINSTALLPRIVLIB     INSTALLBASE/lib/perl5\nINSTALLBIN         INSTALLBASE/bin\nINSTALLSCRIPT      INSTALLBASE/bin\nINSTALLMAN1DIR     INSTALLBASE/man/man1\nINSTALLMAN3DIR     INSTALLBASE/man/man3\n\nINSTALLBASE in MakeMaker and \"--installbase\" in Module::Build (as of 0.28) install to the same\nlocation. If you want MakeMaker and Module::Build to install to the same location simply set\nINSTALLBASE and \"--installbase\" to the same location.\n\nINSTALLBASE was added in 6.31.\n\nPREFIX and LIB attribute\nPREFIX and LIB can be used to set several INSTALL* attributes in one go. Here's an example for\ninstalling into your home directory.\n\n# Unix users, PREFIX=~ works fine\nperl Makefile.PL PREFIX=/path/to/your/home/dir\n\nThis will install all files in the module under your home directory, with man pages and\nlibraries going into an appropriate place (usually ~/man and ~/lib). How the exact location is\ndetermined is complicated and depends on how your Perl was configured. INSTALLBASE works more\nlike what other build systems call \"prefix\" than PREFIX and we recommend you use that instead.\n\nAnother way to specify many INSTALL directories with a single parameter is LIB.\n\nperl Makefile.PL LIB=~/lib\n\nThis will install the module's architecture-independent files into ~/lib, the\narchitecture-dependent files into ~/lib/$archname.\n\nNote, that in both cases the tilde expansion is done by MakeMaker, not by perl by default, nor\nby make.\n\nConflicts between parameters LIB, PREFIX and the various INSTALL* arguments are resolved so\nthat:\n\n*   setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSITELIB,\nINSTALLSITEARCH (and they are not affected by PREFIX);\n\n*   without LIB, setting PREFIX replaces the initial $Config{prefix} part of those INSTALL*\narguments, even if the latter are explicitly set (but are set to still start with\n$Config{prefix}).\n\nIf the user has superuser privileges, and is not working on AFS or relatives, then the defaults\nfor INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate, and this\nincantation will be the best:\n\nperl Makefile.PL;\nmake;\nmake test\nmake install\n\nmake install by default writes some documentation of what has been done into the file\n\"$(INSTALLARCHLIB)/perllocal.pod\". This feature can be bypassed by calling make pureinstall.\n\nAFS users\nwill have to specify the installation directories as these most probably have changed since perl\nitself has been installed. They will have to do this by calling\n\nperl Makefile.PL INSTALLSITELIB=/afs/here/today \\\nINSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages\nmake\n\nBe careful to repeat this procedure every time you recompile an extension, unless you are sure\nthe AFS installation directories are still valid.\n"
                },
                {
                    "name": "Static Linking of a new Perl Binary",
                    "content": "An extension that is built with the above steps is ready to use on systems supporting dynamic\nloading. On systems that do not support dynamic loading, any newly created extension has to be\nlinked together with the available resources. MakeMaker supports the linking process by creating\nappropriate targets in the Makefile whenever an extension is built. You can invoke the\ncorresponding section of the makefile with\n\nmake perl\n\nThat produces a new perl binary in the current directory with all extensions linked in that can\nbe found in INSTARCHLIB, SITELIBEXP, and PERLARCHLIB. To do that, MakeMaker writes a new\nMakefile, on UNIX, this is called Makefile.aperl (may be system dependent). If you want to force\nthe creation of a new perl, it is recommended that you delete this Makefile.aperl, so the\ndirectories are searched through for linkable libraries again.\n\nThe binary can be installed into the directory where perl normally resides on your machine with\n\nmake instperl\n\nTo produce a perl binary with a different name than \"perl\", either say\n\nperl Makefile.PL MAPTARGET=myperl\nmake myperl\nmake instperl\n\nor say\n\nperl Makefile.PL\nmake myperl MAPTARGET=myperl\nmake instperl MAPTARGET=myperl\n\nIn any case you will be prompted with the correct invocation of the \"instperl\" target that\ninstalls the new binary into INSTALLBIN.\n\nmake instperl by default writes some documentation of what has been done into the file\n\"$(INSTALLARCHLIB)/perllocal.pod\". This can be bypassed by calling make pureinstperl.\n\nWarning: the instperl: target will most probably overwrite your existing perl binary. Use with\ncare!\n\nSometimes you might want to build a statically linked perl although your system supports dynamic\nloading. In this case you may explicitly set the linktype with the invocation of the Makefile.PL\nor make:\n\nperl Makefile.PL LINKTYPE=static    # recommended\n\nor\n\nmake LINKTYPE=static                # works on most systems\n"
                },
                {
                    "name": "Determination of Perl Library and Installation Locations",
                    "content": "MakeMaker needs to know, or to guess, where certain things are located. Especially INSTLIB and\nINSTARCHLIB (where to put the files during the make(1) run), PERLLIB and PERLARCHLIB (where\nto read existing modules from), and PERLINC (header files and \"libperl*.*\").\n\nExtensions may be built either using the contents of the perl source directory tree or from the\ninstalled perl library. The recommended way is to build extensions after you have run 'make\ninstall' on perl itself. You can do that in any directory on your hard disk that is not below\nthe perl source tree. The support for extensions below the ext directory of the perl\ndistribution is only good for the standard extensions that come with perl.\n\nIf an extension is being built below the \"ext/\" directory of the perl source then MakeMaker will\nset PERLSRC automatically (e.g., \"../..\"). If PERLSRC is defined and the extension is\nrecognized as a standard extension, then other variables default to the following:\n\nPERLINC     = PERLSRC\nPERLLIB     = PERLSRC/lib\nPERLARCHLIB = PERLSRC/lib\nINSTLIB     = PERLLIB\nINSTARCHLIB = PERLARCHLIB\n\nIf an extension is being built away from the perl source then MakeMaker will leave PERLSRC\nundefined and default to using the installed copy of the perl library. The other variables\ndefault to the following:\n\nPERLINC     = $archlibexp/CORE\nPERLLIB     = $privlibexp\nPERLARCHLIB = $archlibexp\nINSTLIB     = ./blib/lib\nINSTARCHLIB = ./blib/arch\n\nIf perl has not yet been installed then PERLSRC can be defined on the command line as shown in\nthe previous section.\n\nWhich architecture dependent directory?\nIf you don't want to keep the defaults for the INSTALL* macros, MakeMaker helps you to minimize\nthe typing needed: the usual relationship between INSTALLPRIVLIB and INSTALLARCHLIB is\ndetermined by Configure at perl compilation time. MakeMaker supports the user who sets\nINSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not, then MakeMaker defaults the\nlatter to be the same subdirectory of INSTALLPRIVLIB as Configure decided for the counterparts\nin %Config, otherwise it defaults to INSTALLPRIVLIB. The same relationship holds for\nINSTALLSITELIB and INSTALLSITEARCH.\n\nMakeMaker gives you much more freedom than needed to configure internal variables and get\ndifferent results. It is worth mentioning that make(1) also lets you configure most of the\nvariables that are used in the Makefile. But in the majority of situations this will not be\nnecessary, and should only be done if the author of a package recommends it (or you know what\nyou're doing).\n"
                },
                {
                    "name": "Using Attributes and Parameters",
                    "content": "The following attributes may be specified as arguments to WriteMakefile() or as NAME=VALUE pairs\non the command line. Attributes that became available with later versions of MakeMaker are\nindicated.\n\nIn order to maintain portability of attributes with older versions of MakeMaker you may want to\nuse App::EUMM::Upgrade with your \"Makefile.PL\".\n\nABSTRACT\nOne line description of the module. Will be included in PPD file.\n\nABSTRACTFROM\nName of the file that contains the package description. MakeMaker looks for a line in the POD\nmatching /^($package\\s-\\s)(.*)/. This is typically the first line in the \"=head1 NAME\"\nsection. $2 becomes the abstract.\n\nAUTHOR\nArray of strings containing name (and email address) of package author(s). Is used in CPAN\nMeta files (META.yml or META.json) and PPD (Perl Package Description) files for PPM (Perl\nPackage Manager).\n\nBINARYLOCATION\nUsed when creating PPD files for binary packages. It can be set to a full or relative path or\nURL to the binary archive for a particular architecture. For example:\n\nperl Makefile.PL BINARYLOCATION=x86/Agent.tar.gz\n\nbuilds a PPD package that references a binary of the \"Agent\" package, located in the \"x86\"\ndirectory relative to the PPD itself.\n\nBUILDREQUIRES\nAvailable in version 6.5503 and above.\n\nA hash of modules that are needed to build your module but not run it.\n\nThis will go into the \"buildrequires\" field of your META.yml and the \"build\" of the \"prereqs\"\nfield of your META.json.\n\nDefaults to \"{ \"ExtUtils::MakeMaker\" => 0 }\" if this attribute is not specified.\n\nThe format is the same as PREREQPM.\n\nC Ref to array of *.c file names. Initialised from a directory scan and the values portion of\nthe XS attribute hash. This is not currently used by MakeMaker but may be handy in\nMakefile.PLs.\n\nCCFLAGS\nString that will be included in the compiler call command line between the arguments INC and\nOPTIMIZE. Note that setting this will overwrite its default value ($Config::Config{ccflags});\nto preserve that, include the default value directly, e.g.:\n\nCCFLAGS => \"$Config::Config{ccflags} ...\"\n\nThe default value is taken from $Config{ccflags}. When overriding CCFLAGS, make sure to\ninclude the $Config{ccflags} settings to avoid binary incompatibilities.\n\nCONFIG\nArrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from config.sh. MakeMaker will\nadd to CONFIG the following values anyway: ar cc cccdlflags ccdlflags cpprun dlext dlsrc ld\nlddlflags ldflags libc libext objext ranlib sitelibexp sitearchexp so\n\nCONFIGURE\nCODE reference. The subroutine should return a hash reference. The hash may contain further\nattributes, e.g. {LIBS => ...}, that have to be determined by some evaluation method.\n\nCONFIGUREREQUIRES\nAvailable in version 6.52 and above.\n\nA hash of modules that are required to run Makefile.PL itself, but not to run your\ndistribution.\n\nThis will go into the \"configurerequires\" field of your META.yml and the \"configure\" of the\n\"prereqs\" field of your META.json.\n\nDefaults to \"{ \"ExtUtils::MakeMaker\" => 0 }\" if this attribute is not specified.\n\nThe format is the same as PREREQPM.\n\nDEFINE\nSomething like \"-DHAVEUNISTDH\"\n\nDESTDIR\nThis is the root directory into which the code will be installed. It *prepends itself to the\nnormal prefix*. For example, if your code would normally go into /usr/local/lib/perl you could\nset DESTDIR=~/tmp/ and installation would go into ~/tmp/usr/local/lib/perl.\n\nThis is primarily of use for people who repackage Perl modules.\n\nNOTE: Due to the nature of make, it is important that you put the trailing slash on your\nDESTDIR. ~/tmp/ not ~/tmp.\n\nDIR\nRef to array of subdirectories containing Makefile.PLs e.g. ['sdbm'] in ext/SDBMFile\n\nDISTNAME\nA safe filename for the package.\n\nDefaults to NAME below but with :: replaced with -.\n\nFor example, Foo::Bar becomes Foo-Bar.\n\nDISTVNAME\nYour name for distributing the package with the version number included. This is used by 'make\ndist' to name the resulting archive file.\n\nDefaults to DISTNAME-VERSION.\n\nFor example, version 1.04 of Foo::Bar becomes Foo-Bar-1.04.\n\nOn some OS's where . has special meaning VERSIONSYM may be used in place of VERSION.\n\nDLEXT\nSpecifies the extension of the module's loadable object. For example:\n\nDLEXT => 'unusualext', # Default value is $Config{so}\n\nNOTE: When using this option to alter the extension of a module's loadable object, it is also\nnecessary that the module's pm file specifies the same change:\n\nlocal $DynaLoader::dldlext = 'unusualext';\n\nDLFUNCS\nHashref of symbol names for routines to be made available as universal symbols. Each key/value\npair consists of the package name and an array of routine names in that package. Used only\nunder AIX, OS/2, VMS and Win32 at present. The routine names supplied will be expanded in the\nsame way as XSUB names are expanded by the XS() macro. Defaults to\n\n{\"$(NAME)\" => [\"boot$(NAME)\" ] }\n\ne.g.\n\n{\"RPC\" => [qw( bootrpcb rpcbgettime getnetconfigent )],\n\"NetconfigPtr\" => [ 'DESTROY'] }\n\nPlease see the ExtUtils::Mksymlists documentation for more information about the DLFUNCS,\nDLVARS and FUNCLIST attributes.\n\nDLVARS\nArray of symbol names for variables to be made available as universal symbols. Used only under\nAIX, OS/2, VMS and Win32 at present. Defaults to []. (e.g. [ qw(Fooversion Foonumstreams\nFootree ) ])\n\nEXCLUDEEXT\nArray of extension names to exclude when doing a static build. This is ignored if INCLUDEEXT\nis present. Consult INCLUDEEXT for more details. (e.g. [ qw( Socket POSIX ) ] )\n\nThis attribute may be most useful when specified as a string on the command line: perl\nMakefile.PL EXCLUDEEXT='Socket Safe'\n\nEXEFILES\nRef to array of executable files. The files will be copied to the INSTSCRIPT directory. Make\nrealclean will delete them from there again.\n\nIf your executables start with something like #!perl or #!/usr/bin/perl MakeMaker will change\nthis to the path of the perl 'Makefile.PL' was invoked with so the programs will be sure to\nrun properly even if perl is not in /usr/bin/perl.\n\nFIRSTMAKEFILE\nThe name of the Makefile to be produced. This is used for the second Makefile that will be\nproduced for the MAPTARGET.\n\nDefaults to 'Makefile' or 'Descrip.MMS' on VMS.\n\n(Note: we couldn't use MAKEFILE because dmake uses this for something else).\n\nFULLPERL\nPerl binary able to run this extension, load XS modules, etc...\n\nFULLPERLRUN\nLike PERLRUN, except it uses FULLPERL.\n\nFULLPERLRUNINST\nLike PERLRUNINST, except it uses FULLPERL.\n\nFUNCLIST\nThis provides an alternate means to specify function names to be exported from the extension.\nIts value is a reference to an array of function names to be exported by the extension. These\nnames are passed through unaltered to the linker options file.\n\nH Ref to array of *.h file names. Similar to C.\n\nIMPORTS\nThis attribute is used to specify names to be imported into the extension. Takes a hash ref.\n\nIt is only used on OS/2 and Win32.\n\nINC\nInclude file dirs eg: \"-I/usr/5include -I/path/to/inc\"\n\nINCLUDEEXT\nArray of extension names to be included when doing a static build. MakeMaker will normally\nbuild with all of the installed extensions when doing a static build, and that is usually the\ndesired behavior. If INCLUDEEXT is present then MakeMaker will build only with those\nextensions which are explicitly mentioned. (e.g. [ qw( Socket POSIX ) ])\n\nIt is not necessary to mention DynaLoader or the current extension when filling in\nINCLUDEEXT. If the INCLUDEEXT is mentioned but is empty then only DynaLoader and the current\nextension will be included in the build.\n\nThis attribute may be most useful when specified as a string on the command line: perl\nMakefile.PL INCLUDEEXT='POSIX Socket Devel::Peek'\n\nINSTALLARCHLIB\nUsed by 'make install', which copies files from INSTARCHLIB to this directory if INSTALLDIRS\nis set to perl.\n\nINSTALLBIN\nDirectory to install binary files (e.g. tkperl) into if INSTALLDIRS=perl.\n\nINSTALLDIRS\nDetermines which of the sets of installation directories to choose: perl, site or vendor.\nDefaults to site.\n\nINSTALLMAN1DIR\nINSTALLMAN3DIR\nThese directories get the man pages at 'make install' time if INSTALLDIRS=perl. Defaults to\n$Config{installman*dir}.\n\nIf set to 'none', no man pages will be installed.\n\nINSTALLPRIVLIB\nUsed by 'make install', which copies files from INSTLIB to this directory if INSTALLDIRS is\nset to perl.\n\nDefaults to $Config{installprivlib}.\n\nINSTALLSCRIPT\nAvailable in version 6.3002 and above.\n\nUsed by 'make install' which copies files from INSTSCRIPT to this directory if\nINSTALLDIRS=perl.\n\nINSTALLSITEARCH\nUsed by 'make install', which copies files from INSTARCHLIB to this directory if INSTALLDIRS\nis set to site (default).\n\nINSTALLSITEBIN\nUsed by 'make install', which copies files from INSTBIN to this directory if INSTALLDIRS is\nset to site (default).\n\nINSTALLSITELIB\nUsed by 'make install', which copies files from INSTLIB to this directory if INSTALLDIRS is\nset to site (default).\n\nINSTALLSITEMAN1DIR\nINSTALLSITEMAN3DIR\nThese directories get the man pages at 'make install' time if INSTALLDIRS=site (default).\nDefaults to $(SITEPREFIX)/man/man$(MAN*EXT).\n\nIf set to 'none', no man pages will be installed.\n\nINSTALLSITESCRIPT\nUsed by 'make install' which copies files from INSTSCRIPT to this directory if INSTALLDIRS is\nset to site (default).\n\nINSTALLVENDORARCH\nUsed by 'make install', which copies files from INSTARCHLIB to this directory if INSTALLDIRS\nis set to vendor. Note that if you do not set this, the value of INSTALLVENDORLIB will be\nused, which is probably not what you want.\n\nINSTALLVENDORBIN\nUsed by 'make install', which copies files from INSTBIN to this directory if INSTALLDIRS is\nset to vendor.\n\nINSTALLVENDORLIB\nUsed by 'make install', which copies files from INSTLIB to this directory if INSTALLDIRS is\nset to vendor.\n\nINSTALLVENDORMAN1DIR\nINSTALLVENDORMAN3DIR\nThese directories get the man pages at 'make install' time if INSTALLDIRS=vendor. Defaults to\n$(VENDORPREFIX)/man/man$(MAN*EXT).\n\nIf set to 'none', no man pages will be installed.\n\nINSTALLVENDORSCRIPT\nAvailable in version 6.3002 and above.\n\nUsed by 'make install' which copies files from INSTSCRIPT to this directory if INSTALLDIRS is\nset to vendor.\n\nINSTARCHLIB\nSame as INSTLIB for architecture dependent files.\n\nINSTBIN\nDirectory to put real binary files during 'make'. These will be copied to INSTALLBIN during\n'make install'\n\nINSTLIB\nDirectory where we put library files of this extension while building it.\n\nINSTMAN1DIR\nDirectory to hold the man pages at 'make' time\n\nINSTMAN3DIR\nDirectory to hold the man pages at 'make' time\n\nINSTSCRIPT\nDirectory where executable files should be installed during 'make'. Defaults to\n\"./blib/script\", just to have a dummy location during testing. make install will copy the\nfiles in INSTSCRIPT to INSTALLSCRIPT.\n\nLD\nProgram to be used to link libraries for dynamic loading.\n\nDefaults to $Config{ld}.\n\nLDDLFLAGS\nAny special flags that might need to be passed to ld to create a shared library suitable for\ndynamic loading. It is up to the makefile to use it. (See \"lddlflags\" in Config)\n\nDefaults to $Config{lddlflags}.\n\nLDFROM\nDefaults to \"$(OBJECT)\" and is used in the ld command to specify what files to link/load from\n(also see dynamiclib below for how to specify ld flags)\n\nLIB\nLIB should only be set at \"perl Makefile.PL\" time but is allowed as a MakeMaker argument. It\nhas the effect of setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless any\nexplicit setting of those arguments (or of PREFIX). INSTALLARCHLIB and INSTALLSITEARCH are set\nto the corresponding architecture subdirectory.\n\nLIBPERLA\nThe filename of the perllibrary that will be used together with this extension. Defaults to\nlibperl.a.\n\nLIBS\nAn anonymous array of alternative library specifications to be searched for (in order) until\nat least one library is found. E.g.\n\n'LIBS' => [\"-lgdbm\", \"-ldbm -lfoo\", \"-L/path -ldbm.nfs\"]\n\nMind, that any element of the array contains a complete set of arguments for the ld command.\nSo do not specify\n\n'LIBS' => [\"-ltcl\", \"-ltk\", \"-lX11\"]\n\nSee ODBMFile/Makefile.PL for an example, where an array is needed. If you specify a scalar as\nin\n\n'LIBS' => \"-ltcl -ltk -lX11\"\n\nMakeMaker will turn it into an array with one element.\n\nLICENSE\nAvailable in version 6.31 and above.\n\nThe licensing terms of your distribution. Generally it's \"perl5\" for the same license as Perl\nitself.\n\nSee CPAN::Meta::Spec for the list of options.\n\nDefaults to \"unknown\".\n\nLINKTYPE\n'static' or 'dynamic' (default unless usedl=undef in config.sh). Should only be used to force\nstatic linking (also see linkext below).\n\nMAGICXS\nAvailable in version 6.8305 and above.\n\nWhen this is set to 1, \"OBJECT\" will be automagically derived from \"OFILES\".\n\nMAKE\nAvailable in version 6.3001 and above.\n\nVariant of make you intend to run the generated Makefile with. This parameter lets Makefile.PL\nknow what make quirks to account for when generating the Makefile.\n\nMakeMaker also honors the MAKE environment variable. This parameter takes precedence.\n\nCurrently the only significant values are 'dmake' and 'nmake' for Windows users, instructing\nMakeMaker to generate a Makefile in the flavour of DMake (\"Dennis Vadura's Make\") or Microsoft\nNMake respectively.\n\nDefaults to $Config{make}, which may go looking for a Make program in your environment.\n\nHow are you supposed to know what flavour of Make a Makefile has been generated for if you\ndidn't specify a value explicitly? Search the generated Makefile for the definition of the\nMAKE variable, which is used to recursively invoke the Make utility. That will tell you what\nMake you're supposed to invoke the Makefile with.\n\nMAKEAPERL\nBoolean which tells MakeMaker that it should include the rules to make a perl. This is handled\nautomatically as a switch by MakeMaker. The user normally does not need it.\n\nMAKEFILEOLD\nWhen 'make clean' or similar is run, the $(FIRSTMAKEFILE) will be backed up at this location.\n\nDefaults to $(FIRSTMAKEFILE).old or $(FIRSTMAKEFILE)old on VMS.\n\nMAN1PODS\nHashref of pod-containing files. MakeMaker will default this to all EXEFILES files that\ninclude POD directives. The files listed here will be converted to man pages and installed as\nwas requested at Configure time.\n\nThis hash should map POD files (or scripts containing POD) to the man file names under the\n\"blib/man1/\" directory, as in the following example:\n\nMAN1PODS            => {\n'doc/command.pod'    => 'blib/man1/command.1',\n'scripts/script.pl'  => 'blib/man1/script.1',\n}\n\nMAN3PODS\nHashref that assigns to *.pm and *.pod files the files into which the manpages are to be\nwritten. MakeMaker parses all *.pod and *.pm files for POD directives. Files that contain POD\nwill be the default keys of the MAN3PODS hashref. These will then be converted to man pages\nduring \"make\" and will be installed during \"make install\".\n\nExample similar to MAN1PODS.\n\nMAPTARGET\nIf it is intended that a new perl binary be produced, this variable may hold a name for that\nbinary. Defaults to perl\n\nMETAADD\nMETAMERGE\nAvailable in version 6.46 and above.\n\nA hashref of items to add to the CPAN Meta file (META.yml or META.json).\n\nThey differ in how they behave if they have the same key as the default metadata. METAADD\nwill override the default value with its own. METAMERGE will merge its value with the\ndefault.\n\nUnless you want to override the defaults, prefer METAMERGE so as to get the advantage of any\nfuture defaults.\n\nWhere prereqs are concerned, if METAMERGE is used, prerequisites are merged with their\ncounterpart WriteMakefile() argument (PREREQPM is merged into {prereqs}{runtime}{requires},\nBUILDREQUIRES into \"{prereqs}{build}{requires}\", CONFIGUREREQUIRES into\n\"{prereqs}{configure}{requires}\", and TESTREQUIRES into \"{prereqs}{test}{requires})\". When\nprereqs are specified with METAADD, the only prerequisites added to the file come from the\nmetadata, not WriteMakefile() arguments.\n\nNote that these configuration options are only used for generating META.yml and META.json --\nthey are NOT used for MYMETA.yml and MYMETA.json. Therefore data in these fields should NOT be\nused for dynamic (user-side) configuration.\n\nBy default CPAN Meta specification 1.4 is used. In order to use CPAN Meta specification 2.0,\nindicate with \"meta-spec\" the version you want to use.\n\nMETAMERGE        => {\n\n\"meta-spec\" => { version => 2 },\n\nresources => {\n\nrepository => {\ntype => 'git',\nurl => 'git://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker.git',\nweb => 'https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker',\n},\n\n},\n\n},\n\nMINPERLVERSION\nAvailable in version 6.48 and above.\n\nThe minimum required version of Perl for this distribution.\n\nEither the 5.006001 or the 5.6.1 format is acceptable.\n\nMYEXTLIB\nIf the extension links to a library that it builds, set this to the name of the library (see\nSDBMFile)\n\nNAME\nThe package representing the distribution. For example, \"Test::More\" or \"ExtUtils::MakeMaker\".\nIt will be used to derive information about the distribution such as the \"DISTNAME\",\ninstallation locations within the Perl library and where XS files will be looked for by\ndefault (see \"XS\").\n\n\"NAME\" *must* be a valid Perl package name and it *must* have an associated \".pm\" file. For\nexample, \"Foo::Bar\" is a valid \"NAME\" and there must exist Foo/Bar.pm. Any XS code should be\nin Bar.xs unless stated otherwise.\n\nYour distribution must have a \"NAME\".\n\nNEEDSLINKING\nMakeMaker will figure out if an extension contains linkable code anywhere down the directory\ntree, and will set this variable accordingly, but you can speed it up a very little bit if you\ndefine this boolean variable yourself.\n\nNOECHO\nCommand so make does not print the literal commands it's running.\n\nBy setting it to an empty string you can generate a Makefile that prints all commands. Mainly\nused in debugging MakeMaker itself.\n\nDefaults to \"@\".\n\nNORECURS\nBoolean. Attribute to inhibit descending into subdirectories.\n\nNOMETA\nWhen true, suppresses the generation and addition to the MANIFEST of the META.yml and\nMETA.json module meta-data files during 'make distdir'.\n\nDefaults to false.\n\nNOMYMETA\nAvailable in version 6.5702 and above.\n\nWhen true, suppresses the generation of MYMETA.yml and MYMETA.json module meta-data files\nduring 'perl Makefile.PL'.\n\nDefaults to false.\n\nNOPACKLIST\nAvailable in version 6.7501 and above.\n\nWhen true, suppresses the writing of \"packlist\" files for installs.\n\nDefaults to false.\n\nNOPERLLOCAL\nAvailable in version 6.7501 and above.\n\nWhen true, suppresses the appending of installations to \"perllocal\".\n\nDefaults to false.\n\nNOVC\nIn general, any generated Makefile checks for the current version of MakeMaker and the version\nthe Makefile was built under. If NOVC is set, the version check is neglected. Do not write\nthis into your Makefile.PL, use it interactively instead.\n\nOBJECT\nList of object files, defaults to '$(BASEEXT)$(OBJEXT)', but can be a long string or an array\ncontaining all object files, e.g. \"tkpBind.o tkpButton.o tkpCanvas.o\" or [\"tkpBind.o\",\n\"tkpButton.o\", \"tkpCanvas.o\"]\n\n(Where BASEEXT is the last component of NAME, and OBJEXT is $Config{objext}.)\n\nOPTIMIZE\nDefaults to \"-O\". Set it to \"-g\" to turn debugging on. The flag is passed to subdirectory\nmakes.\n\nPERL\nPerl binary for tasks that can be done by miniperl. If it contains spaces or other shell\nmetacharacters, it needs to be quoted in a way that protects them, since this value is\nintended to be inserted in a shell command line in the Makefile. E.g.:\n\n# Perl executable lives in \"C:/Program Files/Perl/bin\"\n# Normally you don't need to set this yourself!\n$ perl Makefile.PL PERL='\"C:/Program Files/Perl/bin/perl.exe\" -w'\n\nPERLCORE\nSet only when MakeMaker is building the extensions of the Perl core distribution.\n\nPERLMAINCC\nThe call to the program that is able to compile perlmain.c. Defaults to $(CC).\n\nPERLARCHLIB\nSame as for PERLLIB, but for architecture dependent files.\n\nUsed only when MakeMaker is building the extensions of the Perl core distribution (because\nnormally $(PERLARCHLIB) is automatically in @INC, and adding it would get in the way of\nPERL5LIB).\n\nPERLLIB\nDirectory containing the Perl library to use.\n\nUsed only when MakeMaker is building the extensions of the Perl core distribution (because\nnormally $(PERLLIB) is automatically in @INC, and adding it would get in the way of\nPERL5LIB).\n\nPERLMALLOCOK\ndefaults to 0. Should be set to TRUE if the extension can work with the memory allocation\nroutines substituted by the Perl malloc() subsystem. This should be applicable to most\nextensions with exceptions of those\n\n*   with bugs in memory allocations which are caught by Perl's malloc();\n\n*   which interact with the memory allocator in other ways than via malloc(), realloc(),\nfree(), calloc(), sbrk() and brk();\n\n*   which rely on special alignment which is not provided by Perl's malloc().\n\nNOTE. Neglecting to set this flag in *any one* of the loaded extension nullifies many\nadvantages of Perl's malloc(), such as better usage of system resources, error detection,\nmemory usage reporting, catchable failure of memory allocations, etc.\n\nPERLPREFIX\nDirectory under which core modules are to be installed.\n\nDefaults to $Config{installprefixexp}, falling back to $Config{installprefix},\n$Config{prefixexp} or $Config{prefix} should $Config{installprefixexp} not exist.\n\nOverridden by PREFIX.\n\nPERLRUN\nUse this instead of $(PERL) when you wish to run perl. It will set up extra necessary flags\nfor you.\n\nPERLRUNINST\nUse this instead of $(PERL) when you wish to run perl to work with modules. It will add things\nlike -I$(INSTARCH) and other necessary flags so perl can see the modules you're about to\ninstall.\n\nPERLSRC\nDirectory containing the Perl source code (use of this should be avoided, it may be undefined)\n\nPERMDIR\nAvailable in version 6.5101 and above.\n\nDesired permission for directories. Defaults to 755.\n\nPERMRW\nDesired permission for read/writable files. Defaults to 644.\n\nPERMRWX\nDesired permission for executable files. Defaults to 755.\n\nPLFILES\nMakeMaker can run programs to generate files for you at build time. By default any file named\n*.PL (except Makefile.PL and Build.PL) in the top level directory will be assumed to be a Perl\nprogram and run passing its own basename in as an argument. This basename is actually a build\ntarget, and there is an intention, but not a requirement, that the *.PL file make the file\npassed to to as an argument. For example...\n\nperl foo.PL foo\n\nThis behavior can be overridden by supplying your own set of files to search. PLFILES accepts\na hash ref, the key being the file to run and the value is passed in as the first argument\nwhen the PL file is run.\n\nPLFILES => {'bin/foobar.PL' => 'bin/foobar'}\n\nPLFILES => {'foo.PL' => 'foo.c'}\n\nWould run bin/foobar.PL like this:\n\nperl bin/foobar.PL bin/foobar\n\nIf multiple files from one program are desired an array ref can be used.\n\nPLFILES => {'bin/foobar.PL' => [qw(bin/foobar1 bin/foobar2)]}\n\nIn this case the program will be run multiple times using each target file.\n\nperl bin/foobar.PL bin/foobar1\nperl bin/foobar.PL bin/foobar2\n\nIf an output file depends on extra input files beside the script itself, a hash ref can be\nused in version 7.36 and above:\n\nPLFILES => { 'foo.PL' => {\n'foo.out' => 'foo.in',\n'bar.out' => [qw(bar1.in bar2.in)],\n}\n\nIn this case the extra input files will be passed to the program after the target file:\n\nperl foo.PL foo.out foo.in\nperl foo.PL bar.out bar1.in bar2.in\n\nPL files are normally run after pmtoblib and include INSTLIB and INSTARCH in their @INC,\nso the just built modules can be accessed... unless the PL file is making a module (or\nanything else in PM) in which case it is run before pmtoblib and does not include INSTLIB\nand INSTARCH in its @INC. This apparently odd behavior is there for backwards compatibility\n(and it's somewhat DWIM). The argument passed to the .PL is set up as a target to build in the\nMakefile. In other sections such as \"postamble\" you can specify a dependency on the\nfilename/argument that the .PL is supposed (or will have, now that that is is a dependency) to\ngenerate. Note the file to be generated will still be generated and the .PL will still run\neven without an explicit dependency created by you, since the \"all\" target still depends on\nrunning all eligible to run.PL files.\n\nPM\nHashref of .pm files and *.pl files to be installed. e.g.\n\n{'nameoffile.pm' => '$(INSTLIB)/installas.pm'}\n\nBy default this will include *.pm and *.pl and the files found in the PMLIBDIRS directories.\nDefining PM in the Makefile.PL will override PMLIBDIRS.\n\nPMLIBDIRS\nRef to array of subdirectories containing library files. Defaults to [ 'lib', $(BASEEXT) ].\nThe directories will be scanned and *any* files they contain will be installed in the\ncorresponding location in the library. A libscan() method can be used to alter the behaviour.\nDefining PM in the Makefile.PL will override PMLIBDIRS.\n\n(Where BASEEXT is the last component of NAME.)\n\nPMFILTER\nA filter program, in the traditional Unix sense (input from stdin, output to stdout) that is\npassed on each .pm file during the build (in the pmtoblib() phase). It is empty by default,\nmeaning no filtering is done. You could use:\n\nPMFILTER => 'perl -ne \"print unless /^\\\\#/\"',\n\nto remove all the leading comments on the fly during the build. In order to be as portable as\npossible, please consider using a Perl one-liner rather than Unix (or other) utilities, as\nabove. The # is escaped for the Makefile, since what is going to be generated will then be:\n\nPMFILTER = perl -ne \"print unless /^\\#/\"\n\nWithout the \\ before the #, we'd have the start of a Makefile comment, and the macro would be\nincorrectly defined.\n\nYou will almost certainly be better off using the \"PLFILES\" system, instead. See above, or\nthe ExtUtils::MakeMaker::FAQ entry.\n\nPOLLUTE\nPrior to 5.6 various interpreter variables were available without a \"PL\" prefix, eg.\n\"PLundef\" was available as \"undef\". As of release 5.6, these are only defined if the POLLUTE\nflag is enabled:\n\nperl Makefile.PL POLLUTE=1\n\nPlease inform the module author if this is necessary to successfully install a module under\n5.6 or later.\n\nPPMINSTALLEXEC\nName of the executable used to run \"PPMINSTALLSCRIPT\" below. (e.g. perl)\n\nPPMINSTALLSCRIPT\nName of the script that gets executed by the Perl Package Manager after the installation of a\npackage.\n\nPPMUNINSTALLEXEC\nAvailable in version 6.8502 and above.\n\nName of the executable used to run \"PPMUNINSTALLSCRIPT\" below. (e.g. perl)\n\nPPMUNINSTALLSCRIPT\nAvailable in version 6.8502 and above.\n\nName of the script that gets executed by the Perl Package Manager before the removal of a\npackage.\n\nPREFIX\nThis overrides all the default install locations. Man pages, libraries, scripts, etc...\nMakeMaker will try to make an educated guess about where to place things under the new PREFIX\nbased on your Config defaults. Failing that, it will fall back to a structure which should be\nsensible for your platform.\n\nIf you specify LIB or any INSTALL* variables they will not be affected by the PREFIX.\n\nPREREQFATAL\nBool. If this parameter is true, failing to have the required modules (or the right versions\nthereof) will be fatal. \"perl Makefile.PL\" will \"die\" instead of simply informing the user of\nthe missing dependencies.\n\nIt is *extremely* rare to have to use \"PREREQFATAL\". Its use by module authors is *strongly\ndiscouraged* and should never be used lightly.\n\nFor dependencies that are required in order to run \"Makefile.PL\", see \"CONFIGUREREQUIRES\".\n\nModule installation tools have ways of resolving unmet dependencies but to do that they need a\nMakefile. Using \"PREREQFATAL\" breaks this. That's bad.\n\nAssuming you have good test coverage, your tests should fail with missing dependencies\ninforming the user more strongly that something is wrong. You can write a t/00compile.t test\nwhich will simply check that your code compiles and stop \"make test\" prematurely if it\ndoesn't. See \"BAILOUT\" in Test::More for more details.\n\nPREREQPM\nA hash of modules that are needed to run your module. The keys are the module names ie.\nTest::More, and the minimum version is the value. If the required version number is 0 any\nversion will do. The versions given may be a Perl v-string (see version) or a range (see\nCPAN::Meta::Requirements).\n\nThis will go into the \"requires\" field of your META.yml and the \"runtime\" of the \"prereqs\"\nfield of your META.json.\n\nPREREQPM => {\n# Require Test::More at least 0.47\n\"Test::More\" => \"0.47\",\n\n# Require any version of Acme::Buffy\n\"Acme::Buffy\" => 0,\n}\n\nPREREQPRINT\nBool. If this parameter is true, the prerequisites will be printed to stdout and MakeMaker\nwill exit. The output format is an evalable hash ref.\n\n$PREREQPM = {\n'A::B' => Vers1,\n'C::D' => Vers2,\n...\n};\n\nIf a distribution defines a minimal required perl version, this is added to the output as an\nadditional line of the form:\n\n$MINPERLVERSION = '5.008001';\n\nIf BUILDREQUIRES is not empty, it will be dumped as $BUILDREQUIRES hashref.\n\nPRINTPREREQ\nRedHatism for \"PREREQPRINT\". The output format is different, though:\n\nperl(A::B)>=Vers1 perl(C::D)>=Vers2 ...\n\nA minimal required perl version, if present, will look like this:\n\nperl(perl)>=5.008001\n\nSITEPREFIX\nLike PERLPREFIX, but only for the site install locations.\n\nDefaults to $Config{siteprefixexp}. Perls prior to 5.6.0 didn't have an explicit siteprefix in\nthe Config. In those cases $Config{installprefix} will be used.\n\nOverridable by PREFIX\n\nSIGN\nAvailable in version 6.18 and above.\n\nWhen true, perform the generation and addition to the MANIFEST of the SIGNATURE file in the\ndistdir during 'make distdir', via 'cpansign -s'.\n\nNote that you need to install the Module::Signature module to perform this operation.\n\nDefaults to false.\n\nSKIP\nArrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the Makefile. Caution! Do not\nuse the SKIP attribute for the negligible speedup. It may seriously damage the resulting\nMakefile. Only use it if you really need it.\n\nTESTREQUIRES\nAvailable in version 6.64 and above.\n\nA hash of modules that are needed to test your module but not run or build it.\n\nThis will go into the \"buildrequires\" field of your META.yml and the \"test\" of the \"prereqs\"\nfield of your META.json.\n\nThe format is the same as PREREQPM.\n\nTYPEMAPS\nRef to array of typemap file names. Use this when the typemaps are in some directory other\nthan the current directory or when they are not named typemap. The last typemap in the list\ntakes precedence. A typemap in the current directory has highest precedence, even if it isn't\nlisted in TYPEMAPS. The default system typemap has lowest precedence.\n\nVENDORPREFIX\nLike PERLPREFIX, but only for the vendor install locations.\n\nDefaults to $Config{vendorprefixexp}.\n\nOverridable by PREFIX\n\nVERBINST\nIf true, make install will be verbose\n\nVERSION\nYour version number for distributing the package. This defaults to 0.1.\n\nVERSIONFROM\nInstead of specifying the VERSION in the Makefile.PL you can let MakeMaker parse a file to\ndetermine the version number. The parsing routine requires that the file named by VERSIONFROM\ncontains one single line to compute the version number. The first line in the file that\ncontains something like a $VERSION assignment or \"package Name VERSION\" will be used. The\nfollowing lines will be parsed o.k.:\n\n# Good\npackage Foo::Bar 1.23;                      # 1.23\n$VERSION   = '1.00';                        # 1.00\n*VERSION   = \\'1.01';                       # 1.01\n($VERSION) = q$Revision$ =~ /(\\d+)/g;       # The digits in $Revision$\n$FOO::VERSION = '1.10';                     # 1.10\n*FOO::VERSION = \\'1.11';                    # 1.11\n\nbut these will fail:\n\n# Bad\nmy $VERSION         = '1.01';\nlocal $VERSION      = '1.02';\nlocal $FOO::VERSION = '1.30';\n\n(Putting \"my\" or \"local\" on the preceding line will work o.k.)\n\n\"Version strings\" are incompatible and should not be used.\n\n# Bad\n$VERSION = 1.2.3;\n$VERSION = v1.2.3;\n\nversion objects are fine. As of MakeMaker 6.35 version.pm will be automatically loaded, but\nyou must declare the dependency on version.pm. For compatibility with older MakeMaker you\nshould load on the same line as $VERSION is declared.\n\n# All on one line\nuse version; our $VERSION = qv(1.2.3);\n\nThe file named in VERSIONFROM is not added as a dependency to Makefile. This is not really\ncorrect, but it would be a major pain during development to have to rewrite the Makefile for\nany smallish change in that file. If you want to make sure that the Makefile contains the\ncorrect VERSION macro after any change of the file, you would have to do something like\n\ndepend => { Makefile => '$(VERSIONFROM)' }\n\nSee attribute \"depend\" below.\n\nVERSIONSYM\nA sanitized VERSION with . replaced by . For places where . has special meaning (some\nfilesystems, RCS labels, etc...)\n\nXS\nHashref of .xs files. MakeMaker will default this. e.g.\n\n{'nameoffile.xs' => 'nameoffile.c'}\n\nThe .c files will automatically be included in the list of files deleted by a make clean.\n\nXSBUILD\nAvailable in version 7.12 and above.\n\nHashref with options controlling the operation of \"XSMULTI\":\n\n{\nxs => {\nall => {\n# options applying to all .xs files for this distribution\n},\n'lib/Class/Name/File' => { # specifically for this file\nDEFINE => '-Dfunktastic', # defines for only this file\nINC => \"-I$funkyliblocation\", # include flags for only this file\n# OBJECT => 'lib/Class/Name/File$(OBJEXT)', # default\nLDFROM => \"lib/Class/Name/File\\$(OBJEXT) $otherfile\\$(OBJEXT)\", # what's linked\n},\n},\n}\n\nNote \"xs\" is the file-extension. More possibilities may arise in the future. Note that object\nnames are specified without their XS extension.\n\n\"LDFROM\" defaults to the same as \"OBJECT\". \"OBJECT\" defaults to, for \"XSMULTI\", just the XS\nfilename with the extension replaced with the compiler-specific object-file extension.\n\nThe distinction between \"OBJECT\" and \"LDFROM\": \"OBJECT\" is the make target, so make will try\nto build it. However, \"LDFROM\" is what will actually be linked together to make the shared\nobject or static library (SO/SL), so if you override it, make sure it includes what you want\nto make the final SO/SL, almost certainly including the XS basename with \"$(OBJEXT)\"\nappended.\n\nXSMULTI\nAvailable in version 7.12 and above.\n\nWhen this is set to 1, multiple XS files may be placed under lib/ next to their corresponding\n\"*.pm\" files (this is essential for compiling with the correct \"VERSION\" values). This feature\nshould be considered experimental, and details of it may change.\n\nThis feature was inspired by, and small portions of code copied from,\nExtUtils::MakeMaker::BigHelper. Hopefully this feature will render that module mainly\nobsolete.\n\nXSOPT\nString of options to pass to xsubpp. This might include \"-C++\" or \"-extern\". Do not include\ntypemaps here; the TYPEMAP parameter exists for that purpose.\n\nXSPROTOARG\nMay be set to \"-prototypes\", \"-noprototypes\" or the empty string. The empty string is\nequivalent to the xsubpp default, or \"-noprototypes\". See the xsubpp documentation for\ndetails. MakeMaker defaults to the empty string.\n\nXSVERSION\nYour version number for the .xs file of this package. This defaults to the value of the\nVERSION attribute.\n"
                },
                {
                    "name": "Additional lowercase attributes",
                    "content": "can be used to pass parameters to the methods which implement that part of the Makefile.\nParameters are specified as a hash ref but are passed to the method as a hash.\n\nclean\n{FILES => \"*.xyz foo\"}\n\ndepend\n{ANYTARGET => ANYDEPENDENCY, ...}\n\n(ANYTARGET must not be given a double-colon rule by MakeMaker.)\n\ndist\n{TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',\nSHAR => 'shar -m', DISTCP => 'ln', ZIP => '/bin/zip',\nZIPFLAGS => '-rl', DISTDEFAULT => 'private tardist' }\n\nIf you specify COMPRESS, then SUFFIX should also be altered, as it is needed to tell make the\ntarget file of the compression. Setting DISTCP to ln can be useful, if you need to preserve\nthe timestamps on your files. DISTCP can take the values 'cp', which copies the file, 'ln',\nwhich links the file, and 'best' which copies symbolic links and links the rest. Default is\n'best'.\n\ndynamiclib\n{ARMAYBE => 'ar', OTHERLDFLAGS => '...', INSTDYNAMICDEP => '...'}\n\nlinkext\n{LINKTYPE => 'static', 'dynamic' or ''}\n\nNB: Extensions that have nothing but *.pm files had to say\n\n{LINKTYPE => ''}\n\nwith Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line can be deleted safely.\nMakeMaker recognizes when there's nothing to be linked.\n\nmacro\n{ANYMACRO => ANYVALUE, ...}\n\npostamble\nAnything put here will be passed to MY::postamble() if you have one.\n\nrealclean\n{FILES => '$(INSTARCHAUTODIR)/*.xyz'}\n\ntest\nSpecify the targets for testing.\n\n{TESTS => 't/*.t'}\n\n\"RECURSIVETESTFILES\" can be used to include all directories recursively under \"t\" that\ncontain \".t\" files. It will be ignored if you provide your own \"TESTS\" attribute, defaults to\nfalse.\n\n{RECURSIVETESTFILES=>1}\n\nThis is supported since 6.76\n\ntoolautosplit\n{MAXLEN => 8}\n"
                },
                {
                    "name": "Overriding MakeMaker Methods",
                    "content": "If you cannot achieve the desired Makefile behaviour by specifying attributes you may define\nprivate subroutines in the Makefile.PL. Each subroutine returns the text it wishes to have\nwritten to the Makefile. To override a section of the Makefile you can either say:\n\nsub MY::co { \"new literal text\" }\n\nor you can edit the default by saying something like:\n\npackage MY; # so that \"SUPER\" works right\nsub co {\nmy $inherited = shift->SUPER::co(@);\n$inherited =~ s/old text/new text/;\n$inherited;\n}\n\nIf you are running experiments with embedding perl as a library into other applications, you\nmight find MakeMaker is not sufficient. You'd better have a look at ExtUtils::Embed which is a\ncollection of utilities for embedding.\n\nIf you still need a different solution, try to develop another subroutine that fits your needs\nand submit the diffs to \"makemaker@perl.org\"\n\nFor a complete description of all MakeMaker methods see ExtUtils::MMUnix.\n\nHere is a simple example of how to add a new target to the generated Makefile:\n\nsub MY::postamble {\nreturn <<'MAKEFRAG';\n$(MYEXTLIB): sdbm/Makefile\ncd sdbm && $(MAKE) all\n\nMAKEFRAG\n}\n"
                },
                {
                    "name": "The End Of Cargo Cult Programming",
                    "content": "WriteMakefile() now does some basic sanity checks on its parameters to protect against typos and\nmalformatted values. This means some things which happened to work in the past will now throw\nwarnings and possibly produce internal errors.\n\nSome of the most common mistakes:\n\n\"MAN3PODS => ' '\"\nThis is commonly used to suppress the creation of man pages. MAN3PODS takes a hash ref not a\nstring, but the above worked by accident in old versions of MakeMaker.\n\nThe correct code is \"MAN3PODS => { }\".\n"
                },
                {
                    "name": "Hintsfile support",
                    "content": "MakeMaker.pm uses the architecture-specific information from Config.pm. In addition it evaluates\narchitecture specific hints files in a \"hints/\" directory. The hints files are expected to be\nnamed like their counterparts in \"PERLSRC/hints\", but with an \".pl\" file name extension (eg.\n\"next32.pl\"). They are simply \"eval\"ed by MakeMaker within the WriteMakefile() subroutine, and\ncan be used to execute commands as well as to include special variables. The rules which\nhintsfile is chosen are the same as in Configure.\n\nThe hintsfile is eval()ed immediately after the arguments given to WriteMakefile are stuffed\ninto a hash reference $self but before this reference becomes blessed. So if you want to do the\nequivalent to override or create an attribute you would say something like\n\n$self->{LIBS} = ['-ldbm -lucb -lc'];\n"
                },
                {
                    "name": "Distribution Support",
                    "content": "For authors of extensions MakeMaker provides several Makefile targets. Most of the support comes\nfrom the ExtUtils::Manifest module, where additional documentation can be found.\n\nmake distcheck\nreports which files are below the build directory but not in the MANIFEST file and vice\nversa. (See \"fullcheck\" in ExtUtils::Manifest for details)\n\nmake skipcheck\nreports which files are skipped due to the entries in the \"MANIFEST.SKIP\" file (See\n\"skipcheck\" in ExtUtils::Manifest for details)\n\nmake distclean\ndoes a realclean first and then the distcheck. Note that this is not needed to build a new\ndistribution as long as you are sure that the MANIFEST file is ok.\n\nmake veryclean\ndoes a realclean first and then removes backup files such as \"*~\", \"*.bak\", \"*.old\" and\n\"*.orig\"\n\nmake manifest\nrewrites the MANIFEST file, adding all remaining files found (See \"mkmanifest\" in\nExtUtils::Manifest for details)\n\nmake distdir\nCopies all the files that are in the MANIFEST file to a newly created directory with the\nname \"$(DISTNAME)-$(VERSION)\". If that directory exists, it will be removed first.\n\nAdditionally, it will create META.yml and META.json module meta-data file in the distdir and\nadd this to the distdir's MANIFEST. You can shut this behavior off with the NOMETA flag.\n\nmake disttest\nMakes a distdir first, and runs a \"perl Makefile.PL\", a make, and a make test in that\ndirectory.\n\nmake tardist\nFirst does a distdir. Then a command $(PREOP) which defaults to a null command, followed by\n$(TOUNIX), which defaults to a null command under UNIX, and will convert files in\ndistribution directory to UNIX format otherwise. Next it runs \"tar\" on that directory into a\ntarfile and deletes the directory. Finishes with a command $(POSTOP) which defaults to a\nnull command.\n\nmake dist\nDefaults to $(DISTDEFAULT) which in turn defaults to tardist.\n\nmake uutardist\nRuns a tardist first and uuencodes the tarfile.\n\nmake shdist\nFirst does a distdir. Then a command $(PREOP) which defaults to a null command. Next it runs\n\"shar\" on that directory into a sharfile and deletes the intermediate directory again.\nFinishes with a command $(POSTOP) which defaults to a null command. Note: For shdist to work\nproperly a \"shar\" program that can handle directories is mandatory.\n\nmake zipdist\nFirst does a distdir. Then a command $(PREOP) which defaults to a null command. Runs \"$(ZIP)\n$(ZIPFLAGS)\" on that directory into a zipfile. Then deletes that directory. Finishes with a\ncommand $(POSTOP) which defaults to a null command.\n\nmake ci\nDoes a $(CI) and a $(RCSLABEL) on all files in the MANIFEST file.\n\nCustomization of the dist targets can be done by specifying a hash reference to the dist\nattribute of the WriteMakefile call. The following parameters are recognized:\n\nCI           ('ci -u')\nCOMPRESS     ('gzip --best')\nPOSTOP       ('@ :')\nPREOP        ('@ :')\nTOUNIX      (depends on the system)\nRCSLABEL    ('rcs -q -Nv$(VERSIONSYM):')\nSHAR         ('shar')\nSUFFIX       ('.gz')\nTAR          ('tar')\nTARFLAGS     ('cvf')\nZIP          ('zip')\nZIPFLAGS     ('-r')\n\nAn example:\n\nWriteMakefile(\n...other options...\ndist => {\nCOMPRESS => \"bzip2\",\nSUFFIX   => \".bz2\"\n}\n);\n\nModule Meta-Data (META and MYMETA)\nLong plaguing users of MakeMaker based modules has been the problem of getting basic information\nabout the module out of the sources *without* running the Makefile.PL and doing a bunch of messy\nheuristics on the resulting Makefile. Over the years, it has become standard to keep this\ninformation in one or more CPAN Meta files distributed with each distribution.\n\nThe original format of CPAN Meta files was YAML and the corresponding file was called META.yml.\nIn 2010, version 2 of the CPAN::Meta::Spec was released, which mandates JSON format for the\nmetadata in order to overcome certain compatibility issues between YAML serializers and to avoid\nbreaking older clients unable to handle a new version of the spec. The CPAN::Meta library is now\nstandard for accessing old and new-style Meta files.\n\nIf CPAN::Meta is installed, MakeMaker will automatically generate META.json and META.yml files\nfor you and add them to your MANIFEST as part of the 'distdir' target (and thus the 'dist'\ntarget). This is intended to seamlessly and rapidly populate CPAN with module meta-data. If you\nwish to shut this feature off, set the \"NOMETA\" WriteMakefile() flag to true.\n\nAt the 2008 QA Hackathon in Oslo, Perl module toolchain maintainers agreed to use the CPAN Meta\nformat to communicate post-configuration requirements between toolchain components. These files,\nMYMETA.json and MYMETA.yml, are generated when Makefile.PL generates a Makefile (if CPAN::Meta\nis installed). Clients like CPAN or CPANPLUS will read these files to see what prerequisites\nmust be fulfilled before building or testing the distribution. If you wish to shut this feature\noff, set the \"NOMYMETA\" WriteMakefile() flag to true.\n"
                },
                {
                    "name": "Disabling an extension",
                    "content": "If some events detected in Makefile.PL imply that there is no way to create the Module, but this\nis a normal state of things, then you can create a Makefile which does nothing, but succeeds on\nall the \"usual\" build targets. To do so, use\n\nuse ExtUtils::MakeMaker qw(WriteEmptyMakefile);\nWriteEmptyMakefile();\n\ninstead of WriteMakefile().\n\nThis may be useful if other modules expect this module to be *built* OK, as opposed to *work* OK\n(say, this system-dependent module builds in a subdirectory of some other distribution, or is\nlisted as a dependency in a CPAN::Bundle, but the functionality is supported by different means\non the current architecture).\n"
                },
                {
                    "name": "Other Handy Functions",
                    "content": "prompt\nmy $value = prompt($message);\nmy $value = prompt($message, $default);\n\nThe prompt() function provides an easy way to request user input used to write a makefile.\nIt displays the $message as a prompt for input. If a $default is provided it will be used as\na default. The function returns the $value selected by the user.\n\nIf prompt() detects that it is not running interactively and there is nothing on STDIN or if\nthe PERLMMUSEDEFAULT environment variable is set to true, the $default will be used\nwithout prompting. This prevents automated processes from blocking on user input.\n\nIf no $default is provided an empty string will be used instead.\n\nosunsupported\nosunsupported();\nosunsupported if $^O eq 'MSWin32';\n\nThe osunsupported() function provides a way to correctly exit your \"Makefile.PL\" before\ncalling \"WriteMakefile\". It is essentially a \"die\" with the message \"OS unsupported\".\n\nThis is supported since 7.26\n"
                },
                {
                    "name": "Supported versions of Perl",
                    "content": "Please note that while this module works on Perl 5.6, it is no longer being routinely tested on\n5.6 - the earliest Perl version being routinely tested, and expressly supported, is 5.8.1.\nHowever, patches to repair any breakage on 5.6 are still being accepted.\n"
                }
            ]
        },
        "ENVIRONMENT": {
            "content": "PERLMMOPT\nCommand line options used by \"MakeMaker->new()\", and thus by WriteMakefile(). The string is\nsplit as the shell would, and the result is processed before any actual command line\narguments are processed.\n\nPERLMMOPT='CCFLAGS=\"-Wl,-rpath -Wl,/foo/bar/lib\" LIBS=\"-lwibble -lwobble\"'\n\nPERLMMUSEDEFAULT\nIf set to a true value then MakeMaker's prompt function will always return the default\nwithout waiting for user input.\n\nPERLCORE\nSame as the PERLCORE parameter. The parameter overrides this.\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "Module::Build is a pure-Perl alternative to MakeMaker which does not rely on make or any other\nexternal utility. It may be easier to extend to suit your needs.\n\nModule::Build::Tiny is a minimal pure-Perl alternative to MakeMaker that follows the Build.PL\nprotocol of Module::Build but without its complexity and cruft, implementing only the\ninstallation of the module and leaving authoring to mbtiny or other authoring tools.\n\nModule::Install is a (now discouraged) wrapper around MakeMaker which adds features not normally\navailable.\n\nExtUtils::ModuleMaker and Module::Starter are both modules to help you setup your distribution.\n\nCPAN::Meta and CPAN::Meta::Spec explain CPAN Meta files in detail.\n\nFile::ShareDir::Install makes it easy to install static, sometimes also referred to as 'shared'\nfiles. File::ShareDir helps accessing the shared files after installation. Test::File::ShareDir\nhelps when writing tests to use the shared files both before and after installation.\n\nDist::Zilla is an authoring tool which allows great customization and extensibility of the\nauthor experience, relying on the existing install tools like ExtUtils::MakeMaker only for\ninstallation.\n\nDist::Milla is a Dist::Zilla bundle that greatly simplifies common usage.\n\nMinilla is a minimal authoring tool that does the same things as Dist::Milla without the\noverhead of Dist::Zilla.\n",
            "subsections": []
        },
        "AUTHORS": {
            "content": "Andy Dougherty \"doughera@lafayette.edu\", Andreas König \"andreas.koenig@mind.de\", Tim Bunce\n\"timb@cpan.org\". VMS support by Charles Bailey \"bailey@newman.upenn.edu\". OS/2 support by Ilya\nZakharevich \"ilya@math.ohio-state.edu\".\n\nCurrently maintained by Michael G Schwern \"schwern@pobox.com\"\n\nSend patches and ideas to \"makemaker@perl.org\".\n\nSend bug reports via http://rt.cpan.org/. Please send your generated Makefile along with your\nreport.\n\nFor more up-to-date information, see <https://metacpan.org/release/ExtUtils-MakeMaker>.\n\nRepository available at <https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker>.\n",
            "subsections": []
        },
        "LICENSE": {
            "content": "This program is free software; you can redistribute it and/or modify it under the same terms as\nPerl itself.\n\nSee <http://www.perl.com/perl/misc/Artistic.html>\n",
            "subsections": []
        }
    },
    "summary": "ExtUtils::MakeMaker - Create a module Makefile",
    "flags": [],
    "examples": [],
    "see_also": []
}