@node ExtUtils/MM_Unix, ExtUtils/MM_VMS, ExtUtils/MM_OS2, Module List
@unnumbered methods used by ExtUtils::MakeMaker


@unnumberedsec NAME

ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker

@unnumberedsec SYNOPSIS

@code{require ExtUtils::MM_Unix;}

@unnumberedsec DESCRIPTION

The methods provided by this package are designed to be used in
conjunction with ExtUtils::MakeMaker. When MakeMaker writes a
Makefile, it creates one or more objects that inherit their methods
from a package @code{MM}. MM itself doesn@'t provide any methods, but it
ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
specific packages take the responsibility for all the methods provided
by MM_Unix. We are trying to reduce the number of the necessary
overrides by defining rather primitive operations within
ExtUtils::MM_Unix.

If you are going to write a platform specific MM package, please try
to limit the necessary overrides to primitive methods, and if it is not
possible to do so, let@'s work out how to achieve that gain.

If you are overriding any of these methods in your Makefile.PL (in the
MY class), please report that to the makemaker mailing list. We are
trying to minimize the necessary method overrides and switch to data
driven Makefile.PLs wherever possible. In the long run less methods
will be overridable via the MY class.

@unnumberedsec METHODS

The following description of methods is still under
development. Please refer to the code for not suitably documented
sections and complain loudly to the makemaker mailing list.

Not all of the methods below are overridable in a
Makefile.PL. Overridable methods are marked as (o). All methods are
overridable by a platform specific MM_*.pm file (See
@xref{ExtUtils/MM_VMS,ExtUtils/MM_VMS}, and @xref{ExtUtils/MM_OS2,ExtUtils/MM_OS2},).

@unnumberedsubsec Preloaded methods

@table @asis
@item canonpath
No physical check on the filesystem, but a logical cleanup of a
path. On UNIX eliminated successive slashes and successive "/.".

@item catdir
Concatenate two or more directory names to form a complete path ending
with a directory. But remove the trailing slash from the resulting
string, because it doesn@'t look good, isn@'t necessary and confuses
OS2. Of course, if this is the root directory, don@'t cut off the
trailing slash :-)

@item catfile
Concatenate one or more directory names and a filename to form a
complete path ending with a filename

@item curdir
Returns a string representing of the current directory.  "." on UNIX.

@item rootdir
Returns a string representing of the root directory.  "/" on UNIX.

@item updir
Returns a string representing of the parent directory.  ".." on UNIX.

@end table
@unnumberedsubsec SelfLoaded methods

@table @asis
@item c_o (o)
Defines the suffix rules to compile different flavors of C files to
object files.

@item cflags (o)
Does very much the same as the cflags script in the perl
distribution. It doesn@'t return the whole compiler command line, but
initializes all of its parts. The const_cccmd method then actually
returns the definition of the CCCMD macro which uses these parts.

@item clean (o)
Defines the clean target.

@item const_cccmd (o)
Returns the full compiler call for C programs and stores the
definition in CONST_CCCMD.

@item const_config (o)
Defines a couple of constants in the Makefile that are imported from
%Config.

@item const_loadlibs (o)
Defines EXTRALIBS, LDLOADLIBS, BSLOADLIBS, LD_RUN_PATH. See
@xref{ExtUtils/Liblist,ExtUtils/Liblist}, for details.

@item constants (o)
Initializes lots of constants and .SUFFIXES and .PHONY

@item depend (o)
Same as macro for the depend attribute.

@item dir_target (o)
Takes an array of directories that need to exist and returns a
Makefile entry for a .exists file in these directories. Returns
nothing, if the entry has already been processed. We@'re helpless
though, if the same directory comes as $(FOO) _and_ as "bar". Both of
them get an entry, that@'s why we use "::".

@item dist (o)
Defines a lot of macros for distribution support.

@item dist_basics (o)
Defines the targets distclean, distcheck, skipcheck, manifest.

@item dist_ci (o)
Defines a check in target for RCS.

@item dist_core (o)
Defeines the targets dist, tardist, zipdist, uutardist, shdist

@item dist_dir (o)
Defines the scratch directory target that will hold the distribution
before tar-ing (or shar-ing).

@item dist_test (o)
Defines a target that produces the distribution in the
scratchdirectory, and runs @'perl Makefile.PL; make ;make test@' in that
subdirectory.

@item dlsyms (o)
Used by AIX and VMS to define DL_FUNCS and DL_VARS and write the *.exp
files.

@item dynamic (o)
Defines the dynamic target.

@item dynamic_bs (o)
Defines targets for bootstrap files.

@item dynamic_lib (o)
Defines how to produce the *.so (or equivalent) files.

@item exescan
Deprecated method. Use libscan instead.

@item extliblist
Called by init_others, and calls ext ExtUtils::Liblist. See
@xref{ExtUtils/Liblist,ExtUtils/Liblist}, for details.

@item file_name_is_absolute
Takes as argument a path and returns true, if it is an absolute path.

@item find_perl
Finds the executables PERL and FULLPERL

@end table
@unnumberedsubsec Methods to actually produce chunks of text for the Makefile

The methods here are called in the order specified by
 @@ExtUtils::MakeMaker::MM_Sections. This manpage reflects the order as
well as possible. Some methods call each other, so in doubt refer to
the code.

@table @asis
@item force (o)
Just writes FORCE:

