ExtUtils::MM_Any

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
ExtUtils::MM_Any(3)  User Contributed Perl Documentation  ExtUtils::MM_Any(3)



NAME
       ExtUtils::MM_Any - Platform-agnostic MM methods

SYNOPSIS
	 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);

DESCRIPTION
       FOR INTERNAL USE ONLY!

       ExtUtils::MM_Any is a superclass for the ExtUtils::MM_* set of mod-
       ules.  It contains methods which are either inherently cross-platform
       or are written in a cross-platform manner.

       Subclass off of ExtUtils::MM_Any and ExtUtils::MM_Unix.	This is a
       temporary solution.

       THIS MAY BE TEMPORARY!

METHODS
       Any methods marked Abstract must be implemented by subclasses.

       Cross-platform helper methods

       These are methods which help writing cross-platform code.

       os_flavor  Abstract

	   my @os_flavor = $mm->os_flavor;

       @os_flavor is the style of operating system this is, usually corre-
       sponding to the MM_*.pm file we’re using.

       The first element of @os_flavor is the major family (ie. Unix, Win-
       dows, VMS, OS/2, etc...) and the rest are sub families.

       Some examples:

	   Cygwin98	  (’Unix’,  ’Cygwin’, ’Cygwin9x’)
	   Windows NT	  (’Win32’, ’WinNT’)
	   Win98	  (’Win32’, ’Win9x’)
	   Linux	  (’Unix’,  ’Linux’)
	   MacOS X	  (’Unix’,  ’Darwin’, ’MacOS’, ’MacOS X’)
	   OS/2		  (’OS/2’)

       This is used to write code for styles of operating system.  See
       os_flavor_is() for use.

       os_flavor_is

	   my $is_this_flavor = $mm->os_flavor_is($this_flavor);
	   my $is_this_flavor = $mm->os_flavor_is(@one_of_these_flavors);

       Checks to see if the current operating system is one of the given fla-
       vors.

       This is useful for code like:

	   if( $mm->os_flavor_is(’Unix’) ) {
	       $out = ‘foo 2>&1‘;
	   }
	   else {
	       $out = ‘foo‘;
	   }

       split_command

	   my @cmds = $MM->split_command($cmd, @args);

       Most OS have a maximum command length they can execute at once.	Large
       modules can easily generate commands well past that limit.  Its neces-
       sary to split long commands up into a series of shorter commands.

       "split_command" will return a series of @cmds each processing part of
       the args.  Collectively they will process all the arguments.  Each
       individual line in @cmds will not be longer than the
       $self->max_exec_len being careful to take into account macro expan-
       sion.

       $cmd should include any switches and repeated initial arguments.

       If no @args are given, no @cmds will be returned.

       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:

	   $self->split_command($cmd, %pod2man);

       echo

	   my @commands = $MM->echo($text);
	   my @commands = $MM->echo($text, $file);
	   my @commands = $MM->echo($text, $file, $appending);

       Generates a set of @commands which print the $text to a $file.

       If $file is not given, output goes to STDOUT.

       If $appending is true the $file will be appended to rather than over-
       written.

       wraplist

	 my $args = $mm->wraplist(@list);

       Takes an array of items and turns them into a well-formatted list of
       arguments.  In most cases this is simply something like:

	   FOO \
	   BAR \
	   BAZ

       maketext_filter

	   my $filter_make_text = $mm->maketext_filter($make_text);

       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.

       By default it does nothing.

       This method is protected and not intended to be called outside of
       MakeMaker.

       cd  Abstract

	 my $subdir_cmd = $MM->cd($subdir, @cmds);

       This will generate a make fragment which runs the @cmds in the given
       $dir.  The rough equivalent to this, except cross platform.

	 cd $subdir && $cmd

       Currently $dir can only go down one level.  "foo" is fine.  "foo/bar"
       is not.	"../foo" is right out.

       The resulting $subdir_cmd has no leading tab nor trailing newline.
       This makes it easier to embed in a make string.	For example.

	     my $make = sprintf <<’CODE’, $subdir_cmd;
	 foo :
	     $(ECHO) what
	     %s
	     $(ECHO) mouche
	 CODE

       oneliner	 Abstract

	 my $oneliner = $MM->oneliner($perl_code);
	 my $oneliner = $MM->oneliner($perl_code, \@switches);

       This will generate a perl one-liner safe for the particular platform
       you’re on based on the given $perl_code and @switches (a -e is
       assumed) suitable for using in a make target.  It will use the proper
       shell quoting and escapes.

       $(PERLRUN) will be used as perl.

       Any newlines in $perl_code will be escaped.  Leading and trailing new-
       lines will be stripped.	Makes this idiom much easier:

	   my $code = $MM->oneliner(<<’CODE’, [...switches...]);
       some code here
       another line here
       CODE

       Usage might be something like:

	   # an echo emulation
	   $oneliner = $MM->oneliner(’print "Foo\n"’);
	   $make = ’$oneliner > somefile’;

       All dollar signs must be doubled in the $perl_code if you expect them
       to be interpreted normally, otherwise it will be considered a make
       macro.  Also remember to quote make macros else it might be used as a
       bareword.  For example:

	   # Assign the value of the $(VERSION_FROM) make macro to $vf.
	   $oneliner = $MM->oneliner(’$$vf = "$(VERSION_FROM)"’);

       Its currently very simple and may be expanded sometime in the figure
       to include more flexible code and switches.

       quote_literal  Abstract

	   my $safe_text = $MM->quote_literal($text);

       This will quote $text so it is interpreted literally in the shell.

       For example, on Unix this would escape any single-quotes in $text and
       put single-quotes around the whole thing.

       escape_newlines	Abstract

	   my $escaped_text = $MM->escape_newlines($text);

       Shell escapes newlines in $text.

       max_exec_len  Abstract

	   my $max_exec_len = $MM->max_exec_len;

       Calculates the maximum command size the OS can exec.  Effectively,
       this is the max size of a shell command line.

       make

	   my $make = $MM->make;

       Returns the make variant we’re generating the Makefile for.  This
       attempts to do some normalization on the information from %Config or
       the user.

       Targets

       These are methods which produce make targets.

       all_target

       Generate the default target ’all’.

       blibdirs_target

	   my $make_frag = $mm->blibdirs_target;

       Creates the blibdirs target which creates all the directories we use
       in blib/.

       The blibdirs.ts target is deprecated.  Depend on blibdirs instead.

       clean (o)

       Defines the clean target.

       clean_subdirs_target

	 my $make_frag = $MM->clean_subdirs_target;

       Returns the clean_subdirs target.  This is used by the clean target to
       call clean on any subdirectories which contain Makefiles.

       dir_target

	   my $make_frag = $mm->dir_target(@directories);

       Generates targets to create the specified directories and set its per-
       mission to 0755.

       Because depending on a directory to just ensure it exists doesn’t work
       too well (the modified time changes too often) dir_target() 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 seperate the directory from the file.

	   yourdirectory$(DIRFILESEP).exists

       distdir

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

       dist_test

       Defines a target that produces the distribution in the scratchdirec-
       tory, and runs ’perl Makefile.PL; make ;make test’ in that subdirec-
       tory.

       dynamic (o)

       Defines the dynamic target.

       makemakerdflt_target

	 my $make_frag = $mm->makemakerdflt_target

       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 con-
       fused or something gets snuck in before the real ’all’ target.

       manifypods_target

	 my $manifypods_target = $self->manifypods_target;

       Generates the manifypods target.	 This target generates man pages from
       all POD files in MAN1PODS and MAN3PODS.

       metafile_target

	   my $target = $mm->metafile_target;

       Generate the metafile target.

       Writes the file META.yml YAML encoded meta-data about the module in
       the distdir.  The format follows Module::Build’s as closely as possi-
       ble.

       metafile_data

	   my @metadata_pairs = $mm->metafile_data(\%meta_add, \%meta_merge);

       Returns the data which MakeMaker turns into the META.yml file.

       Values of %meta_add will overwrite any existing metadata in those
       keys.  %meta_merge will be merged with them.

       metafile_file

	   my $meta_yml = $mm->metafile_file(@metadata_pairs);

       Turns the @metadata_pairs into YAML.

       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.

       distmeta_target

	   my $make_frag = $mm->distmeta_target;

       Generates the distmeta target to add META.yml to the MANIFEST in the
       distdir.

       realclean (o)

       Defines the realclean target.

       realclean_subdirs_target

	 my $make_frag = $MM->realclean_subdirs_target;

       Returns the realclean_subdirs target.  This is used by the realclean
       target to call realclean on any subdirectories which contain Make-
       files.

       signature_target

	   my $target = $mm->signature_target;

       Generate the signature target.

       Writes the file SIGNATURE with "cpansign -s".

       distsignature_target

	   my $make_frag = $mm->distsignature_target;

       Generates the distsignature target to add SIGNATURE to the MANIFEST in
       the distdir.

       special_targets

	 my $make_frag = $mm->special_targets

       Returns a make fragment containing any targets which have special
       meaning to make.	 For example, .SUFFIXES and .PHONY.

       Init methods

       Methods which help initialize the MakeMaker object and macros.

       init_ABSTRACT

	   $mm->init_ABSTRACT

       init_INST

	   $mm->init_INST;

       Called by init_main.  Sets up all INST_* variables except those
       related to XS code.  Those are handled in init_xs.

       init_INSTALL

	   $mm->init_INSTALL;

       Called by init_main.  Sets up all INSTALL_* variables (except
       INSTALLDIRS) and *PREFIX.

       init_INSTALL_from_PREFIX

	 $mm->init_INSTALL_from_PREFIX;

       init_from_INSTALL_BASE

	   $mm->init_from_INSTALL_BASE

       init_VERSION  Abstract

	   $mm->init_VERSION

       Initialize macros representing versions of MakeMaker and other tools

       MAKEMAKER: path to the MakeMaker module.

       MM_VERSION: ExtUtils::MakeMaker Version

       MM_REVISION: ExtUtils::MakeMaker version control revision (for back-
       wards
		    compat)

       VERSION: version of your module

       VERSION_MACRO: which macro represents the version (usually ’VERSION’)

       VERSION_SYM: like version but safe for use as an RCS revision number

       DEFINE_VERSION: -D line to set the module version when compiling

       XS_VERSION: version in your .xs file.  Defaults to $(VERSION)

       XS_VERSION_MACRO: which macro represents the XS version.

       XS_DEFINE_VERSION: -D line to set the xs version when compiling.

       Called by init_main.

       init_others  Abstract

	   $MM->init_others();

       Initializes the macro definitions used by tools_other() and places
       them in the $MM object.

       If there is no description, its the same as the parameter to
       WriteMakefile() documented in ExtUtils::MakeMaker.

       Defines at least these macros.

	 Macro		   Description

	 NOOP		   Do nothing
	 NOECHO		   Tell make not to display the command itself

	 MAKEFILE
	 FIRST_MAKEFILE
	 MAKEFILE_OLD
	 MAKE_APERL_FILE   File used by MAKE_APERL

	 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’s timestamp
	 TEST_F		   Test for a file’s existence
	 CP		   Copy a file
	 MV		   Move a file
	 CHMOD		   Change permissions on a
			   file

	 UMASK_NULL	   Nullify umask
	 DEV_NULL	   Suppress all command output

       init_DIRFILESEP	Abstract

	 $MM->init_DIRFILESEP;
	 my $dirfilesep = $MM->{DIRFILESEP};

       Initializes the DIRFILESEP macro which is the seperator between the
       directory and filename in a filepath.  ie. / on Unix, \ on Win32 and
       nothing on VMS.

       For example:

	   # instead of $(INST_ARCHAUTODIR)/extralibs.ld
	   $(INST_ARCHAUTODIR)$(DIRFILESEP)extralibs.ld

       Something of a hack but it prevents a lot of code duplication between
       MM_* variants.

       Do not use this as a seperator between directories.  Some operating
       systems use different seperators between subdirectories as between
       directories and filenames (for example:	VOLUME:[dir1.dir2]file on
       VMS).

       init_linker  Abstract

	   $mm->init_linker;

       Initialize macros which have to do with linking.

       PERL_ARCHIVE: path to libperl.a equivalent to be linked to dynamic
       extensions.

       PERL_ARCHIVE_AFTER: path to a library which should be put on the
       linker command line after 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 malloc().

       EXPORT_LIST: name of a file that is passed to linker to define symbols
       to be exported.

       Some OSes do not need these in which case leave it blank.

       init_platform

	   $mm->init_platform

       Initialize any macros which are for platform specific use only.

       A typical one is the version number of your OS specific mocule.	(ie.
       MM_Unix_VERSION or MM_VMS_VERSION).

       init_MAKE

	   $mm->init_MAKE

       Initialize MAKE from either a MAKE environment variable or $Con-
       fig{make}.

       Tools

       A grab bag of methods to generate specific macros and commands.

       manifypods

       Defines targets and routines to translate the pods into manpages and
       put them into the INST_* directories.

       POD2MAN_macro

	 my $pod2man_macro = $self->POD2MAN_macro

       Returns a definition for the POD2MAN macro.  This is a program which
       emulates the pod2man utility.  You can add more switches to the com-
       mand by simply appending them on the macro.

       Typical usage:

	   $(POD2MAN) --section=3 --perm_rw=$(PERM_RW) podfile1 man_page1 ...

       test_via_harness

	 my $command = $mm->test_via_harness($perl, $tests);

       Returns a $command line which runs the given set of $tests with
       Test::Harness and the given $perl.

       Used on the t/*.t files.

       test_via_script

	 my $command = $mm->test_via_script($perl, $script);

       Returns a $command line which just runs a single test without
       Test::Harness.  No checks are done on the results, they’re just
       printed.

       Used for test.pl, since they don’t always follow Test::Harness format-
       ting.

       tool_autosplit

       Defines a simple perl call that runs autosplit. May be deprecated by
       pm_to_blib soon.

       File::Spec wrappers

       ExtUtils::MM_Any is a subclass of File::Spec.  The methods noted here
       override File::Spec.

       catfile

       File::Spec <= 0.83 has a bug where the file part of catfile is not
       canonicalized.  This override fixes that bug.

       Misc

       Methods I can’t really figure out where they should go yet.

       find_tests

	 my $test = $mm->find_tests;

       Returns a string suitable for feeding to the shell to return all tests
       in t/*.t.

       extra_clean_files

	   my @files_to_clean = $MM->extra_clean_files;

       Returns a list of OS specific files to be removed in the clean target
       in addition to the usual set.

       installvars

	   my @installvars = $mm->installvars;

       A list of all the INSTALL* variables without the INSTALL prefix.	 Use-
       ful for iteration or building related variable sets.

       libscan

	 my $wanted = $self->libscan($path);

       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 $path unchanged.

       Mainly used to exclude version control administrative directories from
       installation.

       platform_constants

	   my $make_frag = $mm->platform_constants

       Returns a make fragment defining all the macros initialized in
       init_platform() rather than put them in constants().

AUTHOR
       Michael G Schwern <schwern@pobox.com> and the denizens of make-
       maker@perl.org with code from ExtUtils::MM_Unix and ExtU-
       tils::MM_Win32.



perl v5.8.8			  2009-03-22		  ExtUtils::MM_Any(3)