MM_Unix.pm : work around File::Find problem on VMS
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MM_Unix.pm
index f364344..bb76013 100644 (file)
@@ -5,7 +5,7 @@ require 5.005_03;  # Maybe further back, dunno
 use strict;
 
 use Exporter ();
-use Carp ();
+use Carp;
 use Config;
 use File::Basename qw(basename dirname fileparse);
 use File::Spec;
@@ -13,25 +13,23 @@ use DirHandle;
 use strict;
 use vars qw($VERSION @ISA
             $Is_Mac $Is_OS2 $Is_VMS $Is_Win32 $Is_Dos $Is_VOS
-            $Verbose %pm %static $Xsubpp_Version);
+            $Verbose %pm %static $Xsubpp_Version
+            %Config_Override
+           );
 
 use ExtUtils::MakeMaker qw($Verbose neatvalue);
 
-$VERSION = '1.20_01';
+$VERSION = '1.33';
 
 require ExtUtils::MM_Any;
 @ISA = qw(ExtUtils::MM_Any);
 
 $Is_OS2   = $^O eq 'os2';
 $Is_Mac   = $^O eq 'MacOS';
-$Is_Win32 = $^O eq 'MSWin32';
+$Is_Win32 = $^O eq 'MSWin32' || $Config{osname} eq 'NetWare';
 $Is_Dos   = $^O eq 'dos';
 $Is_VOS   = $^O eq 'vos';
-
-if ($Is_VMS = $^O eq 'VMS') {
-    require VMS::Filespec;
-    import VMS::Filespec qw( &vmsify );
-}
+$Is_VMS   = $^O eq 'VMS';
 
 =head1 NAME
 
