Fixes for the test suite on OS/2
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MM_Any.pm
index f54b194..6851224 100644 (file)
@@ -2,8 +2,9 @@ package ExtUtils::MM_Any;
 
 use strict;
 use vars qw($VERSION @ISA);
-$VERSION = '0.12_01';
+$VERSION = '0.14';
 
+use Carp;
 use File::Spec;
 BEGIN { @ISA = qw(File::Spec); }
 
@@ -324,7 +325,28 @@ this is the max size of a shell command line.
 $self->{_MAX_EXEC_LEN} is set by this method, but only for testing purposes.
 
 
+=head3 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.
+
+=cut
+
+sub make {
+    my $self = shift;
+
+    my $make = lc $self->{MAKE};
+
+    # Truncate anything like foomake6 to just foomake.
+    $make =~ s/^(\w+make).*/$1/;
+
+    # Turn gnumake into gmake.
+    $make =~ s/^gnu/g/;
+
+    return $make;
+}
 
 
 =head2 Targets
@@ -685,10 +707,7 @@ 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
-possible.  Additionally, we include:
-
-    version_from
-    installdirs
+possible.
 
 =cut
 
@@ -703,22 +722,44 @@ MAKE_FRAG
     my $prereq_pm = '';
     foreach my $mod ( sort { lc $a cmp lc $b } keys %{$self->{PREREQ_PM}} ) {
         my $ver = $self->{PREREQ_PM}{$mod};
-        $prereq_pm .= sprintf "    %-30s %s\n", "$mod:", $ver;
+        $prereq_pm .= sprintf "\n    %-30s %s", "$mod:", $ver;
     }
 
-    my $meta = <<YAML;
-# http://module-build.sourceforge.net/META-spec.html
-#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
-name:         $self->{DISTNAME}
-version:      $self->{VERSION}
-version_from: $self->{VERSION_FROM}
-installdirs:  $self->{INSTALLDIRS}
-requires:
-$prereq_pm
-distribution_type: module
-generated_by: ExtUtils::MakeMaker version $ExtUtils::MakeMaker::VERSION
+    # Use a list to preserve order.
+    my @meta_to_mm = (
+        name         => $self->{DISTNAME},
+        version      => $self->{VERSION},
+        abstract     => $self->{ABSTRACT},
+        license      => $self->{LICENSE},
+        generated_by => 
+                "ExtUtils::MakeMaker version $ExtUtils::MakeMaker::VERSION",
+        distribution_type => $self->{PM} ? 'module' : 'script',
+    );
+
+    my $meta = "--- #YAML:1.0\n";
+
+    while( @meta_to_mm ) {
+        my($key, $val) = splice @meta_to_mm, 0, 2;
+
+        $val = '~' unless defined $val;
+
+        $meta .= sprintf "%-20s %s\n", "$key:", $val;
+    };
+
+    $meta .= <<"YAML";
+requires:     $prereq_pm
+meta-spec:
+    url:     http://module-build.sourceforge.net/META-spec-v1.2.html
+    version: 1.2
+YAML
+
+    $meta .= <<"YAML" if defined $self->{AUTHOR};
+author:
+    - $self->{AUTHOR}
 YAML
 
+    $meta .= $self->{EXTRA_META} if $self->{EXTRA_META};
+
     my @write_meta = $self->echo($meta, 'META_new.yml');
 
     return sprintf <<'MAKE_FRAG', join("\n\t", @write_meta);
