[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/ExtUtils/ -> MM_Any.pm (source)

   1  package ExtUtils::MM_Any;
   2  
   3  use strict;
   4  use vars qw($VERSION @ISA);
   5  $VERSION = '6.42';
   6  
   7  use Carp;
   8  use File::Spec;
   9  BEGIN { @ISA = qw(File::Spec); }
  10  
  11  # We need $Verbose
  12  use ExtUtils::MakeMaker qw($Verbose);
  13  
  14  use ExtUtils::MakeMaker::Config;
  15  
  16  
  17  # So we don't have to keep calling the methods over and over again,
  18  # we have these globals to cache the values.  Faster and shrtr.
  19  my $Curdir  = __PACKAGE__->curdir;
  20  my $Rootdir = __PACKAGE__->rootdir;
  21  my $Updir   = __PACKAGE__->updir;
  22  
  23  
  24  =head1 NAME
  25  
  26  ExtUtils::MM_Any - Platform-agnostic MM methods
  27  
  28  =head1 SYNOPSIS
  29  
  30    FOR INTERNAL USE ONLY!
  31  
  32    package ExtUtils::MM_SomeOS;
  33  
  34    # Temporarily, you have to subclass both.  Put MM_Any first.
  35    require ExtUtils::MM_Any;
  36    require ExtUtils::MM_Unix;
  37    @ISA = qw(ExtUtils::MM_Any ExtUtils::Unix);
  38  
  39  =head1 DESCRIPTION
  40  
  41  B<FOR INTERNAL USE ONLY!>
  42  
  43  ExtUtils::MM_Any is a superclass for the ExtUtils::MM_* set of
  44  modules.  It contains methods which are either inherently
  45  cross-platform or are written in a cross-platform manner.
  46  
  47  Subclass off of ExtUtils::MM_Any I<and> ExtUtils::MM_Unix.  This is a
  48  temporary solution.
  49  
  50  B<THIS MAY BE TEMPORARY!>
  51  
  52  
  53  =head1 METHODS
  54  
  55  Any methods marked I<Abstract> must be implemented by subclasses.
  56  
  57  
  58  =head2 Cross-platform helper methods
  59  
  60  These are methods which help writing cross-platform code.
  61  
  62  
  63  
  64  =head3 os_flavor  I<Abstract>
  65  
  66      my @os_flavor = $mm->os_flavor;
  67  
  68  @os_flavor is the style of operating system this is, usually
  69  corresponding to the MM_*.pm file we're using.  
  70  
  71  The first element of @os_flavor is the major family (ie. Unix,
  72  Windows, VMS, OS/2, etc...) and the rest are sub families.
  73  
  74  Some examples:
  75  
  76      Cygwin98       ('Unix',  'Cygwin', 'Cygwin9x')
  77      Windows NT     ('Win32', 'WinNT')
  78      Win98          ('Win32', 'Win9x')
  79      Linux          ('Unix',  'Linux')
  80      MacOS X        ('Unix',  'Darwin', 'MacOS', 'MacOS X')
  81      OS/2           ('OS/2')
  82  
  83  This is used to write code for styles of operating system.  
  84  See os_flavor_is() for use.
  85  
  86  
  87  =head3 os_flavor_is
  88  
  89      my $is_this_flavor = $mm->os_flavor_is($this_flavor);
  90      my $is_this_flavor = $mm->os_flavor_is(@one_of_these_flavors);
  91  
  92  Checks to see if the current operating system is one of the given flavors.
  93  
  94  This is useful for code like:
  95  
  96      if( $mm->os_flavor_is('Unix') ) {
  97          $out = `foo 2>&1`;
  98      }
  99      else {
 100          $out = `foo`;
 101      }
 102  
 103  =cut
 104  
 105  sub os_flavor_is {
 106      my $self = shift;
 107      my %flavors = map { ($_ => 1) } $self->os_flavor;
 108      return (grep { $flavors{$_} } @_) ? 1 : 0;
 109  }
 110  
 111  
 112  =head3 split_command
 113  
 114      my @cmds = $MM->split_command($cmd, @args);
 115  
 116  Most OS have a maximum command length they can execute at once.  Large
 117  modules can easily generate commands well past that limit.  Its
 118  necessary to split long commands up into a series of shorter commands.
 119  
 120  C<split_command> will return a series of @cmds each processing part of
 121  the args.  Collectively they will process all the arguments.  Each
 122  individual line in @cmds will not be longer than the
 123  $self->max_exec_len being careful to take into account macro expansion.
 124  
 125  $cmd should include any switches and repeated initial arguments.
 126  
 127  If no @args are given, no @cmds will be returned.
 128  
 129  Pairs of arguments will always be preserved in a single command, this
 130  is a heuristic for things like pm_to_blib and pod2man which work on
 131  pairs of arguments.  This makes things like this safe:
 132  
 133      $self->split_command($cmd, %pod2man);
 134  
 135  
 136  =cut
 137  
 138  sub split_command {
 139      my($self, $cmd, @args) = @_;
 140  
 141      my @cmds = ();
 142      return(@cmds) unless @args;
 143  
 144      # If the command was given as a here-doc, there's probably a trailing
 145      # newline.
 146      chomp $cmd;
 147  
 148      # set aside 20% for macro expansion.
 149      my $len_left = int($self->max_exec_len * 0.80);
 150      $len_left -= length $self->_expand_macros($cmd);
 151  
 152      do {
 153          my $arg_str = '';
 154          my @next_args;
 155          while( @next_args = splice(@args, 0, 2) ) {
 156              # Two at a time to preserve pairs.
 157              my $next_arg_str = "\t  ". join ' ', @next_args, "\n";
 158  
 159              if( !length $arg_str ) {
 160                  $arg_str .= $next_arg_str
 161              }
 162              elsif( length($arg_str) + length($next_arg_str) > $len_left ) {
 163                  unshift @args, @next_args;
 164                  last;
 165              }
 166              else {
 167                  $arg_str .= $next_arg_str;
 168              }
 169          }
 170          chop $arg_str;
 171  
 172          push @cmds, $self->escape_newlines("$cmd \n$arg_str");
 173      } while @args;
 174  
 175      return @cmds;
 176  }
 177  
 178  
 179  sub _expand_macros {
 180      my($self, $cmd) = @_;
 181  
 182      $cmd =~ s{\$\((\w+)\)}{
 183          defined $self->{$1} ? $self->{$1} : "\$($1)"
 184      }e;
 185      return $cmd;
 186  }
 187  
 188  
 189  =head3 echo
 190  
 191      my @commands = $MM->echo($text);
 192      my @commands = $MM->echo($text, $file);
 193      my @commands = $MM->echo($text, $file, $appending);
 194  
 195  Generates a set of @commands which print the $text to a $file.
 196  
 197  If $file is not given, output goes to STDOUT.
 198  
 199  If $appending is true the $file will be appended to rather than
 200  overwritten.
 201  
 202  =cut
 203  
 204  sub echo {
 205      my($self, $text, $file, $appending) = @_;
 206      $appending ||= 0;
 207  
 208      my @cmds = map { '$(NOECHO) $(ECHO) '.$self->quote_literal($_) } 
 209                 split /\n/, $text;
 210      if( $file ) {
 211          my $redirect = $appending ? '>>' : '>';
 212          $cmds[0] .= " $redirect $file";
 213          $_ .= " >> $file" foreach @cmds[1..$#cmds];
 214      }
 215  
 216      return @cmds;
 217  }
 218  
 219  
 220  =head3 wraplist
 221  
 222    my $args = $mm->wraplist(@list);
 223  
 224  Takes an array of items and turns them into a well-formatted list of
 225  arguments.  In most cases this is simply something like:
 226  
 227      FOO \
 228      BAR \
 229      BAZ
 230  
 231  =cut
 232  
 233  sub wraplist {
 234      my $self = shift;
 235      return join " \\\n\t", @_;
 236  }
 237  
 238  
 239  =head3 maketext_filter
 240  
 241      my $filter_make_text = $mm->maketext_filter($make_text);
 242  
 243  The text of the Makefile is run through this method before writing to
 244  disk.  It allows systems a chance to make portability fixes to the
 245  Makefile.
 246  
 247  By default it does nothing.
 248  
 249  This method is protected and not intended to be called outside of
 250  MakeMaker.
 251  
 252  =cut
 253  
 254  sub maketext_filter { return $_[1] }
 255  
 256  
 257  =head3 cd  I<Abstract>
 258  
 259    my $subdir_cmd = $MM->cd($subdir, @cmds);
 260  
 261  This will generate a make fragment which runs the @cmds in the given
 262  $dir.  The rough equivalent to this, except cross platform.
 263  
 264    cd $subdir && $cmd
 265  
 266  Currently $dir can only go down one level.  "foo" is fine.  "foo/bar" is
 267  not.  "../foo" is right out.
 268  
 269  The resulting $subdir_cmd has no leading tab nor trailing newline.  This
 270  makes it easier to embed in a make string.  For example.
 271  
 272        my $make = sprintf <<'CODE', $subdir_cmd;
 273    foo :
 274        $(ECHO) what
 275        %s
 276        $(ECHO) mouche
 277    CODE
 278  
 279  
 280  =head3 oneliner  I<Abstract>
 281  
 282    my $oneliner = $MM->oneliner($perl_code);
 283    my $oneliner = $MM->oneliner($perl_code, \@switches);
 284  
 285  This will generate a perl one-liner safe for the particular platform
 286  you're on based on the given $perl_code and @switches (a -e is
 287  assumed) suitable for using in a make target.  It will use the proper
 288  shell quoting and escapes.
 289  
 290  $(PERLRUN) will be used as perl.
 291  
 292  Any newlines in $perl_code will be escaped.  Leading and trailing
 293  newlines will be stripped.  Makes this idiom much easier:
 294  
 295      my $code = $MM->oneliner(<<'CODE', [...switches...]);
 296  some code here
 297  another line here
 298  CODE
 299  
 300  Usage might be something like:
 301  
 302      # an echo emulation
 303      $oneliner = $MM->oneliner('print "Foo\n"');
 304      $make = '$oneliner > somefile';
 305  
 306  All dollar signs must be doubled in the $perl_code if you expect them
 307  to be interpreted normally, otherwise it will be considered a make
 308  macro.  Also remember to quote make macros else it might be used as a
 309  bareword.  For example:
 310  
 311      # Assign the value of the $(VERSION_FROM) make macro to $vf.
 312      $oneliner = $MM->oneliner('$$vf = "$(VERSION_FROM)"');
 313  
 314  Its currently very simple and may be expanded sometime in the figure
 315  to include more flexible code and switches.
 316  
 317  
 318  =head3 quote_literal  I<Abstract>
 319  
 320      my $safe_text = $MM->quote_literal($text);
 321  
 322  This will quote $text so it is interpreted literally in the shell.
 323  
 324  For example, on Unix this would escape any single-quotes in $text and
 325  put single-quotes around the whole thing.
 326  
 327  
 328  =head3 escape_newlines  I<Abstract>
 329  
 330      my $escaped_text = $MM->escape_newlines($text);
 331  
 332  Shell escapes newlines in $text.
 333  
 334  
 335  =head3 max_exec_len  I<Abstract>
 336  
 337      my $max_exec_len = $MM->max_exec_len;
 338  
 339  Calculates the maximum command size the OS can exec.  Effectively,
 340  this is the max size of a shell command line.
 341  
 342  =for _private
 343  $self->{_MAX_EXEC_LEN} is set by this method, but only for testing purposes.
 344  
 345  
 346  =head3 make
 347  
 348      my $make = $MM->make;
 349  
 350  Returns the make variant we're generating the Makefile for.  This attempts
 351  to do some normalization on the information from %Config or the user.
 352  
 353  =cut
 354  
 355  sub make {
 356      my $self = shift;
 357  
 358      my $make = lc $self->{MAKE};
 359  
 360      # Truncate anything like foomake6 to just foomake.
 361      $make =~ s/^(\w+make).*/$1/;
 362  
 363      # Turn gnumake into gmake.
 364      $make =~ s/^gnu/g/;
 365  
 366      return $make;
 367  }
 368  
 369  
 370  =head2 Targets
 371  
 372  These are methods which produce make targets.
 373  
 374  
 375  =head3 all_target
 376  
 377  Generate the default target 'all'.
 378  
 379  =cut
 380  
 381  sub all_target {
 382      my $self = shift;
 383  
 384      return <<'MAKE_EXT';
 385  all :: pure_all
 386      $(NOECHO) $(NOOP)
 387  MAKE_EXT
 388  
 389  }
 390  
 391  
 392  =head3 blibdirs_target
 393  
 394      my $make_frag = $mm->blibdirs_target;
 395  
 396  Creates the blibdirs target which creates all the directories we use
 397  in blib/.
 398  
 399  The blibdirs.ts target is deprecated.  Depend on blibdirs instead.
 400  
 401  
 402  =cut
 403  
 404  sub blibdirs_target {
 405      my $self = shift;
 406  
 407      my @dirs = map { uc "\$(INST_$_)" } qw(libdir archlib
 408                                             autodir archautodir
 409                                             bin script
 410                                             man1dir man3dir
 411                                            );
 412  
 413      my @exists = map { $_.'$(DFSEP).exists' } @dirs;
 414  
 415      my $make = sprintf <<'MAKE', join(' ', @exists);
 416  blibdirs : %s
 417      $(NOECHO) $(NOOP)
 418  
 419  # Backwards compat with 6.18 through 6.25
 420  blibdirs.ts : blibdirs
 421      $(NOECHO) $(NOOP)
 422  
 423  MAKE
 424  
 425      $make .= $self->dir_target(@dirs);
 426  
 427      return $make;
 428  }
 429  
 430  
 431  =head3 clean (o)
 432  
 433  Defines the clean target.
 434  
 435  =cut
 436  
 437  sub clean {
 438  # --- Cleanup and Distribution Sections ---
 439  
 440      my($self, %attribs) = @_;
 441      my @m;
 442      push(@m, '
 443  # Delete temporary files but do not touch installed files. We don\'t delete
 444  # the Makefile here so a later make realclean still has a makefile to use.
 445  
 446  clean :: clean_subdirs
 447  ');
 448  
 449      my @files = values %{$self->{XS}}; # .c files from *.xs files
 450      my @dirs  = qw(blib);
 451  
 452      # Normally these are all under blib but they might have been
 453      # redefined.
 454      # XXX normally this would be a good idea, but the Perl core sets
 455      # INST_LIB = ../../lib rather than actually installing the files.
 456      # So a "make clean" in an ext/ directory would blow away lib.
 457      # Until the core is adjusted let's leave this out.
 458  #     push @dirs, qw($(INST_ARCHLIB) $(INST_LIB)
 459  #                    $(INST_BIN) $(INST_SCRIPT)
 460  #                    $(INST_MAN1DIR) $(INST_MAN3DIR)
 461  #                    $(INST_LIBDIR) $(INST_ARCHLIBDIR) $(INST_AUTODIR) 
 462  #                    $(INST_STATIC) $(INST_DYNAMIC) $(INST_BOOT)
 463  #                 );
 464                    
 465  
 466      if( $attribs{FILES} ) {
 467          # Use @dirs because we don't know what's in here.
 468          push @dirs, ref $attribs{FILES}                ?
 469                          @{$attribs{FILES}}             :
 470                          split /\s+/, $attribs{FILES}   ;
 471      }
 472  
 473      push(@files, qw[$(MAKE_APERL_FILE) 
 474                      perlmain.c tmon.out mon.out so_locations 
 475                      blibdirs.ts pm_to_blib pm_to_blib.ts
 476                      *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT)
 477                      $(BOOTSTRAP) $(BASEEXT).bso
 478                      $(BASEEXT).def lib$(BASEEXT).def
 479                      $(BASEEXT).exp $(BASEEXT).x
 480                     ]);
 481  
 482      push(@files, $self->catfile('$(INST_ARCHAUTODIR)','extralibs.all'));
 483      push(@files, $self->catfile('$(INST_ARCHAUTODIR)','extralibs.ld'));
 484  
 485      # core files
 486      push(@files, qw[core core.*perl.*.? *perl.core]);
 487      push(@files, map { "core." . "[0-9]"x$_ } (1..5));
 488  
 489      # OS specific things to clean up.  Use @dirs since we don't know
 490      # what might be in here.
 491      push @dirs, $self->extra_clean_files;
 492  
 493      # Occasionally files are repeated several times from different sources
 494      { my(%f) = map { ($_ => 1) } @files; @files = keys %f; }
 495      { my(%d) = map { ($_ => 1) } @dirs;  @dirs  = keys %d; }
 496  
 497      push @m, map "\t$_\n", $self->split_command('- $(RM_F)',  @files);
 498      push @m, map "\t$_\n", $self->split_command('- $(RM_RF)', @dirs);
 499  
 500      # Leave Makefile.old around for realclean
 501      push @m, <<'MAKE';
 502      - $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
 503  MAKE
 504  
 505      push(@m, "\t$attribs{POSTOP}\n")   if $attribs{POSTOP};
 506  
 507      join("", @m);
 508  }
 509  
 510  
 511  =head3 clean_subdirs_target
 512  
 513    my $make_frag = $MM->clean_subdirs_target;
 514  
 515  Returns the clean_subdirs target.  This is used by the clean target to
 516  call clean on any subdirectories which contain Makefiles.
 517  
 518  =cut
 519  
 520  sub clean_subdirs_target {
 521      my($self) = shift;
 522  
 523      # No subdirectories, no cleaning.
 524      return <<'NOOP_FRAG' unless @{$self->{DIR}};
 525  clean_subdirs :
 526      $(NOECHO) $(NOOP)
 527  NOOP_FRAG
 528  
 529  
 530      my $clean = "clean_subdirs :\n";
 531  
 532      for my $dir (@{$self->{DIR}}) {
 533          my $subclean = $self->oneliner(sprintf <<'CODE', $dir);
 534  chdir '%s';  system '$(MAKE) clean' if -f '$(FIRST_MAKEFILE)';
 535  CODE
 536  
 537          $clean .= "\t$subclean\n";
 538      }
 539  
 540      return $clean;
 541  }
 542  
 543  
 544  =head3 dir_target
 545  
 546      my $make_frag = $mm->dir_target(@directories);
 547  
 548  Generates targets to create the specified directories and set its
 549  permission to 0755.
 550  
 551  Because depending on a directory to just ensure it exists doesn't work
 552  too well (the modified time changes too often) dir_target() creates a
 553  .exists file in the created directory.  It is this you should depend on.
 554  For portability purposes you should use the $(DIRFILESEP) macro rather
 555  than a '/' to seperate the directory from the file.
 556  
 557      yourdirectory$(DIRFILESEP).exists
 558  
 559  =cut
 560  
 561  sub dir_target {
 562      my($self, @dirs) = @_;
 563  
 564      my $make = '';
 565      foreach my $dir (@dirs) {
 566          $make .= sprintf <<'MAKE', ($dir) x 7;
 567  %s$(DFSEP).exists :: Makefile.PL
 568      $(NOECHO) $(MKPATH) %s
 569      $(NOECHO) $(CHMOD) 755 %s
 570      $(NOECHO) $(TOUCH) %s$(DFSEP).exists
 571  
 572  MAKE
 573  
 574      }
 575  
 576      return $make;
 577  }
 578  
 579  
 580  =head3 distdir
 581  
 582  Defines the scratch directory target that will hold the distribution
 583  before tar-ing (or shar-ing).
 584  
 585  =cut
 586  
 587  # For backwards compatibility.
 588  *dist_dir = *distdir;
 589  
 590  sub distdir {
 591      my($self) = shift;
 592  
 593      my $meta_target = $self->{NO_META} ? '' : 'distmeta';
 594      my $sign_target = !$self->{SIGN}   ? '' : 'distsignature';
 595  
 596      return sprintf <<'MAKE_FRAG', $meta_target, $sign_target;
 597  create_distdir :
 598      $(RM_RF) $(DISTVNAME)
 599      $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
 600          -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
 601  
 602  distdir : create_distdir %s %s
 603      $(NOECHO) $(NOOP)
 604  
 605  MAKE_FRAG
 606  
 607  }
 608  
 609  
 610  =head3 dist_test
 611  
 612  Defines a target that produces the distribution in the
 613  scratchdirectory, and runs 'perl Makefile.PL; make ;make test' in that
 614  subdirectory.
 615  
 616  =cut
 617  
 618  sub dist_test {
 619      my($self) = shift;
 620  
 621      my $mpl_args = join " ", map qq["$_"], @ARGV;
 622  
 623      my $test = $self->cd('$(DISTVNAME)',
 624                           '$(ABSPERLRUN) Makefile.PL '.$mpl_args,
 625                           '$(MAKE) $(PASTHRU)',
 626                           '$(MAKE) test $(PASTHRU)'
 627                          );
 628  
 629      return sprintf <<'MAKE_FRAG', $test;
 630  disttest : distdir
 631      %s
 632  
 633  MAKE_FRAG
 634  
 635  
 636  }
 637  
 638  
 639  =head3 dynamic (o)
 640  
 641  Defines the dynamic target.
 642  
 643  =cut
 644  
 645  sub dynamic {
 646  # --- Dynamic Loading Sections ---
 647  
 648      my($self) = shift;
 649      '
 650  dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
 651      $(NOECHO) $(NOOP)
 652  ';
 653  }
 654  
 655  
 656  =head3 makemakerdflt_target
 657  
 658    my $make_frag = $mm->makemakerdflt_target
 659  
 660  Returns a make fragment with the makemakerdeflt_target specified.
 661  This target is the first target in the Makefile, is the default target
 662  and simply points off to 'all' just in case any make variant gets
 663  confused or something gets snuck in before the real 'all' target.
 664  
 665  =cut
 666  
 667  sub makemakerdflt_target {
 668      return <<'MAKE_FRAG';
 669  makemakerdflt : all
 670      $(NOECHO) $(NOOP)
 671  MAKE_FRAG
 672  
 673  }
 674  
 675  
 676  =head3 manifypods_target
 677  
 678    my $manifypods_target = $self->manifypods_target;
 679  
 680  Generates the manifypods target.  This target generates man pages from
 681  all POD files in MAN1PODS and MAN3PODS.
 682  
 683  =cut
 684  
 685  sub manifypods_target {
 686      my($self) = shift;
 687  
 688      my $man1pods      = '';
 689      my $man3pods      = '';
 690      my $dependencies  = '';
 691  
 692      # populate manXpods & dependencies:
 693      foreach my $name (keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}}) {
 694          $dependencies .= " \\\n\t$name";
 695      }
 696  
 697      my $manify = <<END;
 698  manifypods : pure_all $dependencies
 699  END
 700  
 701      my @man_cmds;
 702      foreach my $section (qw(1 3)) {
 703          my $pods = $self->{"MAN$section}PODS"};
 704          push @man_cmds, $self->split_command(<<CMD, %$pods);
 705      \$(NOECHO) \$(POD2MAN) --section=$section --perm_rw=\$(PERM_RW)
 706  CMD
 707      }
 708  
 709      $manify .= "\t\$(NOECHO) \$(NOOP)\n" unless @man_cmds;
 710      $manify .= join '', map { "$_\n" } @man_cmds;
 711  
 712      return $manify;
 713  }
 714  
 715  
 716  =head3 metafile_target
 717  
 718      my $target = $mm->metafile_target;
 719  
 720  Generate the metafile target.
 721  
 722  Writes the file META.yml YAML encoded meta-data about the module in
 723  the distdir.  The format follows Module::Build's as closely as
 724  possible.
 725  
 726  =cut
 727  
 728  sub metafile_target {
 729      my $self = shift;
 730  
 731      return <<'MAKE_FRAG' if $self->{NO_META};
 732  metafile :
 733      $(NOECHO) $(NOOP)
 734  MAKE_FRAG
 735  
 736      my $prereq_pm = '';
 737      foreach my $mod ( sort { lc $a cmp lc $b } keys %{$self->{PREREQ_PM}} ) {
 738          my $ver = $self->{PREREQ_PM}{$mod};
 739          $prereq_pm .= sprintf "\n    %-30s %s", "$mod:", $ver;
 740      }
 741  
 742      my $author_value = defined $self->{AUTHOR}
 743          ? "\n    - $self->{AUTHOR}"
 744          : undef;
 745  
 746      # Use a list to preserve order.
 747      my @meta_to_mm = (
 748          name         => $self->{DISTNAME},
 749          version      => $self->{VERSION},
 750          abstract     => $self->{ABSTRACT},
 751          license      => $self->{LICENSE},
 752          author       => $author_value,
 753          generated_by => 
 754                  "ExtUtils::MakeMaker version $ExtUtils::MakeMaker::VERSION",
 755          distribution_type => $self->{PM} ? 'module' : 'script',
 756      );
 757  
 758      my $meta = "--- #YAML:1.0\n";
 759  
 760      while( @meta_to_mm ) {
 761          my($key, $val) = splice @meta_to_mm, 0, 2;
 762  
 763          $val = '~' unless defined $val;
 764  
 765          $meta .= sprintf "%-20s %s\n", "$key:", $val;
 766      };
 767  
 768      $meta .= <<"YAML";
 769  requires:     $prereq_pm
 770  meta-spec:
 771      url:     http://module-build.sourceforge.net/META-spec-v1.3.html
 772      version: 1.3
 773  YAML
 774  
 775      $meta .= $self->{EXTRA_META} if $self->{EXTRA_META};
 776  
 777      my @write_meta = $self->echo($meta, 'META_new.yml');
 778  
 779      return sprintf <<'MAKE_FRAG', join("\n\t", @write_meta);
 780  metafile : create_distdir
 781      $(NOECHO) $(ECHO) Generating META.yml
 782      %s
 783      -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
 784  MAKE_FRAG
 785  
 786  }
 787  
 788  
 789  =head3 distmeta_target
 790  
 791      my $make_frag = $mm->distmeta_target;
 792  
 793  Generates the distmeta target to add META.yml to the MANIFEST in the
 794  distdir.
 795  
 796  =cut
 797  
 798  sub distmeta_target {
 799      my $self = shift;
 800  
 801      my $add_meta = $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']);
 802  eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } 
 803      or print "Could not add META.yml to MANIFEST: $${'@'}\n"
 804  CODE
 805  
 806      my $add_meta_to_distdir = $self->cd('$(DISTVNAME)', $add_meta);
 807  
 808      return sprintf <<'MAKE', $add_meta_to_distdir;
 809  distmeta : create_distdir metafile
 810      $(NOECHO) %s
 811  
 812  MAKE
 813  
 814  }
 815  
 816  
 817  =head3 realclean (o)
 818  
 819  Defines the realclean target.
 820  
 821  =cut
 822  
 823  sub realclean {
 824      my($self, %attribs) = @_;
 825  
 826      my @dirs  = qw($(DISTVNAME));
 827      my @files = qw($(FIRST_MAKEFILE) $(MAKEFILE_OLD));
 828  
 829      # Special exception for the perl core where INST_* is not in blib.
 830      # This cleans up the files built from the ext/ directory (all XS).
 831      if( $self->{PERL_CORE} ) {
 832      push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR));
 833          push @files, values %{$self->{PM}};
 834      }
 835  
 836      if( $self->has_link_code ){
 837          push @files, qw($(OBJECT));
 838      }
 839  
 840      if( $attribs{FILES} ) {
 841          if( ref $attribs{FILES} ) {
 842              push @dirs, @{ $attribs{FILES} };
 843          }
 844          else {
 845              push @dirs, split /\s+/, $attribs{FILES};
 846          }
 847      }
 848  
 849      # Occasionally files are repeated several times from different sources
 850      { my(%f) = map { ($_ => 1) } @files;  @files = keys %f; }
 851      { my(%d) = map { ($_ => 1) } @dirs;   @dirs  = keys %d; }
 852  
 853      my $rm_cmd  = join "\n\t", map { "$_" } 
 854                      $self->split_command('- $(RM_F)',  @files);
 855      my $rmf_cmd = join "\n\t", map { "$_" } 
 856                      $self->split_command('- $(RM_RF)', @dirs);
 857  
 858      my $m = sprintf <<'MAKE', $rm_cmd, $rmf_cmd;
 859  # Delete temporary files (via clean) and also delete dist files
 860  realclean purge ::  clean realclean_subdirs
 861      %s
 862      %s
 863  MAKE
 864  
 865      $m .= "\t$attribs{POSTOP}\n" if $attribs{POSTOP};
 866  
 867      return $m;
 868  }
 869  
 870  
 871  =head3 realclean_subdirs_target
 872  
 873    my $make_frag = $MM->realclean_subdirs_target;
 874  
 875  Returns the realclean_subdirs target.  This is used by the realclean
 876  target to call realclean on any subdirectories which contain Makefiles.
 877  
 878  =cut
 879  
 880  sub realclean_subdirs_target {
 881      my $self = shift;
 882  
 883      return <<'NOOP_FRAG' unless @{$self->{DIR}};
 884  realclean_subdirs :
 885      $(NOECHO) $(NOOP)
 886  NOOP_FRAG
 887  
 888      my $rclean = "realclean_subdirs :\n";
 889  
 890      foreach my $dir (@{$self->{DIR}}) {
 891          foreach my $makefile ('$(MAKEFILE_OLD)', '$(FIRST_MAKEFILE)' ) {
 892              my $subrclean .= $self->oneliner(sprintf <<'CODE', $dir, ($makefile) x 2);
 893  chdir '%s';  system '$(MAKE) $(USEMAKEFILE) %s realclean' if -f '%s';
 894  CODE
 895  
 896              $rclean .= sprintf <<'RCLEAN', $subrclean;
 897      - %s
 898  RCLEAN
 899  
 900          }
 901      }
 902  
 903      return $rclean;
 904  }
 905  
 906  
 907  =head3 signature_target
 908  
 909      my $target = $mm->signature_target;
 910  
 911  Generate the signature target.
 912  
 913  Writes the file SIGNATURE with "cpansign -s".
 914  
 915  =cut
 916  
 917  sub signature_target {
 918      my $self = shift;
 919  
 920      return <<'MAKE_FRAG';
 921  signature :
 922      cpansign -s
 923  MAKE_FRAG
 924  
 925  }
 926  
 927  
 928  =head3 distsignature_target
 929  
 930      my $make_frag = $mm->distsignature_target;
 931  
 932  Generates the distsignature target to add SIGNATURE to the MANIFEST in the
 933  distdir.
 934  
 935  =cut
 936  
 937  sub distsignature_target {
 938      my $self = shift;
 939  
 940      my $add_sign = $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']);
 941  eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } 
 942      or print "Could not add SIGNATURE to MANIFEST: $${'@'}\n"
 943  CODE
 944  
 945      my $sign_dist        = $self->cd('$(DISTVNAME)' => 'cpansign -s');
 946  
 947      # cpansign -s complains if SIGNATURE is in the MANIFEST yet does not
 948      # exist
 949      my $touch_sig        = $self->cd('$(DISTVNAME)' => '$(TOUCH) SIGNATURE');
 950      my $add_sign_to_dist = $self->cd('$(DISTVNAME)' => $add_sign );
 951  
 952      return sprintf <<'MAKE', $add_sign_to_dist, $touch_sig, $sign_dist
 953  distsignature : create_distdir
 954      $(NOECHO) %s
 955      $(NOECHO) %s
 956      %s
 957  
 958  MAKE
 959  
 960  }
 961  
 962  
 963  =head3 special_targets
 964  
 965    my $make_frag = $mm->special_targets
 966  
 967  Returns a make fragment containing any targets which have special
 968  meaning to make.  For example, .SUFFIXES and .PHONY.
 969  
 970  =cut
 971  
 972  sub special_targets {
 973      my $make_frag = <<'MAKE_FRAG';
 974  .SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
 975  
 976  .PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
 977  
 978  MAKE_FRAG
 979  
 980      $make_frag .= <<'MAKE_FRAG' if $ENV{CLEARCASE_ROOT};
 981  .NO_CONFIG_REC: Makefile
 982  
 983  MAKE_FRAG
 984  
 985      return $make_frag;
 986  }
 987  
 988  
 989  
 990  
 991  =head2 Init methods
 992  
 993  Methods which help initialize the MakeMaker object and macros.
 994  
 995  
 996  =head3 init_ABSTRACT
 997  
 998      $mm->init_ABSTRACT
 999  