@@ -304,7 +302,7 @@ sub cflags {
        $cflags{$_} =~ s/^\s+//;
        $cflags{$_} =~ s/\s+/ /g;
        $cflags{$_} =~ s/\s+$//;
-       $self->{uc $_} = $cflags{$_};
+       $self->{uc $_} ||= $cflags{$_};
     }
 
     if ($self->{POLLUTE}) {
@@ -479,17 +477,23 @@ sub constants {
     for $tmp (qw/
 
              AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
-             VERSION_SYM XS_VERSION INST_BIN INST_LIB
-             INST_ARCHLIB INST_SCRIPT PREFIX  INSTALLDIRS
-             INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
-             INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
-             PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
+             VERSION_SYM XS_VERSION 
+             INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB
+              INSTALLDIRS
+              PREFIX          SITEPREFIX      VENDORPREFIX
+             INSTALLPRIVLIB  INSTALLSITELIB  INSTALLVENDORLIB
+             INSTALLARCHLIB  INSTALLSITEARCH INSTALLVENDORARCH
+              INSTALLBIN      INSTALLSITEBIN  INSTALLVENDORBIN  INSTALLSCRIPT 
+              PERL_LIB        PERL_ARCHLIB 
+              SITELIBEXP      SITEARCHEXP 
+              LIBPERL_A MYEXTLIB
              FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
              PERL_INC PERL FULLPERL PERLRUN FULLPERLRUN PERLRUNINST 
               FULLPERLRUNINST ABSPERL ABSPERLRUN ABSPERLRUNINST
               FULL_AR PERL_CORE NOOP NOECHO
 
-             / ) {
+             / ) 
+    {
        next unless defined $self->{$tmp};
 
         # pathnames can have sharp signs in them; escape them so
@@ -521,7 +525,8 @@ MM_VERSION = $ExtUtils::MakeMaker::VERSION
     for $tmp (qw/
              FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
              LDFROM LINKTYPE PM_FILTER
-             / ) {
+             / ) 
+    {
        next unless defined $self->{$tmp};
        push @m, "$tmp = $self->{$tmp}\n";
     }
@@ -537,9 +542,12 @@ MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
 ";
 
     for $tmp (qw/
-             INST_MAN1DIR        INSTALLMAN1DIR MAN1EXT
-             INST_MAN3DIR        INSTALLMAN3DIR MAN3EXT
-             /) {
+             INST_MAN1DIR  MAN1EXT 
+              INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR
+             INST_MAN3DIR  MAN3EXT
+              INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR
+             /) 
+    {
        next unless defined $self->{$tmp};
        push @m, "$tmp = $self->{$tmp}\n";
     }
@@ -547,7 +555,8 @@ MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
     for $tmp (qw(
                PERM_RW PERM_RWX
                )
-            ) {
+            ) 
+    {
         my $method = lc($tmp);
        # warn "self[$self] method[$method]";
         push @m, "$tmp = ", $self->$method(), "\n";
@@ -852,8 +861,8 @@ sub dist_test {
     push @m, q{
 disttest : distdir
        cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
-       cd $(DISTVNAME) && $(MAKE)
-       cd $(DISTVNAME) && $(MAKE) test
+       cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+       cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
 };
     join "", @m;
 }
@@ -995,7 +1004,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
     push(@m,'  $(RM_F) $@
 ');
 
-    my $libs = $self->{LDLOADLIBS} || '';
+    my $libs = '$(LDLOADLIBS)';
 
     if ($^O eq 'netbsd') {
        # Use nothing on static perl platforms, and to the flags needed
@@ -1004,9 +1013,9 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
        # or -R to add paths to the run-time library search path.
        if ($Config{'useshrplib'}) {
            if ($Config{'lddlflags'} =~ /-Wl,-R/) {
-               $libs = '-L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -lperl';
+               $libs .= ' -L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -lperl';
            } elsif ($Config{'lddlflags'} =~ /-R/) {
-               $libs = '-L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -lperl';
+               $libs .= ' -L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -lperl';
            }
        }
     }
@@ -1089,6 +1098,20 @@ in these dirs:
     0; # false and not empty
 }
 
+=item find_tests
+
+  my $test = $mm->find_tests;
+
+Returns a string suitable for feeding to the shell to return all
+tests in t/*.t.
+
+=cut
+
+sub find_tests {
+    my($self) = shift;
+    return 't/*.t';
+}
+
 =back
 
 =head2 Methods to actually produce chunks of text for the Makefile
@@ -1113,7 +1136,7 @@ sub fixin { # stolen from the pink Camel book, more or less
     for my $file (@files) {
        local(*FIXIN);
        local(*FIXOUT);
-       open(FIXIN, $file) or Carp::croak "Can't process '$file': $!";
+       open(FIXIN, $file) or croak "Can't process '$file': $!";
        local $/ = "\n";
        chomp(my $line = <FIXIN>);
        next unless $line =~ s/^\s*\#!\s*//;     # Not a shbang file.
@@ -1326,8 +1349,15 @@ sub init_dirscan {       # --- File and Directory Lists (.xs .pm .pod etc)
     # (which includes PARENT_NAME). This is a subtle distinction but one
     # that's important for nested modules.
 
-    $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}]
+    if ($Is_VMS) {
+      # avoid logical name collisions by adding directory syntax
+      $self->{PMLIBDIRS} = ['./lib', './' . $self->{BASEEXT}]
        unless $self->{PMLIBDIRS};
+    }
+    else {
+      $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}]
+       unless $self->{PMLIBDIRS};
+    }
 
     #only existing directories that aren't in $dir are allowed
 
@@ -1543,8 +1573,19 @@ sub init_main {
 
     if ($self->{PERL_SRC}){
        $self->{PERL_LIB}     ||= File::Spec->catdir("$self->{PERL_SRC}","lib");
-       $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
-       $self->{PERL_INC}     = ($Is_Win32) ? File::Spec->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
+
+        if (defined $Cross::platform) {
+            $self->{PERL_ARCHLIB} = 
+              File::Spec->catdir("$self->{PERL_SRC}","xlib",$Cross::platform);
+            $self->{PERL_INC}     = 
+              File::Spec->catdir("$self->{PERL_SRC}","xlib",$Cross::platform, 
+                                 $Is_Win32?("CORE"):());
+        }
+        else {
+            $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
+            $self->{PERL_INC}     = ($Is_Win32) ? 
+              File::Spec->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
+        }
 
        # catch a situation that has occurred a few times in the past:
        unless (
@@ -1580,7 +1621,6 @@ from the perl source tree.
        $self->{PERL_INC}     = File::Spec->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
        my $perl_h;
 
-       no warnings 'uninitialized' ;
        if (not -f ($perl_h = File::Spec->catfile($self->{PERL_INC},"perl.h"))
            and not $old){
            # Maybe somebody tries to build an extension with an
@@ -1678,17 +1718,21 @@ usually solves this kind of problem.
     # Determine VERSION and VERSION_FROM
     ($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME};
     if ($self->{VERSION_FROM}){
-       $self->{VERSION} = $self->parse_version($self->{VERSION_FROM}) or
-           Carp::carp "WARNING: Setting VERSION via file '$self->{VERSION_FROM}' failed\n"
+       $self->{VERSION} = $self->parse_version($self->{VERSION_FROM});
+        if( $self->{VERSION} eq 'undef' ) {
+           carp "WARNING: Setting VERSION via file ".
+                 "'$self->{VERSION_FROM}' failed\n";
+        }
     }
 
     # strip blanks
-    if ($self->{VERSION}) {
+    if (defined $self->{VERSION}) {
        $self->{VERSION} =~ s/^\s+//;
        $self->{VERSION} =~ s/\s+$//;
     }
-
-    $self->{VERSION} ||= "0.10";
+    else {
+        $self->{VERSION} = '';
+    }
     ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g;
 
     $self->{DISTVNAME} = "$self->{DISTNAME}-$self->{VERSION}";
@@ -1794,7 +1838,14 @@ sub init_INST {
     # you to build directly into, say $Config{privlibexp}.
     unless ($self->{INST_LIB}){
        if ($self->{PERL_CORE}) {
-           $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
+            if (defined $Cross::platform) {
+                $self->{INST_LIB} = $self->{INST_ARCHLIB} = 
+                  File::Spec->catdir($self->{PERL_LIB},"..","xlib",
+                                     $Cross::platform);
+            }
+            else {
+                $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
+            }
        } else {
            $self->{INST_LIB} = File::Spec->catdir($Curdir,"blib","lib");
        }
@@ -1829,22 +1880,217 @@ INSTALLDIRS) and PREFIX.
 sub init_INSTALL {
     my($self) = shift;
 
+    $self->init_lib2arch;
+
+    if( $Config{usevendorprefix} ) {
+        $Config_Override{installvendorman1dir} =
+          File::Spec->catdir($Config{vendorprefixexp}, 'man', 'man$(MAN1EXT)');
+        $Config_Override{installvendorman3dir} =
+          File::Spec->catdir($Config{vendorprefixexp}, 'man', 'man$(MAN3EXT)');
+    }
+    else {
+        $Config_Override{installvendorman1dir} = '';
+        $Config_Override{installvendorman3dir} = '';
+    }
+
+    my $iprefix = $Config{installprefixexp} || $Config{installprefix} || 
+                  $Config{prefixexp}        || $Config{prefix} || '';
+    my $vprefix = $Config{usevendorprefix}  ? $Config{vendorprefixexp} : '';
+    my $sprefix = $Config{siteprefixexp}    || '';
+
+    # 5.005_03 doesn't have a siteprefix.
+    $sprefix = $iprefix unless $sprefix;
+
+    # There are often no Config.pm defaults for these, but we can make
+    # it up.
+    unless( $Config{installsiteman1dir} ) {
+        $Config_Override{installsiteman1dir} = 
+          File::Spec->catdir($sprefix, 'man', 'man$(MAN1EXT)');
+    }
+
+    unless( $Config{installsiteman3dir} ) {
+        $Config_Override{installsiteman3dir} = 
+          File::Spec->catdir($sprefix, 'man', 'man$(MAN3EXT)');
+    }
+
+    unless( $Config{installsitebin} ) {
+        $Config_Override{installsitebin} =
+          File::Spec->catdir($sprefix, 'bin');
+    }
+
+    my $u_prefix  = $self->{PREFIX}       || '';
+    my $u_sprefix = $self->{SITEPREFIX}   || $u_prefix;
+    my $u_vprefix = $self->{VENDORPREFIX} || $u_prefix;
+
+    $self->{PREFIX}       ||= $u_prefix  || $iprefix;
+    $self->{SITEPREFIX}   ||= $u_sprefix || $sprefix;
+    $self->{VENDORPREFIX} ||= $u_vprefix || $vprefix;
+
+    my $arch    = $Config{archname};
+    my $version = $Config{version};
+
+    # default style
+    my $libstyle = 'lib/perl5';
+    my $manstyle = '';
+
+    if( $self->{LIBSTYLE} ) {
+        $libstyle = $self->{LIBSTYLE};
+        $manstyle = $self->{LIBSTYLE} eq 'lib/perl5' ? 'lib/perl5' : '';
+    }
+
+    # Some systems, like VOS, set installman*dir to '' if they can't
+    # read man pages.
+    for my $num (1, 3) {
+        $self->{'INSTALLMAN'.$num.'DIR'} ||= 'none'
+          unless $Config{'installman'.$num.'dir'};
+    }
+
+    my %bin_layouts = 
+    (
+        bin         => { s => $iprefix,
+                         r => $u_prefix,
+                         d => 'bin' },
+        vendorbin   => { s => $vprefix,
+                         r => $u_vprefix,
+                         d => 'bin' },
+        sitebin     => { s => $sprefix,
+                         r => $u_sprefix,
+                         d => 'bin' },
+        script      => { s => $iprefix,
+                         r => $u_prefix,
+                         d => 'bin' },
+    );
+    
+    my %man_layouts =
+    (
+        man1dir         => { s => $iprefix,
+                             r => $u_prefix,
+                             d => 'man/man$(MAN1EXT)',
+                             style => $manstyle, },
+        siteman1dir     => { s => $sprefix,
+                             r => $u_sprefix,
+                             d => 'man/man$(MAN1EXT)',
+                             style => $manstyle, },
+        vendorman1dir   => { s => $vprefix,
+                             r => $u_vprefix,
+                             d => 'man/man$(MAN1EXT)',
+                             style => $manstyle, },
+
+        man3dir         => { s => $iprefix,
+                             r => $u_prefix,
+                             d => 'man/man$(MAN3EXT)',
+                             style => $manstyle, },
+        siteman3dir     => { s => $sprefix,
+                             r => $u_sprefix,
+                             d => 'man/man$(MAN3EXT)',
+                             style => $manstyle, },
+        vendorman3dir   => { s => $vprefix,
+                             r => $u_vprefix,
+                             d => 'man/man$(MAN3EXT)',
+                             style => $manstyle, },
+    );
+
+    my %lib_layouts =
+    (
+        privlib     => { s => $iprefix,
+                         r => $u_prefix,
+                         d => '',
+                         style => $libstyle, },
+        vendorlib   => { s => $vprefix,
+                         r => $u_vprefix,
+                         d => '',
+                         style => $libstyle, },
+        sitelib     => { s => $sprefix,
+                         r => $u_sprefix,
+                         d => 'site_perl',
+                         style => $libstyle, },
+        
+        archlib     => { s => $iprefix,
+                         r => $u_prefix,
+                         d => "$version/$arch",
+                         style => $libstyle },
+        vendorarch  => { s => $vprefix,
+                         r => $u_vprefix,
+                         d => "$version/$arch",
+                         style => $libstyle },
+        sitearch    => { s => $sprefix,
+                         r => $u_sprefix,
+                         d => "site_perl/$version/$arch",
+                         style => $libstyle },
+    );
+
+
+    # Special case for LIB.
+    if( $self->{LIB} ) {
+        foreach my $var (keys %lib_layouts) {
+            my $Installvar = uc "install$var";
+
+            if( $var =~ /arch/ ) {
+                $self->{$Installvar} ||= 
+                  File::Spec->catdir($self->{LIB}, $Config{archname});
+            }
+            else {
+                $self->{$Installvar} ||= $self->{LIB};
+            }
+        }
+    }
+
+
+    my %layouts = (%bin_layouts, %man_layouts, %lib_layouts);
+    while( my($var, $layout) = each(%layouts) ) {
+        my($s, $r, $d, $style) = @{$layout}{qw(s r d style)};
+
+        print STDERR "Prefixing $var\n" if $Verbose >= 2;
+
+        my $installvar = "install$var";
+        my $Installvar = uc $installvar;
+        next if $self->{$Installvar};
+
+        if( $r ) {
+            $d = "$style/$d" if $style;
+            $self->prefixify($installvar, $s, $r, $d);
+        }
+        else {
+            $self->{$Installvar} = $Config_Override{$installvar} || 
+                                   $Config{$installvar};
+        }
+
+        print STDERR "  $Installvar == $self->{$Installvar}\n" 
+          if $Verbose >= 2;
+    }
+
+    return 1;
+}
+
+=begin _protected
+
+=item init_lib2arch
+
+    $mm->init_lib2arch
+
+=end _protected
+
+=cut
+
+sub init_lib2arch {
+    my($self) = shift;
+
     # The user who requests an installation directory explicitly
     # should not have to tell us an architecture installation directory
     # as well. We look if a directory exists that is named after the
     # architecture. If not we take it as a sign that it should be the
     # same as the requested installation directory. Otherwise we take
     # the found one.
-    # We do the same thing twice: for privlib/archlib and for sitelib/sitearch
-    for my $libpair ({l=>"privlib", a=>"archlib"}, 
-                     {l=>"sitelib", a=>"sitearch"}) 
+    for my $libpair ({l=>"privlib",   a=>"archlib"}, 
+                     {l=>"sitelib",   a=>"sitearch"},
+                     {l=>"vendorlib", a=>"vendorarch"},
+                    )
     {
         my $lib = "install$libpair->{l}";
         my $Lib = uc $lib;
         my $Arch = uc "install$libpair->{a}";
         if( $self->{$Lib} && ! $self->{$Arch} ){
             my($ilib) = $Config{$lib};
-            $ilib = VMS::Filespec::unixify($ilib) if $Is_VMS;
 
             $self->prefixify($Arch,$ilib,$self->{$Lib});
 
@@ -1856,89 +2102,9 @@ sub init_INSTALL {
             print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose;
         }
     }
-
-    # we have to look at the relation between $Config{prefix} and the
-    # requested values. We're going to set the $Config{prefix} part of
-    # all the installation path variables to literally $(PREFIX), so
-    # the user can still say make PREFIX=foo
-    my($configure_prefix) = $Config{'prefix'};
-    $configure_prefix = VMS::Filespec::unixify($configure_prefix) if $Is_VMS;
-    $self->{PREFIX} ||= $configure_prefix;
-
-
-    my($search_prefix, $replace_prefix);
-    # If the prefix contains perl, Configure shapes the tree as follows:
-    #    perlprefix/lib/                INSTALLPRIVLIB
-    #    perlprefix/lib/pod/
-    #    perlprefix/lib/site_perl/      INSTALLSITELIB
-    #    perlprefix/bin/                INSTALLBIN
-    #    perlprefix/man/                INSTALLMAN1DIR
-    # else
-    #    prefix/lib/perl5/              INSTALLPRIVLIB
-    #    prefix/lib/perl5/pod/
-    #    prefix/lib/perl5/site_perl/    INSTALLSITELIB
-    #    prefix/bin/                    INSTALLBIN
-    #    prefix/lib/perl5/man/          INSTALLMAN1DIR
-    #
-    # The above results in various kinds of breakage on various
-    # platforms, so we cope with it as follows: if prefix/lib/perl5
-    # or prefix/lib/perl5/man exist, we'll replace those instead
-    # of /prefix/{lib,man}
-
-    $replace_prefix = '$(PREFIX)';
-    for my $install_variable (qw/INSTALLBIN INSTALLSCRIPT/)
-    {
-        $self->prefixify($install_variable,$configure_prefix,$replace_prefix);
-    }
-
-    my $funkylibdir = File::Spec->catdir($configure_prefix,"lib","perl5");
-    $funkylibdir = '' unless -d $funkylibdir;
-    $search_prefix = $funkylibdir || 
-                     File::Spec->catdir($configure_prefix,"lib");
-
-    if ($self->{LIB}) {
-        $self->{INSTALLPRIVLIB} = $self->{INSTALLSITELIB} = $self->{LIB};
-        $self->{INSTALLARCHLIB} = $self->{INSTALLSITEARCH} = 
-            File::Spec->catdir($self->{LIB},$Config{'archname'});
-    }
-    else {
-        if (-d File::Spec->catdir($self->{PREFIX},"lib","perl5")) {
-            $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib", 
-                                                 "perl5");
-        }
-        else {
-            $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib");
-        }
-        for my $install_variable (qw/
-                               INSTALLPRIVLIB
-                               INSTALLARCHLIB
-                               INSTALLSITELIB
-                               INSTALLSITEARCH
-                               /)
-        {
-            $self->prefixify($install_variable,$search_prefix,$replace_prefix);
-        }
-    }
-    my $funkymandir = File::Spec->catdir($configure_prefix,"lib","perl5","man");
-    $funkymandir = '' unless -d $funkymandir;
-    $search_prefix = $funkymandir || File::Spec->catdir($configure_prefix,"man");
-    if (-d File::Spec->catdir($self->{PREFIX},"lib","perl5", "man")) {
-        $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man");
-    }
-    else {
-        $replace_prefix = File::Spec->catdir(qq[\$\(PREFIX\)],"man");
-    }
-    for my $install_variable (qw/
-                           INSTALLMAN1DIR
-                           INSTALLMAN3DIR
-                           /)
-    {
-        $self->prefixify($install_variable,$search_prefix,$replace_prefix);
-    }
-
-    return 1;
 }
 
+
 =item init_PERL
 
     $mm->init_PERL;
@@ -2059,6 +2225,8 @@ install_perl :: all pure_perl_install doc_perl_install
 
 install_site :: all pure_site_install doc_site_install
 
+install_vendor :: all pure_vendor_install doc_vendor_install
+
 pure_install :: pure_$(INSTALLDIRS)_install
 
 doc_install :: doc_$(INSTALLDIRS)_install
@@ -2090,13 +2258,22 @@ pure_site_install ::
                write }.File::Spec->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
                $(INST_LIB) $(INSTALLSITELIB) \
                $(INST_ARCHLIB) $(INSTALLSITEARCH) \
-               $(INST_BIN) $(INSTALLBIN) \
+               $(INST_BIN) $(INSTALLSITEBIN) \
                $(INST_SCRIPT) $(INSTALLSCRIPT) \
-               $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
-               $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+               $(INST_MAN1DIR) $(INSTALLSITEMAN1DIR) \
+               $(INST_MAN3DIR) $(INSTALLSITEMAN3DIR)
        }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
                }.File::Spec->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
 
+pure_vendor_install ::
+       }.$self->{NOECHO}.q{$(MOD_INSTALL) \
+               $(INST_LIB) $(INSTALLVENDORLIB) \
+               $(INST_ARCHLIB) $(INSTALLVENDORARCH) \
+               $(INST_BIN) $(INSTALLVENDORBIN) \
+               $(INST_SCRIPT) $(INSTALLSCRIPT) \
+               $(INST_MAN1DIR) $(INSTALLVENDORMAN1DIR) \
+               $(INST_MAN3DIR) $(INSTALLVENDORMAN3DIR)
+
 doc_perl_install ::
        -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
        -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
@@ -2115,7 +2292,9 @@ doc_site_install ::
                LINKTYPE "$(LINKTYPE)" \
                VERSION "$(VERSION)" \
                EXE_FILES "$(EXE_FILES)" \
-               >> }.File::Spec->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
+               >> }.File::Spec->catfile('$(INSTALLSITEARCH)','perllocal.pod').q{
+
+doc_vendor_install ::
 
 };
 
@@ -2572,7 +2751,7 @@ q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
  $self->{MAKEFILE}, q[";' \\
 -e 'print "Manifying $$m{$$_}\n";' \\
 -e 'system(q[$(PERLRUN) $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
--e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
+-e 'chmod(oct($(PERM_RW)), $$m{$$_}) or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
 ];
     push @m, "\nmanifypods : pure_all ";
     push @m, join " \\\n\t", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}};