@@ -771,9 +812,11 @@ sub realclean {
     my @dirs  = qw($(DISTVNAME));
     my @files = qw($(FIRST_MAKEFILE) $(MAKEFILE_OLD));
 
-    if ($self->{PERL_CORE}) {
+    # Special exception for the perl core where INST_* is not in blib.
+    # This cleans up the files built from the ext/ directory (all XS).
+    if( $self->{PERL_CORE} ) {
        push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR));
-       push @files, values %{$self->{PM}};
+        push @files, values %{$self->{PM}};
     }
 
     if( $self->has_link_code ){
@@ -936,6 +979,28 @@ MAKE_FRAG
 Methods which help initialize the MakeMaker object and macros.
 
 
+=head3 init_ABSTRACT
+
+    $mm->init_ABSTRACT
+
+=cut
+
+sub init_ABSTRACT {
+    my $self = shift;
+
+    if( $self->{ABSTRACT_FROM} and $self->{ABSTRACT} ) {
+        warn "Both ABSTRACT_FROM and ABSTRACT are set.  ".
+             "Ignoring ABSTRACT_FROM.\n";
+        return;
+    }
+
+    if ($self->{ABSTRACT_FROM}){
+        $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or
+            carp "WARNING: Setting ABSTRACT via file ".
+                 "'$self->{ABSTRACT_FROM}' failed\n";
+    }
+}
+
 =head3 init_INST
 
     $mm->init_INST;
@@ -998,12 +1063,12 @@ INSTALLDIRS) and *PREFIX.
 sub init_INSTALL {
     my($self) = shift;
 
-    if( $self->{ARGS}{INSTALLBASE} and $self->{ARGS}{PREFIX} ) {
-        die "Only one of PREFIX or INSTALLBASE can be given.  Not both.\n";
+    if( $self->{ARGS}{INSTALL_BASE} and $self->{ARGS}{PREFIX} ) {
+        die "Only one of PREFIX or INSTALL_BASE can be given.  Not both.\n";
     }
 
-    if( $self->{ARGS}{INSTALLBASE} ) {
-        $self->init_INSTALL_from_INSTALLBASE;
+    if( $self->{ARGS}{INSTALL_BASE} ) {
+        $self->init_INSTALL_from_INSTALL_BASE;
     }
     else {
         $self->init_INSTALL_from_PREFIX;
@@ -1043,12 +1108,19 @@ sub init_INSTALL_from_PREFIX {
 
     $self->{INSTALLSITEBIN} ||= '$(INSTALLBIN)'
       unless $Config{installsitebin};
+    $self->{INSTALLSITESCRIPT} ||= '$(INSTALLSCRIPT)'
+      unless $Config{installsitescript};
 
     unless( $Config{installvendorbin} ) {
         $self->{INSTALLVENDORBIN} ||= $Config{usevendorprefix} 
                                     ? $Config{installbin}
                                     : '';
     }
+    unless( $Config{installvendorscript} ) {
+        $self->{INSTALLVENDORSCRIPT} ||= $Config{usevendorprefix}
+                                       ? $Config{installscript}
+                                       : '';
+    }
 
 
     my $iprefix = $Config{installprefixexp} || $Config{installprefix} || 
@@ -1109,6 +1181,12 @@ sub init_INSTALL_from_PREFIX {
         script      => { s => $iprefix,
                          t => 'perl',
                          d => 'bin' },
+        vendorscript=> { s => $vprefix,
+                         t => 'vendor',
+                         d => 'bin' },
+        sitescript  => { s => $sprefix,
+                         t => 'site',
+                         d => 'bin' },
     );
     
     my %man_layouts =
@@ -1216,9 +1294,9 @@ sub init_INSTALL_from_PREFIX {
 }
 
 
-=head3 init_from_INSTALLBASE
+=head3 init_from_INSTALL_BASE
 
-    $mm->init_from_INSTALLBASE
+    $mm->init_from_INSTALL_BASE
 
 =cut
 
@@ -1231,11 +1309,11 @@ my %map = (
           );
 $map{script} = $map{bin};
 
-sub init_INSTALL_from_INSTALLBASE {
+sub init_INSTALL_from_INSTALL_BASE {
     my $self = shift;
 
     @{$self}{qw(PREFIX VENDORPREFIX SITEPREFIX PERLPREFIX)} = 
-                                                         '$(INSTALLBASE)';
+                                                         '$(INSTALL_BASE)';
 
     my %install;
     foreach my $thing (keys %map) {
@@ -1244,14 +1322,13 @@ sub init_INSTALL_from_INSTALLBASE {
             my $key = "INSTALL".$dir.$uc_thing;
 
             $install{$key} ||= 
-              $self->catdir('$(INSTALLBASE)', @{$map{$thing}});
+              $self->catdir('$(INSTALL_BASE)', @{$map{$thing}});
         }
     }
 
     # Adjust for variable quirks.
     $install{INSTALLARCHLIB} ||= delete $install{INSTALLARCH};
     $install{INSTALLPRIVLIB} ||= delete $install{INSTALLLIB};
-    delete @install{qw(INSTALLVENDORSCRIPT INSTALLSITESCRIPT)};
 
     foreach my $key (keys %install) {
         $self->{$key} ||= $install{$key};
@@ -1303,9 +1380,8 @@ sub init_VERSION {
     if ($self->{VERSION_FROM}){
         $self->{VERSION} = $self->parse_version($self->{VERSION_FROM});
         if( $self->{VERSION} eq 'undef' ) {
-            require Carp;
-            Carp::carp("WARNING: Setting VERSION via file ".
-                       "'$self->{VERSION_FROM}' failed\n");
+            carp("WARNING: Setting VERSION via file ".
+                 "'$self->{VERSION_FROM}' failed\n");
         }
     }
 
@@ -1358,8 +1434,7 @@ Defines at least these macros.
   MAKEFILE_OLD
   MAKE_APERL_FILE   File used by MAKE_APERL
 
-  SHELL             Program used to run
-                    shell commands
+  SHELL             Program used to run shell commands
 
   ECHO              Print text adding a newline on the end
   RM_F              Remove a file 
@@ -1372,7 +1447,7 @@ Defines at least these macros.
                     file
 
   UMASK_NULL        Nullify umask
-  DEV_NULL          Supress all command output
+  DEV_NULL          Suppress all command output
 
 
 =head3 init_DIRFILESEP  I<Abstract>
@@ -1432,7 +1507,19 @@ sub init_platform {
 }
 
 
+=head3 init_MAKE
+
+    $mm->init_MAKE
+
+Initialize MAKE from either a MAKE environment variable or $Config{make}.
 
+=cut
+
+sub init_MAKE {
+    my $self = shift;
+
+    $self->{MAKE} ||= $ENV{MAKE} || $Config{make};
+}
 
 
 =head2 Tools
@@ -1625,7 +1712,7 @@ sub installvars {
     return qw(PRIVLIB SITELIB  VENDORLIB
               ARCHLIB SITEARCH VENDORARCH
               BIN     SITEBIN  VENDORBIN
-              SCRIPT
+              SCRIPT  SITESCRIPT  VENDORSCRIPT
               MAN1DIR SITEMAN1DIR VENDORMAN1DIR
               MAN3DIR SITEMAN3DIR VENDORMAN3DIR
              );