1000  =cut
1001  
1002  sub init_ABSTRACT {
1003      my $self = shift;
1004  
1005      if( $self->{ABSTRACT_FROM} and $self->{ABSTRACT} ) {
1006          warn "Both ABSTRACT_FROM and ABSTRACT are set.  ".
1007               "Ignoring ABSTRACT_FROM.\n";
1008          return;
1009      }
1010  
1011      if ($self->{ABSTRACT_FROM}){
1012          $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or
1013              carp "WARNING: Setting ABSTRACT via file ".
1014                   "'$self->{ABSTRACT_FROM}' failed\n";
1015      }
1016  }
1017  
1018  =head3 init_INST
1019  
1020      $mm->init_INST;
1021  
1022  Called by init_main.  Sets up all INST_* variables except those related
1023  to XS code.  Those are handled in init_xs.
1024  
1025  =cut
1026  
1027  sub init_INST {
1028      my($self) = shift;
1029  
1030      $self->{INST_ARCHLIB} ||= $self->catdir($Curdir,"blib","arch");
1031      $self->{INST_BIN}     ||= $self->catdir($Curdir,'blib','bin');
1032  
1033      # INST_LIB typically pre-set if building an extension after
1034      # perl has been built and installed. Setting INST_LIB allows
1035      # you to build directly into, say $Config{privlibexp}.
1036      unless ($self->{INST_LIB}){
1037      if ($self->{PERL_CORE}) {
1038              if (defined $Cross::platform) {
1039                  $self->{INST_LIB} = $self->{INST_ARCHLIB} = 
1040                    $self->catdir($self->{PERL_LIB},"..","xlib",
1041                                       $Cross::platform);
1042              }
1043              else {
1044                  $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
1045              }
1046      } else {
1047          $self->{INST_LIB} = $self->catdir($Curdir,"blib","lib");
1048      }
1049      }
1050  
1051      my @parentdir = split(/::/, $self->{PARENT_NAME});
1052      $self->{INST_LIBDIR}      = $self->catdir('$(INST_LIB)',     @parentdir);
1053      $self->{INST_ARCHLIBDIR}  = $self->catdir('$(INST_ARCHLIB)', @parentdir);
1054      $self->{INST_AUTODIR}     = $self->catdir('$(INST_LIB)', 'auto', 
1055                                                '$(FULLEXT)');
1056      $self->{INST_ARCHAUTODIR} = $self->catdir('$(INST_ARCHLIB)', 'auto',
1057                                                '$(FULLEXT)');
1058  
1059      $self->{INST_SCRIPT}  ||= $self->catdir($Curdir,'blib','script');
1060  
1061      $self->{INST_MAN1DIR} ||= $self->catdir($Curdir,'blib','man1');
1062      $self->{INST_MAN3DIR} ||= $self->catdir($Curdir,'blib','man3');
1063  
1064      return 1;
1065  }
1066  
1067  
1068  =head3 init_INSTALL
1069  
1070      $mm->init_INSTALL;
1071  
1072  Called by init_main.  Sets up all INSTALL_* variables (except
1073  INSTALLDIRS) and *PREFIX.
1074  
1075  =cut
1076  
1077  sub init_INSTALL {
1078      my($self) = shift;
1079  
1080      if( $self->{ARGS}{INSTALL_BASE} and $self->{ARGS}{PREFIX} ) {
1081          die "Only one of PREFIX or INSTALL_BASE can be given.  Not both.\n";
1082      }
1083  
1084      if( $self->{ARGS}{INSTALL_BASE} ) {
1085          $self->init_INSTALL_from_INSTALL_BASE;
1086      }
1087      else {
1088          $self->init_INSTALL_from_PREFIX;
1089      }
1090  }
1091  
1092  
1093  =head3 init_INSTALL_from_PREFIX
1094  
1095    $mm->init_INSTALL_from_PREFIX;
1096  
1097  =cut
1098  
1099  sub init_INSTALL_from_PREFIX {
1100      my $self = shift;
1101  
1102      $self->init_lib2arch;
1103  
1104      # There are often no Config.pm defaults for these new man variables so 
1105      # we fall back to the old behavior which is to use installman*dir
1106      foreach my $num (1, 3) {
1107          my $k = 'installsiteman'.$num.'dir';
1108  
1109          $self->{uc $k} ||= uc "\$(installman$num}dir)"
1110            unless $Config{$k};
1111      }
1112  
1113      foreach my $num (1, 3) {
1114          my $k = 'installvendorman'.$num.'dir';
1115  
1116          unless( $Config{$k} ) {
1117              $self->{uc $k}  ||= $Config{usevendorprefix}
1118                                ? uc "\$(installman$num}dir)"
1119                                : '';
1120          }
1121      }
1122  
1123      $self->{INSTALLSITEBIN} ||= '$(INSTALLBIN)'
1124        unless $Config{installsitebin};
1125      $self->{INSTALLSITESCRIPT} ||= '$(INSTALLSCRIPT)'
1126        unless $Config{installsitescript};
1127  
1128      unless( $Config{installvendorbin} ) {
1129          $self->{INSTALLVENDORBIN} ||= $Config{usevendorprefix} 
1130                                      ? $Config{installbin}
1131                                      : '';
1132      }
1133      unless( $Config{installvendorscript} ) {
1134          $self->{INSTALLVENDORSCRIPT} ||= $Config{usevendorprefix}
1135                                         ? $Config{installscript}
1136                                         : '';
1137      }
1138  
1139  
1140      my $iprefix = $Config{installprefixexp} || $Config{installprefix} || 
1141                    $Config{prefixexp}        || $Config{prefix} || '';
1142      my $vprefix = $Config{usevendorprefix}  ? $Config{vendorprefixexp} : '';
1143      my $sprefix = $Config{siteprefixexp}    || '';
1144  
1145      # 5.005_03 doesn't have a siteprefix.
1146      $sprefix = $iprefix unless $sprefix;
1147  
1148  
1149      $self->{PREFIX}       ||= '';
1150  
1151      if( $self->{PREFIX} ) {
1152          @{$self}{qw(PERLPREFIX SITEPREFIX VENDORPREFIX)} =
1153            ('$(PREFIX)') x 3;
1154      }
1155      else {
1156          $self->{PERLPREFIX}   ||= $iprefix;
1157          $self->{SITEPREFIX}   ||= $sprefix;
1158          $self->{VENDORPREFIX} ||= $vprefix;
1159  
1160          # Lots of MM extension authors like to use $(PREFIX) so we
1161          # put something sensible in there no matter what.
1162          $self->{PREFIX} = '$('.uc $self->{INSTALLDIRS}.'PREFIX)';
1163      }
1164  
1165      my $arch    = $Config{archname};
1166      my $version = $Config{version};
1167  
1168      # default style
1169      my $libstyle = $Config{installstyle} || 'lib/perl5';
1170      my $manstyle = '';
1171  
1172      if( $self->{LIBSTYLE} ) {
1173          $libstyle = $self->{LIBSTYLE};
1174          $manstyle = $self->{LIBSTYLE} eq 'lib/perl5' ? 'lib/perl5' : '';
1175      }
1176  
1177      # Some systems, like VOS, set installman*dir to '' if they can't
1178      # read man pages.
1179      for my $num (1, 3) {
1180          $self->{'INSTALLMAN'.$num.'DIR'} ||= 'none'
1181            unless $Config{'installman'.$num.'dir'};
1182      }
1183  
1184      my %bin_layouts = 
1185      (
1186          bin         => { s => $iprefix,
1187                           t => 'perl',
1188                           d => 'bin' },
1189          vendorbin   => { s => $vprefix,
1190                           t => 'vendor',
1191                           d => 'bin' },
1192          sitebin     => { s => $sprefix,
1193                           t => 'site',
1194                           d => 'bin' },
1195          script      => { s => $iprefix,
1196                           t => 'perl',
1197                           d => 'bin' },
1198          vendorscript=> { s => $vprefix,
1199                           t => 'vendor',
1200                           d => 'bin' },
1201          sitescript  => { s => $sprefix,
1202                           t => 'site',
1203                           d => 'bin' },
1204      );
1205      
1206      my %man_layouts =
1207      (
1208          man1dir         => { s => $iprefix,
1209                               t => 'perl',
1210                               d => 'man/man1',
1211                               style => $manstyle, },
1212          siteman1dir     => { s => $sprefix,
1213                               t => 'site',
1214                               d => 'man/man1',
1215                               style => $manstyle, },
1216          vendorman1dir   => { s => $vprefix,
1217                               t => 'vendor',
1218                               d => 'man/man1',
1219                               style => $manstyle, },
1220  
1221          man3dir         => { s => $iprefix,
1222                               t => 'perl',
1223                               d => 'man/man3',
1224                               style => $manstyle, },
1225          siteman3dir     => { s => $sprefix,
1226                               t => 'site',
1227                               d => 'man/man3',
1228                               style => $manstyle, },
1229          vendorman3dir   => { s => $vprefix,
1230                               t => 'vendor',
1231                               d => 'man/man3',
1232                               style => $manstyle, },
1233      );
1234  
1235      my %lib_layouts =
1236      (
1237          privlib     => { s => $iprefix,
1238                           t => 'perl',
1239                           d => '',
1240                           style => $libstyle, },
1241          vendorlib   => { s => $vprefix,
1242                           t => 'vendor',
1243                           d => '',
1244                           style => $libstyle, },
1245          sitelib     => { s => $sprefix,
1246                           t => 'site',
1247                           d => 'site_perl',
1248                           style => $libstyle, },
1249          
1250          archlib     => { s => $iprefix,
1251                           t => 'perl',
1252                           d => "$version/$arch",
1253                           style => $libstyle },
1254          vendorarch  => { s => $vprefix,
1255                           t => 'vendor',
1256                           d => "$version/$arch",
1257                           style => $libstyle },
1258          sitearch    => { s => $sprefix,
1259                           t => 'site',
1260                           d => "site_perl/$version/$arch",
1261                           style => $libstyle },
1262      );
1263  
1264  
1265      # Special case for LIB.
1266      if( $self->{LIB} ) {
1267          foreach my $var (keys %lib_layouts) {
1268              my $Installvar = uc "install$var";
1269  
1270              if( $var =~ /arch/ ) {
1271                  $self->{$Installvar} ||= 
1272                    $self->catdir($self->{LIB}, $Config{archname});
1273              }
1274              else {
1275                  $self->{$Installvar} ||= $self->{LIB};
1276              }
1277          }
1278      }
1279  
1280      my %type2prefix = ( perl    => 'PERLPREFIX',
1281                          site    => 'SITEPREFIX',
1282                          vendor  => 'VENDORPREFIX'
1283                        );
1284  
1285      my %layouts = (%bin_layouts, %man_layouts, %lib_layouts);
1286      while( my($var, $layout) = each(%layouts) ) {
1287          my($s, $t, $d, $style) = @{$layout}{qw(s t d style)};
1288          my $r = '$('.$type2prefix{$t}.')';
1289  
1290          print STDERR "Prefixing $var\n" if $Verbose >= 2;
1291  
1292          my $installvar = "install$var";
1293          my $Installvar = uc $installvar;
1294          next if $self->{$Installvar};
1295  
1296          $d = "$style/$d" if $style;
1297          $self->prefixify($installvar, $s, $r, $d);
1298  
1299          print STDERR "  $Installvar == $self->{$Installvar}\n" 
1300            if $Verbose >= 2;
1301      }
1302  
1303      # Generate these if they weren't figured out.
1304      $self->{VENDORARCHEXP} ||= $self->{INSTALLVENDORARCH};
1305      $self->{VENDORLIBEXP}  ||= $self->{INSTALLVENDORLIB};
1306  
1307      return 1;
1308  }
1309  
1310  
1311  =head3 init_from_INSTALL_BASE
1312  
1313      $mm->init_from_INSTALL_BASE
1314  
1315  =cut
1316  
1317  my %map = (
1318             lib      => [qw(lib perl5)],
1319             arch     => [('lib', 'perl5', $Config{archname})],
1320             bin      => [qw(bin)],
1321             man1dir  => [qw(man man1)],
1322             man3dir  => [qw(man man3)]
1323            );
1324  $map{script} = $map{bin};
1325  
1326  sub init_INSTALL_from_INSTALL_BASE {
1327      my $self = shift;
1328  
1329      @{$self}{qw(PREFIX VENDORPREFIX SITEPREFIX PERLPREFIX)} = 
1330                                                           '$(INSTALL_BASE)';
1331  
1332      my %install;
1333      foreach my $thing (keys %map) {
1334          foreach my $dir (('', 'SITE', 'VENDOR')) {
1335              my $uc_thing = uc $thing;
1336              my $key = "INSTALL".$dir.$uc_thing;
1337  
1338              $install{$key} ||= 
1339                $self->catdir('$(INSTALL_BASE)', @{$map{$thing}});
1340          }
1341      }
1342  
1343      # Adjust for variable quirks.
1344      $install{INSTALLARCHLIB} ||= delete $install{INSTALLARCH};
1345      $install{INSTALLPRIVLIB} ||= delete $install{INSTALLLIB};
1346  
1347      foreach my $key (keys %install) {
1348          $self->{$key} ||= $install{$key};
1349      }
1350  
1351      return 1;
1352  }
1353  
1354  
1355  =head3 init_VERSION  I<Abstract>
1356  
1357      $mm->init_VERSION
1358  
1359  Initialize macros representing versions of MakeMaker and other tools
1360  
1361  MAKEMAKER: path to the MakeMaker module.
1362  
1363  MM_VERSION: ExtUtils::MakeMaker Version
1364  
1365  MM_REVISION: ExtUtils::MakeMaker version control revision (for backwards 
1366               compat)
1367  
1368  VERSION: version of your module
1369  
1370  VERSION_MACRO: which macro represents the version (usually 'VERSION')
1371  
1372  VERSION_SYM: like version but safe for use as an RCS revision number
1373  
1374  DEFINE_VERSION: -D line to set the module version when compiling
1375  
1376  XS_VERSION: version in your .xs file.  Defaults to $(VERSION)
1377  
1378  XS_VERSION_MACRO: which macro represents the XS version.
1379  
1380  XS_DEFINE_VERSION: -D line to set the xs version when compiling.
1381  
1382  Called by init_main.
1383  
1384  =cut
1385  
1386  sub init_VERSION {
1387      my($self) = shift;
1388  
1389      $self->{MAKEMAKER}  = $ExtUtils::MakeMaker::Filename;
1390      $self->{MM_VERSION} = $ExtUtils::MakeMaker::VERSION;
1391      $self->{MM_REVISION}= $ExtUtils::MakeMaker::Revision;
1392      $self->{VERSION_FROM} ||= '';
1393  
1394      if ($self->{VERSION_FROM}){
1395          $self->{VERSION} = $self->parse_version($self->{VERSION_FROM});
1396          if( $self->{VERSION} eq 'undef' ) {
1397              carp("WARNING: Setting VERSION via file ".
1398                   "'$self->{VERSION_FROM}' failed\n");
1399          }
1400      }
1401  
1402      # strip blanks
1403      if (defined $self->{VERSION}) {
1404          $self->{VERSION} =~ s/^\s+//;
1405          $self->{VERSION} =~ s/\s+$//;
1406      }
1407      else {
1408          $self->{VERSION} = '';
1409      }
1410  
1411  
1412      $self->{VERSION_MACRO}  = 'VERSION';
1413      ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g;
1414      $self->{DEFINE_VERSION} = '-D$(VERSION_MACRO)=\"$(VERSION)\"';
1415  
1416  
1417      # Graham Barr and Paul Marquess had some ideas how to ensure
1418      # version compatibility between the *.pm file and the
1419      # corresponding *.xs file. The bottomline was, that we need an
1420      # XS_VERSION macro that defaults to VERSION:
1421      $self->{XS_VERSION} ||= $self->{VERSION};
1422  
1423      $self->{XS_VERSION_MACRO}  = 'XS_VERSION';
1424      $self->{XS_DEFINE_VERSION} = '-D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"';
1425  
1426  }
1427  
1428  
1429  =head3 init_others  I<Abstract>
1430  
1431      $MM->init_others();
1432  
1433  Initializes the macro definitions used by tools_other() and places them
1434  in the $MM object.
1435  
1436  If there is no description, its the same as the parameter to
1437  WriteMakefile() documented in ExtUtils::MakeMaker.
1438  
1439  Defines at least these macros.
1440  
1441    Macro             Description
1442  
1443    NOOP              Do nothing
1444    NOECHO            Tell make not to display the command itself
1445  
1446    MAKEFILE
1447    FIRST_MAKEFILE
1448    MAKEFILE_OLD
1449    MAKE_APERL_FILE   File used by MAKE_APERL
1450  
1451    SHELL             Program used to run shell commands
1452  
1453    ECHO              Print text adding a newline on the end
1454    RM_F              Remove a file 
1455    RM_RF             Remove a directory          
1456    TOUCH             Update a file's timestamp   
1457    TEST_F            Test for a file's existence 
1458    CP                Copy a file                 
1459    MV                Move a file                 
1460    CHMOD             Change permissions on a     
1461                      file
1462  
1463    UMASK_NULL        Nullify umask
1464    DEV_NULL          Suppress all command output
1465  
1466  
1467  =head3 init_DIRFILESEP  I<Abstract>
1468  
1469    $MM->init_DIRFILESEP;
1470    my $dirfilesep = $MM->{DIRFILESEP};
1471  
1472  Initializes the DIRFILESEP macro which is the seperator between the
1473  directory and filename in a filepath.  ie. / on Unix, \ on Win32 and
1474  nothing on VMS.
1475  
1476  For example:
1477  
1478      # instead of $(INST_ARCHAUTODIR)/extralibs.ld
1479      $(INST_ARCHAUTODIR)$(DIRFILESEP)extralibs.ld
1480  
1481  Something of a hack but it prevents a lot of code duplication between
1482  MM_* variants.
1483  
1484  Do not use this as a seperator between directories.  Some operating
1485  systems use different seperators between subdirectories as between
1486  directories and filenames (for example:  VOLUME:[dir1.dir2]file on VMS).
1487  
1488  =head3 init_linker  I<Abstract>
1489  
1490      $mm->init_linker;
1491  
1492  Initialize macros which have to do with linking.
1493  
1494  PERL_ARCHIVE: path to libperl.a equivalent to be linked to dynamic
1495  extensions.
1496  
1497  PERL_ARCHIVE_AFTER: path to a library which should be put on the
1498  linker command line I<after> the external libraries to be linked to
1499  dynamic extensions.  This may be needed if the linker is one-pass, and
1500  Perl includes some overrides for C RTL functions, such as malloc().
1501  
1502  EXPORT_LIST: name of a file that is passed to linker to define symbols
1503  to be exported.
1504  
1505  Some OSes do not need these in which case leave it blank.
1506  
1507  
1508  =head3 init_platform
1509  
1510      $mm->init_platform
1511  
1512  Initialize any macros which are for platform specific use only.
1513  
1514  A typical one is the version number of your OS specific mocule.
1515  (ie. MM_Unix_VERSION or MM_VMS_VERSION).
1516  
1517  =cut
1518  
1519  sub init_platform {
1520      return '';
1521  }
1522  
1523  
1524  =head3 init_MAKE
1525  
1526      $mm->init_MAKE
1527  
1528  Initialize MAKE from either a MAKE environment variable or $Config{make}.
1529  
1530  =cut
1531  
1532  sub init_MAKE {
1533      my $self = shift;
1534  
1535      $self->{MAKE} ||= $ENV{MAKE} || $Config{make};
1536  }
1537  
1538  
1539  =head2 Tools
1540  
1541  A grab bag of methods to generate specific macros and commands.
1542  
1543  
1544  
1545  =head3 manifypods
1546  
1547  Defines targets and routines to translate the pods into manpages and
1548  put them into the INST_* directories.
1549  
1550  =cut
1551  
1552  sub manifypods {
1553      my $self          = shift;
1554  
1555      my $POD2MAN_macro = $self->POD2MAN_macro();
1556      my $manifypods_target = $self->manifypods_target();
1557  
1558      return <<END_OF_TARGET;
1559  
1560  $POD2MAN_macro
1561  
1562  $manifypods_target
1563  
1564  END_OF_TARGET
1565  
1566  }
1567  
1568  
1569  =head3 POD2MAN_macro
1570  
1571    my $pod2man_macro = $self->POD2MAN_macro
1572  
1573  Returns a definition for the POD2MAN macro.  This is a program
1574  which emulates the pod2man utility.  You can add more switches to the
1575  command by simply appending them on the macro.
1576  
1577  Typical usage:
1578  
1579      $(POD2MAN) --section=3 --perm_rw=$(PERM_RW) podfile1 man_page1 ...
1580  
1581  =cut
1582  
1583  sub POD2MAN_macro {
1584      my $self = shift;
1585  
1586  # Need the trailing '--' so perl stops gobbling arguments and - happens
1587  # to be an alternative end of line seperator on VMS so we quote it
1588      return <<'END_OF_DEF';
1589  POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
1590  POD2MAN = $(POD2MAN_EXE)
1591  END_OF_DEF
1592  }
1593  
1594  
1595  =head3 test_via_harness
1596  
1597    my $command = $mm->test_via_harness($perl, $tests);
1598  
1599  Returns a $command line which runs the given set of $tests with
1600  Test::Harness and the given $perl.
1601  
1602  Used on the t/*.t files.
1603  
1604  =cut
1605  
1606  sub test_via_harness {
1607      my($self, $perl, $tests) = @_;
1608  
1609      return qq{\t$perl "-MExtUtils::Command::MM" }.
1610             qq{"-e" "test_harness(\$(TEST_VERBOSE), '\$(INST_LIB)', '\$(INST_ARCHLIB)')" $tests\n};
1611  }
1612  
1613  =head3 test_via_script
1614  
1615    my $command = $mm->test_via_script($perl, $script);
1616  
1617  Returns a $command line which just runs a single test without
1618  Test::Harness.  No checks are done on the results, they're just
1619  printed.
1620  
1621  Used for test.pl, since they don't always follow Test::Harness
1622  formatting.
1623  
1624  =cut
1625  
1626  sub test_via_script {
1627      my($self, $perl, $script) = @_;
1628      return qq{\t$perl "-I\$(INST_LIB)" "-I\$(INST_ARCHLIB)" $script\n};
1629  }
1630  
1631  
1632  =head3 tool_autosplit
1633  
1634  Defines a simple perl call that runs autosplit. May be deprecated by
1635  pm_to_blib soon.
1636  
1637  =cut
1638  
1639  sub tool_autosplit {
1640      my($self, %attribs) = @_;
1641  
1642      my $maxlen = $attribs{MAXLEN} ? '$$AutoSplit::Maxlen=$attribs{MAXLEN};' 
1643                                    : '';
1644  
1645      my $asplit = $self->oneliner(sprintf <<'PERL_CODE', $maxlen);
1646  use AutoSplit; %s autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)
1647  PERL_CODE
1648  
1649      return sprintf <<'MAKE_FRAG', $asplit;
1650  # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
1651  AUTOSPLITFILE = %s
1652  
1653  MAKE_FRAG
1654  
1655  }
1656  
1657  
1658  
1659  
1660  =head2 File::Spec wrappers
1661  
1662  ExtUtils::MM_Any is a subclass of File::Spec.  The methods noted here
1663  override File::Spec.
1664  
1665  
1666  
1667  =head3 catfile
1668  
1669  File::Spec <= 0.83 has a bug where the file part of catfile is not
1670  canonicalized.  This override fixes that bug.
1671  
1672  =cut
1673  
1674  sub catfile {
1675      my $self = shift;
1676      return $self->canonpath($self->SUPER::catfile(@_));
1677  }
1678  
1679  
1680  
1681  =head2 Misc
1682  
1683  Methods I can't really figure out where they should go yet.
1684  
1685  
1686  =head3 find_tests
1687  
1688    my $test = $mm->find_tests;
1689  
1690  Returns a string suitable for feeding to the shell to return all
1691  tests in t/*.t.
1692  
1693  =cut
1694  
1695  sub find_tests {
1696      my($self) = shift;
1697      return -d 't' ? 't/*.t' : '';
1698  }
1699  
1700  
1701  =head3 extra_clean_files
1702  
1703      my @files_to_clean = $MM->extra_clean_files;
1704  
1705  Returns a list of OS specific files to be removed in the clean target in
1706  addition to the usual set.
1707  
1708  =cut
1709  
1710  # An empty method here tickled a perl 5.8.1 bug and would return its object.
1711  sub extra_clean_files { 
1712      return;
1713  }
1714  
1715  
1716  =head3 installvars
1717  
1718      my @installvars = $mm->installvars;
1719  
1720  A list of all the INSTALL* variables without the INSTALL prefix.  Useful
1721  for iteration or building related variable sets.
1722  
1723  =cut
1724  
1725  sub installvars {
1726      return qw(PRIVLIB SITELIB  VENDORLIB
1727                ARCHLIB SITEARCH VENDORARCH
1728                BIN     SITEBIN  VENDORBIN
1729                SCRIPT  SITESCRIPT  VENDORSCRIPT
1730                MAN1DIR SITEMAN1DIR VENDORMAN1DIR
1731                MAN3DIR SITEMAN3DIR VENDORMAN3DIR
1732               );
1733  }
1734  
1735  
1736  =head3 libscan
1737  
1738    my $wanted = $self->libscan($path);
1739  
1740  Takes a path to a file or dir and returns an empty string if we don't
1741  want to include this file in the library.  Otherwise it returns the
1742  the $path unchanged.
1743  
1744  Mainly used to exclude version control administrative directories from
1745  installation.
1746  
1747  =cut
1748  
1749  sub libscan {
1750      my($self,$path) = @_;
1751      my($dirs,$file) = ($self->splitpath($path))[1,2];
1752      return '' if grep /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/, 
1753                       $self->splitdir($dirs), $file;
1754  
1755      return $path;
1756  }
1757  
1758  
1759  =head3 platform_constants
1760  
1761      my $make_frag = $mm->platform_constants
1762  
1763  Returns a make fragment defining all the macros initialized in
1764  init_platform() rather than put them in constants().
1765  
1766  =cut
1767  
1768  sub platform_constants {
1769      return '';
1770  }
1771  
1772  
1773  =head1 AUTHOR
1774  
1775  Michael G Schwern <schwern@pobox.com> and the denizens of
1776  makemaker@perl.org with code from ExtUtils::MM_Unix and
1777  ExtUtils::MM_Win32.
1778  
1779  
1780  =cut
1781  
1782  1;


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1