@@ -2647,7 +2826,8 @@ sub needs_linking {
     my($self) = shift;
     my($child,$caller);
     $caller = (caller(0))[3];
-    Carp::confess("Needs_linking called too early") if $caller =~ /^ExtUtils::MakeMaker::/;
+    confess("Needs_linking called too early") if 
+      $caller =~ /^ExtUtils::MakeMaker::/;
     return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING};
     if ($self->has_link_code or $self->{MAKEAPERL}){
        $self->{NEEDS_LINKING} = 1;
@@ -2737,13 +2917,14 @@ sub parse_version {
                $_
            }; \$$2
        };
-       no warnings;
+        local $^W = 0;
        $result = eval($eval);
        warn "Could not eval '$eval' in $parsefile: $@" if $@;
-       $result = "undef" unless defined $result;
        last;
     }
     close FH;
+
+    $result = "undef" unless defined $result;
     return $result;
 }
 
@@ -2987,8 +3168,8 @@ sub ppd {
 
     if ($self->{ABSTRACT_FROM}){
         $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or
-            Carp::carp "WARNING: Setting ABSTRACT via file ".
-                       "'$self->{ABSTRACT_FROM}' failed\n";
+            carp "WARNING: Setting ABSTRACT via file ".
+                 "'$self->{ABSTRACT_FROM}' failed\n";
     }
 
     my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0)x4)[0..3];
