This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
configpm, our $summary : unique
[perl5.git] / installperl
index 63a8d66..a12ec62 100755 (executable)
@@ -2,7 +2,7 @@
 
 BEGIN {
     require 5.004;
-    chdir '..' if !-d 'lib' and -d '..\lib';
+    chdir '..' if !-d 'lib' and -d '../lib';
     @INC = 'lib';
     $ENV{PERL5LIB} = 'lib';
 }
@@ -103,6 +103,7 @@ Usage $0: [switches]
             name.
   -p        Don't install the pod files. [This will break use diagnostics;]
   -netware  Install correctly on a Netware server.
+  -destdir  Prefix installation directories by this string.
 EOT
        exit;
     }
@@ -309,6 +310,9 @@ my $packlist = ExtUtils::Packlist->new("$installarchlib/.packlist");
 # First we install the version-numbered executables.
 
 if ($Is_VMS) {
+    safe_unlink("$installbin/perl_setup.com");
+    copy("perl_setup.com", "$installbin/perl_setup.com");
+    chmod(0755, "$installbin/perl_setup.com");
     safe_unlink("$installbin/$dbg$perl$exe_ext");
     copy("$dbg$perl$exe_ext", "$installbin/$dbg$perl$exe_ext");
     chmod(0755, "$installbin/$dbg$perl$exe_ext");
@@ -316,9 +320,12 @@ if ($Is_VMS) {
     copy("$dbg${perl}shr$exe_ext", "$installbin/$dbg${perl}shr$exe_ext");
     chmod(0755, "$installbin/$dbg${perl}shr$exe_ext");
     if ($ndbg) {
-       safe_unlink("$installbin/$ndbg$perl$exe_ext");
-       copy("$ndbg$perl$exe_ext", "$installbin/$ndbg$perl$exe_ext");
-       chmod(0755, "$installbin/$ndbg$perl$exe_ext");
+        safe_unlink("$installbin/$ndbg$perl$exe_ext");
+        copy("$ndbg$perl$exe_ext", "$installbin/$ndbg$perl$exe_ext");
+        chmod(0755, "$installbin/$ndbg$perl$exe_ext");
+       safe_unlink("$installbin/${dbg}a2p$exe_ext");
+       copy("x2p/${dbg}a2p$exe_ext", "$installbin/${dbg}a2p$exe_ext");
+       chmod(0755, "$installbin/${dbg}a2p$exe_ext");
     }
 }
 elsif ($^O eq 'mpeix') {
@@ -497,7 +504,7 @@ if ($Config{installusrbinperl} && $Config{installusrbinperl} eq 'define' &&
 }
 
 # Make links to ordinary names if installbin directory isn't current directory.
-if (!$Is_NetWare) {
+if (!$Is_NetWare && $dbg eq '') {
     if (! samepath($installbin, 'x2p')) {
        my $base = 'a2p';
        $base .= $ver if $versiononly;
@@ -720,14 +727,16 @@ sub link {
        $packlist->{$xto} = { from => $xfrom, type => 'link' };
     };
     if ($@) {
-       warn $@;
+       warn "Replacing link() with File::Copy::copy(): $@";
        print $verbose ? "  cp $from $xto\n" : "  $xto\n" unless $silent;
        print "  creating new version of $xto\n"
                 if $Is_VMS and -e $to and !$silent;
-       File::Copy::copy($from, $to)
-           ? $success++
-           : warn "Couldn't copy $from to $to: $!\n"
-         unless $nonono;
+       unless ($nonono or File::Copy::copy($from, $to) and ++$success) {
+           # Might have been that F::C::c can't overwrite the target
+           warn "Couldn't copy $from to $to: $!\n"
+               unless -f $to and (chmod(0666, $to), unlink $to)
+                       and File::Copy::copy($from, $to) and ++$success;
+       }
        $packlist->{$xto} = { type => 'file' };
     }
     $success;
@@ -750,9 +759,12 @@ sub copy {
     $xto =~ s/^\Q$destdir\E// if $destdir;
     print $verbose ? "  cp $from $xto\n" : "  $xto\n" unless $silent;
     print "  creating new version of $xto\n" if $Is_VMS and -e $to and !$silent;
-    File::Copy::copy($from, $to)
-       || warn "Couldn't copy $from to $to: $!\n"
-      unless $nonono;
+    unless ($nonono or File::Copy::copy($from, $to)) {
+       # Might have been that F::C::c can't overwrite the target
+       warn "Couldn't copy $from to $to: $!\n"
+           unless -f $to and (chmod(0666, $to), unlink $to)
+                  and File::Copy::copy($from, $to);
+    }
     $packlist->{$xto} = { type => 'file' };
 }
 
@@ -780,7 +792,7 @@ sub installlib {
     my $name = $_;
 
     # Ignore version control directories.
-    if (($name eq 'CVS' or $name eq 'RCS' or $name eq '.svn') and -d $name) {
+    if ($name =~ /^(?:CVS|RCS|SCCS|\.svn)\z/ and -d $name) {
        $File::Find::prune = 1;
        return;
     }
@@ -791,6 +803,8 @@ sub installlib {
              $dir  =~ m{/t(?:/|$)};
     # ignore the cpan script in lib/CPAN/bin (installed later with other utils)
     return if $name eq 'cpan';
+    # ignore the Makefiles
+    return if $name =~ /^makefile$/i;
     # ignore the test extensions
     return if $dir =~ m{ext/XS/(?:APItest|Typemap)/};