summaryrefslogtreecommitdiffstats
path: root/upstream/debian-unstable/man3/ExtUtils::MM_Any.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/debian-unstable/man3/ExtUtils::MM_Any.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/debian-unstable/man3/ExtUtils::MM_Any.3perl')
-rw-r--r--upstream/debian-unstable/man3/ExtUtils::MM_Any.3perl1119
1 files changed, 1119 insertions, 0 deletions
diff --git a/upstream/debian-unstable/man3/ExtUtils::MM_Any.3perl b/upstream/debian-unstable/man3/ExtUtils::MM_Any.3perl
new file mode 100644
index 00000000..858fbfc7
--- /dev/null
+++ b/upstream/debian-unstable/man3/ExtUtils::MM_Any.3perl
@@ -0,0 +1,1119 @@
+.\" -*- 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::MM_Any 3perl"
+.TH ExtUtils::MM_Any 3perl 2024-01-12 "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::MM_Any \- Platform\-agnostic MM methods
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& FOR INTERNAL USE ONLY!
+\&
+\& package ExtUtils::MM_SomeOS;
+\&
+\& # Temporarily, you have to subclass both. Put MM_Any first.
+\& require ExtUtils::MM_Any;
+\& require ExtUtils::MM_Unix;
+\& @ISA = qw(ExtUtils::MM_Any ExtUtils::Unix);
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+\&\fBFOR INTERNAL USE ONLY!\fR
+.PP
+ExtUtils::MM_Any is a superclass for the ExtUtils::MM_* set of
+modules. It contains methods which are either inherently
+cross-platform or are written in a cross-platform manner.
+.PP
+Subclass off of ExtUtils::MM_Any \fIand\fR ExtUtils::MM_Unix. This is a
+temporary solution.
+.PP
+\&\fBTHIS MAY BE TEMPORARY!\fR
+.SH METHODS
+.IX Header "METHODS"
+Any methods marked \fIAbstract\fR must be implemented by subclasses.
+.SS "Cross-platform helper methods"
+.IX Subsection "Cross-platform helper methods"
+These are methods which help writing cross-platform code.
+.PP
+\fIos_flavor Abstract\fR
+.IX Subsection "os_flavor Abstract"
+.PP
+.Vb 1
+\& my @os_flavor = $mm\->os_flavor;
+.Ve
+.PP
+\&\f(CW@os_flavor\fR is the style of operating system this is, usually
+corresponding to the MM_*.pm file we're using.
+.PP
+The first element of \f(CW@os_flavor\fR is the major family (ie. Unix,
+Windows, VMS, OS/2, etc...) and the rest are sub families.
+.PP
+Some examples:
+.PP
+.Vb 6
+\& Cygwin98 (\*(AqUnix\*(Aq, \*(AqCygwin\*(Aq, \*(AqCygwin9x\*(Aq)
+\& Windows (\*(AqWin32\*(Aq)
+\& Win98 (\*(AqWin32\*(Aq, \*(AqWin9x\*(Aq)
+\& Linux (\*(AqUnix\*(Aq, \*(AqLinux\*(Aq)
+\& MacOS X (\*(AqUnix\*(Aq, \*(AqDarwin\*(Aq, \*(AqMacOS\*(Aq, \*(AqMacOS X\*(Aq)
+\& OS/2 (\*(AqOS/2\*(Aq)
+.Ve
+.PP
+This is used to write code for styles of operating system.
+See \fBos_flavor_is()\fR for use.
+.PP
+\fIos_flavor_is\fR
+.IX Subsection "os_flavor_is"
+.PP
+.Vb 2
+\& my $is_this_flavor = $mm\->os_flavor_is($this_flavor);
+\& my $is_this_flavor = $mm\->os_flavor_is(@one_of_these_flavors);
+.Ve
+.PP
+Checks to see if the current operating system is one of the given flavors.
+.PP
+This is useful for code like:
+.PP
+.Vb 6
+\& if( $mm\->os_flavor_is(\*(AqUnix\*(Aq) ) {
+\& $out = \`foo 2>&1\`;
+\& }
+\& else {
+\& $out = \`foo\`;
+\& }
+.Ve
+.PP
+\fIcan_load_xs\fR
+.IX Subsection "can_load_xs"
+.PP
+.Vb 1
+\& my $can_load_xs = $self\->can_load_xs;
+.Ve
+.PP
+Returns true if we have the ability to load XS.
+.PP
+This is important because miniperl, used to build XS modules in the
+core, can not load XS.
+.PP
+\fIcan_run\fR
+.IX Subsection "can_run"
+.PP
+.Vb 2
+\& use ExtUtils::MM;
+\& my $runnable = MM\->can_run($Config{make});
+.Ve
+.PP
+If called in a scalar context it will return the full path to the binary
+you asked for if it was found, or \f(CW\*(C`undef\*(C'\fR if it was not.
+.PP
+If called in a list context, it will return a list of the full paths to instances
+of the binary where found in \f(CW\*(C`PATH\*(C'\fR, or an empty list if it was not found.
+.PP
+Copied from IPC::Cmd, but modified into
+a method (and removed \f(CW$INSTANCES\fR capability).
+.PP
+\fIcan_redirect_error\fR
+.IX Subsection "can_redirect_error"
+.PP
+.Vb 1
+\& $useredirect = MM\->can_redirect_error;
+.Ve
+.PP
+True if on an OS where qx operator (or backticks) can redirect \f(CW\*(C`STDERR\*(C'\fR
+onto \f(CW\*(C`STDOUT\*(C'\fR.
+.PP
+\fIis_make_type\fR
+.IX Subsection "is_make_type"
+.PP
+.Vb 1
+\& my $is_dmake = $self\->is_make_type(\*(Aqdmake\*(Aq);
+.Ve
+.PP
+Returns true if \f(CW\*(C`$self\->make\*(C'\fR is the given type; possibilities are:
+.PP
+.Vb 4
+\& gmake GNU make
+\& dmake
+\& nmake
+\& bsdmake BSD pmake\-derived
+.Ve
+.PP
+\fIcan_dep_space\fR
+.IX Subsection "can_dep_space"
+.PP
+.Vb 1
+\& my $can_dep_space = $self\->can_dep_space;
+.Ve
+.PP
+Returns true if \f(CW\*(C`make\*(C'\fR can handle (probably by quoting)
+dependencies that contain a space. Currently known true for GNU make,
+false for BSD pmake derivative.
+.PP
+\fIquote_dep\fR
+.IX Subsection "quote_dep"
+.PP
+.Vb 1
+\& $text = $mm\->quote_dep($text);
+.Ve
+.PP
+Method that protects Makefile single-value constants (mainly filenames),
+so that make will still treat them as single values even if they
+inconveniently have spaces in. If the make program being used cannot
+achieve such protection and the given text would need it, throws an
+exception.
+.PP
+\fIsplit_command\fR
+.IX Subsection "split_command"
+.PP
+.Vb 1
+\& my @cmds = $MM\->split_command($cmd, @args);
+.Ve
+.PP
+Most OS have a maximum command length they can execute at once. Large
+modules can easily generate commands well past that limit. Its
+necessary to split long commands up into a series of shorter commands.
+.PP
+\&\f(CW\*(C`split_command\*(C'\fR will return a series of \f(CW@cmds\fR each processing part of
+the args. Collectively they will process all the arguments. Each
+individual line in \f(CW@cmds\fR will not be longer than the
+\&\f(CW$self\fR\->max_exec_len being careful to take into account macro expansion.
+.PP
+\&\f(CW$cmd\fR should include any switches and repeated initial arguments.
+.PP
+If no \f(CW@args\fR are given, no \f(CW@cmds\fR will be returned.
+.PP
+Pairs of arguments will always be preserved in a single command, this
+is a heuristic for things like pm_to_blib and pod2man which work on
+pairs of arguments. This makes things like this safe:
+.PP
+.Vb 1
+\& $self\->split_command($cmd, %pod2man);
+.Ve
+.PP
+\fImake_type\fR
+.IX Subsection "make_type"
+.PP
+Returns a suitable string describing the type of makefile being written.
+.PP
+\fIstashmeta\fR
+.IX Subsection "stashmeta"
+.PP
+.Vb 1
+\& my @recipelines = $MM\->stashmeta($text, $file);
+.Ve
+.PP
+Generates a set of \f(CW@recipelines\fR which will result in the literal
+\&\f(CW$text\fR ending up in literal \f(CW$file\fR when the recipe is executed. Call
+it once, with all the text you want in \f(CW$file\fR. Make macros will not
+be expanded, so the locations will be fixed at configure-time, not
+at build-time.
+.PP
+\fIecho\fR
+.IX Subsection "echo"
+.PP
+.Vb 3
+\& my @commands = $MM\->echo($text);
+\& my @commands = $MM\->echo($text, $file);
+\& my @commands = $MM\->echo($text, $file, \e%opts);
+.Ve
+.PP
+Generates a set of \f(CW@commands\fR which print the \f(CW$text\fR to a \f(CW$file\fR.
+.PP
+If \f(CW$file\fR is not given, output goes to STDOUT.
+.PP
+If \f(CW$opts\fR{append} is true the \f(CW$file\fR will be appended to rather than
+overwritten. Default is to overwrite.
+.PP
+If \f(CW$opts\fR{allow_variables} is true, make variables of the form
+\&\f(CW\*(C`$(...)\*(C'\fR will not be escaped. Other \f(CW\*(C`$\*(C'\fR will. Default is to escape
+all \f(CW\*(C`$\*(C'\fR.
+.PP
+Example of use:
+.PP
+.Vb 1
+\& my $make = join \*(Aq\*(Aq, map "\et$_\en", $MM\->echo($text, $file);
+.Ve
+.PP
+\fIwraplist\fR
+.IX Subsection "wraplist"
+.PP
+.Vb 1
+\& my $args = $mm\->wraplist(@list);
+.Ve
+.PP
+Takes an array of items and turns them into a well-formatted list of
+arguments. In most cases this is simply something like:
+.PP
+.Vb 3
+\& FOO \e
+\& BAR \e
+\& BAZ
+.Ve
+.PP
+\fImaketext_filter\fR
+.IX Subsection "maketext_filter"
+.PP
+.Vb 1
+\& my $filter_make_text = $mm\->maketext_filter($make_text);
+.Ve
+.PP
+The text of the Makefile is run through this method before writing to
+disk. It allows systems a chance to make portability fixes to the
+Makefile.
+.PP
+By default it does nothing.
+.PP
+This method is protected and not intended to be called outside of
+MakeMaker.
+.PP
+\fIcd Abstract\fR
+.IX Subsection "cd Abstract"
+.PP
+.Vb 1
+\& my $subdir_cmd = $MM\->cd($subdir, @cmds);
+.Ve
+.PP
+This will generate a make fragment which runs the \f(CW@cmds\fR in the given
+\&\f(CW$dir\fR. The rough equivalent to this, except cross platform.
+.PP
+.Vb 1
+\& cd $subdir && $cmd
+.Ve
+.PP
+Currently \f(CW$dir\fR can only go down one level. "foo" is fine. "foo/bar" is
+not. "../foo" is right out.
+.PP
+The resulting \f(CW$subdir_cmd\fR has no leading tab nor trailing newline. This
+makes it easier to embed in a make string. For example.
+.PP
+.Vb 6
+\& my $make = sprintf <<\*(AqCODE\*(Aq, $subdir_cmd;
+\& foo :
+\& $(ECHO) what
+\& %s
+\& $(ECHO) mouche
+\& CODE
+.Ve
+.PP
+\fIoneliner Abstract\fR
+.IX Subsection "oneliner Abstract"
+.PP
+.Vb 2
+\& my $oneliner = $MM\->oneliner($perl_code);
+\& my $oneliner = $MM\->oneliner($perl_code, \e@switches);
+.Ve
+.PP
+This will generate a perl one-liner safe for the particular platform
+you're on based on the given \f(CW$perl_code\fR and \f(CW@switches\fR (a \-e is
+assumed) suitable for using in a make target. It will use the proper
+shell quoting and escapes.
+.PP
+$(PERLRUN) will be used as perl.
+.PP
+Any newlines in \f(CW$perl_code\fR will be escaped. Leading and trailing
+newlines will be stripped. Makes this idiom much easier:
+.PP
+.Vb 4
+\& my $code = $MM\->oneliner(<<\*(AqCODE\*(Aq, [...switches...]);
+\&some code here
+\&another line here
+\&CODE
+.Ve
+.PP
+Usage might be something like:
+.PP
+.Vb 3
+\& # an echo emulation
+\& $oneliner = $MM\->oneliner(\*(Aqprint "Foo\en"\*(Aq);
+\& $make = \*(Aq$oneliner > somefile\*(Aq;
+.Ve
+.PP
+Dollar signs in the \f(CW$perl_code\fR will be protected from make using the
+\&\f(CW\*(C`quote_literal\*(C'\fR method, unless they are recognised as being a make
+variable, \f(CW\*(C`$(varname)\*(C'\fR, in which case they will be left for make
+to expand. Remember to quote make macros else it might be used as a
+bareword. For example:
+.PP
+.Vb 2
+\& # Assign the value of the $(VERSION_FROM) make macro to $vf.
+\& $oneliner = $MM\->oneliner(\*(Aq$vf = "$(VERSION_FROM)"\*(Aq);
+.Ve
+.PP
+Its currently very simple and may be expanded sometime in the figure
+to include more flexible code and switches.
+.PP
+\fIquote_literal Abstract\fR
+.IX Subsection "quote_literal Abstract"
+.PP
+.Vb 2
+\& my $safe_text = $MM\->quote_literal($text);
+\& my $safe_text = $MM\->quote_literal($text, \e%options);
+.Ve
+.PP
+This will quote \f(CW$text\fR so it is interpreted literally in the shell.
+.PP
+For example, on Unix this would escape any single-quotes in \f(CW$text\fR and
+put single-quotes around the whole thing.
+.PP
+If \f(CW$options\fR{allow_variables} is true it will leave \f(CW\*(Aq$(FOO)\*(Aq\fR make
+variables untouched. If false they will be escaped like any other
+\&\f(CW\*(C`$\*(C'\fR. Defaults to true.
+.PP
+\fIescape_dollarsigns\fR
+.IX Subsection "escape_dollarsigns"
+.PP
+.Vb 1
+\& my $escaped_text = $MM\->escape_dollarsigns($text);
+.Ve
+.PP
+Escapes stray \f(CW\*(C`$\*(C'\fR so they are not interpreted as make variables.
+.PP
+It lets by \f(CW\*(C`$(...)\*(C'\fR.
+.PP
+\fIescape_all_dollarsigns\fR
+.IX Subsection "escape_all_dollarsigns"
+.PP
+.Vb 1
+\& my $escaped_text = $MM\->escape_all_dollarsigns($text);
+.Ve
+.PP
+Escapes all \f(CW\*(C`$\*(C'\fR so they are not interpreted as make variables.
+.PP
+\fIescape_newlines Abstract\fR
+.IX Subsection "escape_newlines Abstract"
+.PP
+.Vb 1
+\& my $escaped_text = $MM\->escape_newlines($text);
+.Ve
+.PP
+Shell escapes newlines in \f(CW$text\fR.
+.PP
+\fImax_exec_len Abstract\fR
+.IX Subsection "max_exec_len Abstract"
+.PP
+.Vb 1
+\& my $max_exec_len = $MM\->max_exec_len;
+.Ve
+.PP
+Calculates the maximum command size the OS can exec. Effectively,
+this is the max size of a shell command line.
+.PP
+\fImake\fR
+.IX Subsection "make"
+.PP
+.Vb 1
+\& my $make = $MM\->make;
+.Ve
+.PP
+Returns the make variant we're generating the Makefile for. This attempts
+to do some normalization on the information from \f(CW%Config\fR or the user.
+.SS Targets
+.IX Subsection "Targets"
+These are methods which produce make targets.
+.PP
+\fIall_target\fR
+.IX Subsection "all_target"
+.PP
+Generate the default target 'all'.
+.PP
+\fIblibdirs_target\fR
+.IX Subsection "blibdirs_target"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->blibdirs_target;
+.Ve
+.PP
+Creates the blibdirs target which creates all the directories we use
+in blib/.
+.PP
+The blibdirs.ts target is deprecated. Depend on blibdirs instead.
+.PP
+\fIclean (o)\fR
+.IX Subsection "clean (o)"
+.PP
+Defines the clean target.
+.PP
+\fIclean_subdirs_target\fR
+.IX Subsection "clean_subdirs_target"
+.PP
+.Vb 1
+\& my $make_frag = $MM\->clean_subdirs_target;
+.Ve
+.PP
+Returns the clean_subdirs target. This is used by the clean target to
+call clean on any subdirectories which contain Makefiles.
+.PP
+\fIdir_target\fR
+.IX Subsection "dir_target"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->dir_target(@directories);
+.Ve
+.PP
+Generates targets to create the specified directories and set its
+permission to PERM_DIR.
+.PP
+Because depending on a directory to just ensure it exists doesn't work
+too well (the modified time changes too often) \fBdir_target()\fR creates a
+\&.exists file in the created directory. It is this you should depend on.
+For portability purposes you should use the $(DIRFILESEP) macro rather
+than a '/' to separate the directory from the file.
+.PP
+.Vb 1
+\& yourdirectory$(DIRFILESEP).exists
+.Ve
+.PP
+\fIdistdir\fR
+.IX Subsection "distdir"
+.PP
+Defines the scratch directory target that will hold the distribution
+before tar-ing (or shar-ing).
+.PP
+\fIdist_test\fR
+.IX Subsection "dist_test"
+.PP
+Defines a target that produces the distribution in the
+scratch directory, and runs 'perl Makefile.PL; make ;make test' in that
+subdirectory.
+.PP
+\fIxs_dlsyms_arg\fR
+.IX Subsection "xs_dlsyms_arg"
+.PP
+Returns command-line arg(s) to linker for file listing dlsyms to export.
+Defaults to returning empty string, can be overridden by e.g. AIX.
+.PP
+\fIxs_dlsyms_ext\fR
+.IX Subsection "xs_dlsyms_ext"
+.PP
+Returns file-extension for \f(CW\*(C`xs_make_dlsyms\*(C'\fR method's output file,
+including any "." character.
+.PP
+\fIxs_dlsyms_extra\fR
+.IX Subsection "xs_dlsyms_extra"
+.PP
+Returns any extra text to be prepended to the \f(CW$extra\fR argument of
+\&\f(CW\*(C`xs_make_dlsyms\*(C'\fR.
+.PP
+\fIxs_dlsyms_iterator\fR
+.IX Subsection "xs_dlsyms_iterator"
+.PP
+Iterates over necessary shared objects, calling \f(CW\*(C`xs_make_dlsyms\*(C'\fR method
+for each with appropriate arguments.
+.PP
+\fIxs_make_dlsyms\fR
+.IX Subsection "xs_make_dlsyms"
+.PP
+.Vb 12
+\& $self\->xs_make_dlsyms(
+\& \e%attribs, # hashref from %attribs in caller
+\& "$self\->{BASEEXT}.def", # output file for Makefile target
+\& \*(AqMakefile.PL\*(Aq, # dependency
+\& $self\->{NAME}, # shared object\*(Aqs "name"
+\& $self\->{DLBASE}, # last ::\-separated part of name
+\& $attribs{DL_FUNCS} || $self\->{DL_FUNCS} || {}, # various params
+\& $attribs{FUNCLIST} || $self\->{FUNCLIST} || [],
+\& $attribs{IMPORTS} || $self\->{IMPORTS} || {},
+\& $attribs{DL_VARS} || $self\->{DL_VARS} || [],
+\& # optional extra param that will be added as param to Mksymlists
+\& );
+.Ve
+.PP
+Utility method that returns Makefile snippet to call \f(CW\*(C`Mksymlists\*(C'\fR.
+.PP
+\fIdynamic (o)\fR
+.IX Subsection "dynamic (o)"
+.PP
+Defines the dynamic target.
+.PP
+\fImakemakerdflt_target\fR
+.IX Subsection "makemakerdflt_target"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->makemakerdflt_target
+.Ve
+.PP
+Returns a make fragment with the makemakerdeflt_target specified.
+This target is the first target in the Makefile, is the default target
+and simply points off to 'all' just in case any make variant gets
+confused or something gets snuck in before the real 'all' target.
+.PP
+\fImanifypods_target\fR
+.IX Subsection "manifypods_target"
+.PP
+.Vb 1
+\& my $manifypods_target = $self\->manifypods_target;
+.Ve
+.PP
+Generates the manifypods target. This target generates man pages from
+all POD files in MAN1PODS and MAN3PODS.
+.PP
+\fImetafile_target\fR
+.IX Subsection "metafile_target"
+.PP
+.Vb 1
+\& my $target = $mm\->metafile_target;
+.Ve
+.PP
+Generate the metafile target.
+.PP
+Writes the file META.yml (YAML encoded meta-data) and META.json
+(JSON encoded meta-data) about the module in the distdir.
+The format follows Module::Build's as closely as possible.
+.PP
+\fImetafile_data\fR
+.IX Subsection "metafile_data"
+.PP
+.Vb 1
+\& my $metadata_hashref = $mm\->metafile_data(\e%meta_add, \e%meta_merge);
+.Ve
+.PP
+Returns the data which MakeMaker turns into the META.yml file
+and the META.json file. It is always in version 2.0 of the format.
+.PP
+Values of \f(CW%meta_add\fR will overwrite any existing metadata in those
+keys. \f(CW%meta_merge\fR will be merged with them.
+.PP
+\fImetafile_file\fR
+.IX Subsection "metafile_file"
+.PP
+.Vb 1
+\& my $meta_yml = $mm\->metafile_file(@metadata_pairs);
+.Ve
+.PP
+Turns the \f(CW@metadata_pairs\fR into YAML.
+.PP
+This method does not implement a complete YAML dumper, being limited
+to dump a hash with values which are strings, undef's or nested hashes
+and arrays of strings. No quoting/escaping is done.
+.PP
+\fIdistmeta_target\fR
+.IX Subsection "distmeta_target"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->distmeta_target;
+.Ve
+.PP
+Generates the distmeta target to add META.yml and META.json to the MANIFEST
+in the distdir.
+.PP
+\fImymeta\fR
+.IX Subsection "mymeta"
+.PP
+.Vb 1
+\& my $mymeta = $mm\->mymeta;
+.Ve
+.PP
+Generate MYMETA information as a hash either from an existing CPAN Meta file
+(META.json or META.yml) or from internal data.
+.PP
+\fIwrite_mymeta\fR
+.IX Subsection "write_mymeta"
+.PP
+.Vb 1
+\& $self\->write_mymeta( $mymeta );
+.Ve
+.PP
+Write MYMETA information to MYMETA.json and MYMETA.yml.
+.PP
+\fIrealclean (o)\fR
+.IX Subsection "realclean (o)"
+.PP
+Defines the realclean target.
+.PP
+\fIrealclean_subdirs_target\fR
+.IX Subsection "realclean_subdirs_target"
+.PP
+.Vb 1
+\& my $make_frag = $MM\->realclean_subdirs_target;
+.Ve
+.PP
+Returns the realclean_subdirs target. This is used by the realclean
+target to call realclean on any subdirectories which contain Makefiles.
+.PP
+\fIsignature_target\fR
+.IX Subsection "signature_target"
+.PP
+.Vb 1
+\& my $target = $mm\->signature_target;
+.Ve
+.PP
+Generate the signature target.
+.PP
+Writes the file SIGNATURE with "cpansign \-s".
+.PP
+\fIdistsignature_target\fR
+.IX Subsection "distsignature_target"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->distsignature_target;
+.Ve
+.PP
+Generates the distsignature target to add SIGNATURE to the MANIFEST in the
+distdir.
+.PP
+\fIspecial_targets\fR
+.IX Subsection "special_targets"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->special_targets
+.Ve
+.PP
+Returns a make fragment containing any targets which have special
+meaning to make. For example, .SUFFIXES and .PHONY.
+.SS "Init methods"
+.IX Subsection "Init methods"
+Methods which help initialize the MakeMaker object and macros.
+.PP
+\fIinit_ABSTRACT\fR
+.IX Subsection "init_ABSTRACT"
+.PP
+.Vb 1
+\& $mm\->init_ABSTRACT
+.Ve
+.PP
+\fIinit_INST\fR
+.IX Subsection "init_INST"
+.PP
+.Vb 1
+\& $mm\->init_INST;
+.Ve
+.PP
+Called by init_main. Sets up all INST_* variables except those related
+to XS code. Those are handled in init_xs.
+.PP
+\fIinit_INSTALL\fR
+.IX Subsection "init_INSTALL"
+.PP
+.Vb 1
+\& $mm\->init_INSTALL;
+.Ve
+.PP
+Called by init_main. Sets up all INSTALL_* variables (except
+INSTALLDIRS) and *PREFIX.
+.PP
+\fIinit_INSTALL_from_PREFIX\fR
+.IX Subsection "init_INSTALL_from_PREFIX"
+.PP
+.Vb 1
+\& $mm\->init_INSTALL_from_PREFIX;
+.Ve
+.PP
+\fIinit_from_INSTALL_BASE\fR
+.IX Subsection "init_from_INSTALL_BASE"
+.PP
+.Vb 1
+\& $mm\->init_from_INSTALL_BASE
+.Ve
+.PP
+\fIinit_VERSION Abstract\fR
+.IX Subsection "init_VERSION Abstract"
+.PP
+.Vb 1
+\& $mm\->init_VERSION
+.Ve
+.PP
+Initialize macros representing versions of MakeMaker and other tools
+.PP
+MAKEMAKER: path to the MakeMaker module.
+.PP
+MM_VERSION: ExtUtils::MakeMaker Version
+.PP
+MM_REVISION: ExtUtils::MakeMaker version control revision (for backwards
+ compat)
+.PP
+VERSION: version of your module
+.PP
+VERSION_MACRO: which macro represents the version (usually 'VERSION')
+.PP
+VERSION_SYM: like version but safe for use as an RCS revision number
+.PP
+DEFINE_VERSION: \-D line to set the module version when compiling
+.PP
+XS_VERSION: version in your .xs file. Defaults to $(VERSION)
+.PP
+XS_VERSION_MACRO: which macro represents the XS version.
+.PP
+XS_DEFINE_VERSION: \-D line to set the xs version when compiling.
+.PP
+Called by init_main.
+.PP
+\fIinit_tools\fR
+.IX Subsection "init_tools"
+.PP
+.Vb 1
+\& $MM\->init_tools();
+.Ve
+.PP
+Initializes the simple macro definitions used by \fBtools_other()\fR and
+places them in the \f(CW$MM\fR object. These use conservative cross platform
+versions and should be overridden with platform specific versions for
+performance.
+.PP
+Defines at least these macros.
+.PP
+.Vb 1
+\& Macro Description
+\&
+\& NOOP Do nothing
+\& NOECHO Tell make not to display the command itself
+\&
+\& SHELL Program used to run shell commands
+\&
+\& ECHO Print text adding a newline on the end
+\& RM_F Remove a file
+\& RM_RF Remove a directory
+\& TOUCH Update a file\*(Aqs timestamp
+\& TEST_F Test for a file\*(Aqs existence
+\& TEST_S Test the size of a file
+\& CP Copy a file
+\& CP_NONEMPTY Copy a file if it is not empty
+\& MV Move a file
+\& CHMOD Change permissions on a file
+\& FALSE Exit with non\-zero
+\& TRUE Exit with zero
+\&
+\& UMASK_NULL Nullify umask
+\& DEV_NULL Suppress all command output
+.Ve
+.PP
+\fIinit_others\fR
+.IX Subsection "init_others"
+.PP
+.Vb 1
+\& $MM\->init_others();
+.Ve
+.PP
+Initializes the macro definitions having to do with compiling and
+linking used by \fBtools_other()\fR and places them in the \f(CW$MM\fR object.
+.PP
+If there is no description, its the same as the parameter to
+\&\fBWriteMakefile()\fR documented in ExtUtils::MakeMaker.
+.PP
+\fItools_other\fR
+.IX Subsection "tools_other"
+.PP
+.Vb 1
+\& my $make_frag = $MM\->tools_other;
+.Ve
+.PP
+Returns a make fragment containing definitions for the macros \fBinit_others()\fR
+initializes.
+.PP
+\fIinit_DIRFILESEP Abstract\fR
+.IX Subsection "init_DIRFILESEP Abstract"
+.PP
+.Vb 2
+\& $MM\->init_DIRFILESEP;
+\& my $dirfilesep = $MM\->{DIRFILESEP};
+.Ve
+.PP
+Initializes the DIRFILESEP macro which is the separator between the
+directory and filename in a filepath. ie. / on Unix, \e on Win32 and
+nothing on VMS.
+.PP
+For example:
+.PP
+.Vb 2
+\& # instead of $(INST_ARCHAUTODIR)/extralibs.ld
+\& $(INST_ARCHAUTODIR)$(DIRFILESEP)extralibs.ld
+.Ve
+.PP
+Something of a hack but it prevents a lot of code duplication between
+MM_* variants.
+.PP
+Do not use this as a separator between directories. Some operating
+systems use different separators between subdirectories as between
+directories and filenames (for example: VOLUME:[dir1.dir2]file on VMS).
+.PP
+\fIinit_linker Abstract\fR
+.IX Subsection "init_linker Abstract"
+.PP
+.Vb 1
+\& $mm\->init_linker;
+.Ve
+.PP
+Initialize macros which have to do with linking.
+.PP
+PERL_ARCHIVE: path to libperl.a equivalent to be linked to dynamic
+extensions.
+.PP
+PERL_ARCHIVE_AFTER: path to a library which should be put on the
+linker command line \fIafter\fR the external libraries to be linked to
+dynamic extensions. This may be needed if the linker is one-pass, and
+Perl includes some overrides for C RTL functions, such as \fBmalloc()\fR.
+.PP
+EXPORT_LIST: name of a file that is passed to linker to define symbols
+to be exported.
+.PP
+Some OSes do not need these in which case leave it blank.
+.PP
+\fIinit_platform\fR
+.IX Subsection "init_platform"
+.PP
+.Vb 1
+\& $mm\->init_platform
+.Ve
+.PP
+Initialize any macros which are for platform specific use only.
+.PP
+A typical one is the version number of your OS specific module.
+(ie. MM_Unix_VERSION or MM_VMS_VERSION).
+.PP
+\fIinit_MAKE\fR
+.IX Subsection "init_MAKE"
+.PP
+.Vb 1
+\& $mm\->init_MAKE
+.Ve
+.PP
+Initialize MAKE from either a MAKE environment variable or \f(CW$Config\fR{make}.
+.SS Tools
+.IX Subsection "Tools"
+A grab bag of methods to generate specific macros and commands.
+.PP
+\fImanifypods\fR
+.IX Subsection "manifypods"
+.PP
+Defines targets and routines to translate the pods into manpages and
+put them into the INST_* directories.
+.PP
+\fIPOD2MAN_macro\fR
+.IX Subsection "POD2MAN_macro"
+.PP
+.Vb 1
+\& my $pod2man_macro = $self\->POD2MAN_macro
+.Ve
+.PP
+Returns a definition for the POD2MAN macro. This is a program
+which emulates the pod2man utility. You can add more switches to the
+command by simply appending them on the macro.
+.PP
+Typical usage:
+.PP
+.Vb 1
+\& $(POD2MAN) \-\-section=3 \-\-perm_rw=$(PERM_RW) podfile1 man_page1 ...
+.Ve
+.PP
+\fItest_via_harness\fR
+.IX Subsection "test_via_harness"
+.PP
+.Vb 1
+\& my $command = $mm\->test_via_harness($perl, $tests);
+.Ve
+.PP
+Returns a \f(CW$command\fR line which runs the given set of \f(CW$tests\fR with
+Test::Harness and the given \f(CW$perl\fR.
+.PP
+Used on the t/*.t files.
+.PP
+\fItest_via_script\fR
+.IX Subsection "test_via_script"
+.PP
+.Vb 1
+\& my $command = $mm\->test_via_script($perl, $script);
+.Ve
+.PP
+Returns a \f(CW$command\fR line which just runs a single test without
+Test::Harness. No checks are done on the results, they're just
+printed.
+.PP
+Used for test.pl, since they don't always follow Test::Harness
+formatting.
+.PP
+\fItool_autosplit\fR
+.IX Subsection "tool_autosplit"
+.PP
+Defines a simple perl call that runs autosplit. May be deprecated by
+pm_to_blib soon.
+.PP
+\fIarch_check\fR
+.IX Subsection "arch_check"
+.PP
+.Vb 4
+\& my $arch_ok = $mm\->arch_check(
+\& $INC{"Config.pm"},
+\& File::Spec\->catfile($Config{archlibexp}, "Config.pm")
+\& );
+.Ve
+.PP
+A sanity check that what Perl thinks the architecture is and what
+Config thinks the architecture is are the same. If they're not it
+will return false and show a diagnostic message.
+.PP
+When building Perl it will always return true, as nothing is installed
+yet.
+.PP
+The interface is a bit odd because this is the result of a
+quick refactoring. Don't rely on it.
+.SS "File::Spec wrappers"
+.IX Subsection "File::Spec wrappers"
+ExtUtils::MM_Any is a subclass of File::Spec. The methods noted here
+override File::Spec.
+.PP
+\fIcatfile\fR
+.IX Subsection "catfile"
+.PP
+File::Spec <= 0.83 has a bug where the file part of catfile is not
+canonicalized. This override fixes that bug.
+.SS Misc
+.IX Subsection "Misc"
+Methods I can't really figure out where they should go yet.
+.PP
+\fIfind_tests\fR
+.IX Subsection "find_tests"
+.PP
+.Vb 1
+\& my $test = $mm\->find_tests;
+.Ve
+.PP
+Returns a string suitable for feeding to the shell to return all
+tests in t/*.t.
+.PP
+\fIfind_tests_recursive\fR
+.IX Subsection "find_tests_recursive"
+.PP
+.Vb 1
+\& my $tests = $mm\->find_tests_recursive;
+.Ve
+.PP
+Returns a string suitable for feeding to the shell to return all
+tests in t/ but recursively. Equivalent to
+.PP
+.Vb 1
+\& my $tests = $mm\->find_tests_recursive_in(\*(Aqt\*(Aq);
+.Ve
+.PP
+\fIfind_tests_recursive_in\fR
+.IX Subsection "find_tests_recursive_in"
+.PP
+.Vb 1
+\& my $tests = $mm\->find_tests_recursive_in($dir);
+.Ve
+.PP
+Returns a string suitable for feeding to the shell to return all
+tests in \f(CW$dir\fR recursively.
+.PP
+\fIextra_clean_files\fR
+.IX Subsection "extra_clean_files"
+.PP
+.Vb 1
+\& my @files_to_clean = $MM\->extra_clean_files;
+.Ve
+.PP
+Returns a list of OS specific files to be removed in the clean target in
+addition to the usual set.
+.PP
+\fIinstallvars\fR
+.IX Subsection "installvars"
+.PP
+.Vb 1
+\& my @installvars = $mm\->installvars;
+.Ve
+.PP
+A list of all the INSTALL* variables without the INSTALL prefix. Useful
+for iteration or building related variable sets.
+.PP
+\fIlibscan\fR
+.IX Subsection "libscan"
+.PP
+.Vb 1
+\& my $wanted = $self\->libscan($path);
+.Ve
+.PP
+Takes a path to a file or dir and returns an empty string if we don't
+want to include this file in the library. Otherwise it returns the
+the \f(CW$path\fR unchanged.
+.PP
+Mainly used to exclude version control administrative directories
+and base-level \fIREADME.pod\fR from installation.
+.PP
+\fIplatform_constants\fR
+.IX Subsection "platform_constants"
+.PP
+.Vb 1
+\& my $make_frag = $mm\->platform_constants
+.Ve
+.PP
+Returns a make fragment defining all the macros initialized in
+\&\fBinit_platform()\fR rather than put them in \fBconstants()\fR.
+.PP
+\fIpost_constants (o)\fR
+.IX Subsection "post_constants (o)"
+.PP
+Returns an empty string per default. Dedicated to overrides from
+within Makefile.PL after all constants have been defined.
+.PP
+\fIpost_initialize (o)\fR
+.IX Subsection "post_initialize (o)"
+.PP
+Returns an empty string per default. Used in Makefile.PLs to add some
+chunk of text to the Makefile after the object is initialized.
+.PP
+\fIpostamble (o)\fR
+.IX Subsection "postamble (o)"
+.PP
+Returns an empty string. Can be used in Makefile.PLs to write some
+text to the Makefile at the end.
+.SH AUTHOR
+.IX Header "AUTHOR"
+Michael G Schwern <schwern@pobox.com> and the denizens of
+makemaker@perl.org with code from ExtUtils::MM_Unix and
+ExtUtils::MM_Win32.