@@ -3076,23 +3257,21 @@ simply use '/home/foo/man/man1'.
 sub prefixify {
     my($self,$var,$sprefix,$rprefix,$default) = @_;
 
-    my $path = $self->{uc $var} || $Config{lc $var};
-
-    print STDERR "Prefixing $var=$path\n" if $Verbose >= 2;
-    print STDERR "  from $sprefix to $rprefix\n" 
-      if $Verbose >= 2;
+    my $path = $self->{uc $var} || 
+               $Config_Override{lc $var} || $Config{lc $var} || '';
 
-    $path = VMS::Filespec::unixpath($path) if $Is_VMS;
+    print STDERR "  prefixify $var => $path\n" if $Verbose >= 2;
+    print STDERR "    from $sprefix to $rprefix\n" if $Verbose >= 2;
 
-    unless( $path =~ s,^\Q$sprefix\E(?=/|\z),$rprefix,s ) {
+    unless( $path =~ s{^\Q$sprefix\E\b}{$rprefix}s ) {
 
-        print STDERR "  cannot prefix, using default.\n" if $Verbose >= 2;
-        print STDERR "  no default!\n" if $Verbose >= 2;
+        print STDERR "    cannot prefix, using default.\n" if $Verbose >= 2;
+        print STDERR "    no default!\n" if !$default && $Verbose >= 2;
 
         $path = File::Spec->catdir($rprefix, $default) if $default;
     }
 
-    print "  now $path\n" if $Verbose >= 2;
+    print "    now $path\n" if $Verbose >= 2;
     return $self->{uc $var} = $path;
 }
 
@@ -3407,7 +3586,7 @@ sub test {
     my($self, %attribs) = @_;
     my $tests = $attribs{TESTS} || '';
     if (!$tests && -d 't') {
-       $tests = $Is_Win32 ? join(' ', <t\\*.t>) : 't/*.t';
+        $tests = $self->find_tests;
     }
     # note: 'test.pl' name is also hardcoded in init_dirscan()
     my(@m);