@item guess_name
Guess the name of this package by examining the working directory@'s
name. MakeMaker calls this only if the developer has not supplied a
NAME attribute.

@item has_link_code
Returns true if C, XS, MYEXTLIB or similar objects exist within this
object that need a compiler. Does not descend into subdirectories as
needs_linking() does.

@item init_dirscan
Initializes DIR, XS, PM, C, O_FILES, H, PL_FILES, MAN*PODS, EXE_FILES.

@item init_main
Initializes NAME, FULLEXT, BASEEXT, PARENT_NAME, DLBASE, PERL_SRC,
PERL_LIB, PERL_ARCHLIB, PERL_INC, INSTALLDIRS, INST_*, INSTALL*,
PREFIX, CONFIG, AR, AR_STATIC_ARGS, LD, OBJ_EXT, LIB_EXT, MAP_TARGET,
LIBPERL_A, VERSION_FROM, VERSION, DISTNAME, VERSION_SYM.

@item init_others
Initializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH,
OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, NOOP, FIRST_MAKEFILE,
MAKEFILE, NOECHO, RM_F, RM_RF, TOUCH, CP, MV, CHMOD, UMASK_NULL

@item install (o)
Defines the install target.

@item installbin (o)
Defines targets to install EXE_FILES.

@item libscan (o)
Takes a path to a file that is found by init_dirscan and returns false
if we don@'t want to include this file in the library. Mainly used to
exclude RCS, CVS, and SCCS directories from installation.

@item linkext (o)
Defines the linkext target which in turn defines the LINKTYPE.

@item lsdir
Takes as arguments a directory name and a regular expression. Returns
all entries in the directory that match the regular expression.

@item macro (o)
Simple subroutine to insert the macros defined by the macro attribute
into the Makefile.

@item makeaperl (o)
Called by staticmake. Defines how to write the Makefile to produce a
static new perl.

@item makefile (o)
Defines how to rewrite the Makefile.

@item manifypods (o)
Defines targets and routines to translate the pods into manpages and
put them into the INST_* directories.

@item maybe_command
Returns true, if the argument is likely to be a command.

@item maybe_command_in_dirs
method under development. Not yet used. Ask Ilya :-)

@item needs_linking (o)
Does this module need linking? Looks into subdirectory objects (see
also has_link_code())

@item nicetext
misnamed method (will have to be changed). The MM_Unix method just
returns the argument without further processing.

On VMS used to insure that colons marking targets are preceded by
space - most Unix Makes don@'t need this, but it@'s necessary under VMS
to distinguish the target delimiter from a colon appearing as part of
a filespec.

@item parse_version
parse a file and return what you think is $VERSION in this file set to

@item pasthru (o)
Defines the string that is passed to recursive make calls in
subdirectories.

@item path
Takes no argument, returns the environment variable PATH as an array.

@item perl_script
Takes one argument, a file name, and returns the file name, if the
argument is likely to be a perl script. On MM_Unix this is true for
any ordinary, readable file.

@item perldepend (o)
Defines the dependency from all *.h files that come with the perl
distribution.

@item pm_to_blib
Defines target that copies all files in the hash PM to their
destination and autosplits them. See @samp{pm_to_blib}, @xref{ExtUtils/Install,ExtUtils/Install},

@item post_constants (o)
Returns an empty string per default. Dedicated to overrides from
within Makefile.PL after all constants have been defined.

@item post_initialize (o)
Returns an empty string per default. Used in Makefile.PLs to add some
chunk of text to the Makefile after the object is initialized.

@item postamble (o)
Returns an empty string. Can be used in Makefile.PLs to write some
text to the Makefile at the end.

@item prefixify
Check a path variable in $self from %Config, if it contains a prefix,
and replace it with another one.

Takes as arguments an attribute name, a search prefix and a
replacement prefix. Changes the attribute in the object.

@item processPL (o)
Defines targets to run *.PL files.

@item realclean (o)
Defines the realclean target.

@item replace_manpage_separator
Takes the name of a package, which may be a nested package, in the
form Foo/Bar and replaces the slash with @code{::}. Returns the replacement.

@item static (o)
Defines the static target.

@item static_lib (o)
Defines how to produce the *.a (or equivalent) files.

@item staticmake (o)
Calls makeaperl.

@item subdir_x (o)
Helper subroutine for subdirs

@item subdirs (o)
Defines targets to process subdirectories.

@item test (o)
Defines the test targets.

@item test_via_harness (o)
Helper method to write the test targets

@item test_via_script (o)
Other helper method for test.

@item tool_autosplit (o)
Defines a simple perl call that runs autosplit. May be deprecated by
pm_to_blib soon.

@item tools_other (o)
Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
the Makefile. Also defines the perl programs MKPATH,
WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.

@item tool_xsubpp (o)
Determines typemaps, xsubpp version, prototype behaviour.

@item top_targets (o)
Defines the targets all, subdirs, config, and O_FILES

@item writedoc
Obsolete, depecated method. Not used since Version 5.21.

@item xs_c (o)
Defines the suffix rules to compile XS files to C.

@item xs_o (o)
Defines suffix rules to go from XS to object files directly. This is
only intended for broken make implementations.

@end table
@unnumberedsec SEE ALSO

@xref{ExtUtils/MakeMaker,ExtUtils/MakeMaker},

