up patchlevel &c
[p5sagit/p5-mst-13.2.git] / installperl
index 93b9947..8077add 100755 (executable)
@@ -8,12 +8,13 @@ BEGIN {
 }
 
 use strict;
-use vars qw($Is_VMS $Is_W32 $Is_OS2 $nonono $versiononly $depth);
+use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $nonono $versiononly $depth);
 
 BEGIN {
     $Is_VMS = $^O eq 'VMS';
     $Is_W32 = $^O eq 'MSWin32';
     $Is_OS2 = $^O eq 'os2';
+    $Is_Cygwin = $^O =~ /cygwin/i;
     if ($Is_VMS) { eval 'use VMS::Filespec;' }
 }
 
@@ -39,6 +40,14 @@ my $exe_ext = $Config{exe_ext};
 # Allow ``make install PERLNAME=something_besides_perl'':
 my $perl = defined($ENV{PERLNAME}) ? $ENV{PERLNAME} : 'perl';
 
+# This is the base used for versioned names, like "perl5.005".
+# It's separate because a common use of $PERLNAME is to install
+# perl as "perl5", if that's used as base for versioned files you
+# get "perl55.005".
+my $perl_verbase = defined($ENV{PERLNAME_VERBASE})
+                   ? $ENV{PERLNAME_VERBASE}
+                   : $perl;
+
 while (@ARGV) {
     $nonono = 1 if $ARGV[0] eq '-n';
     $versiononly = 1 if $ARGV[0] eq '-v';
@@ -133,10 +142,24 @@ if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
                        || warn "WARNING: You've never run 'make test'!!!",
                                "  (Installing anyway.)\n";
 
-if ($Is_W32) {
-
-my $perldll = 'perl.' . $dlext;
-$perldll = 'perlcore.' . $dlext if $Config{'ccflags'} =~ /PERL_OBJECT/i;
+if ($Is_W32 or $Is_Cygwin) {
+  my $perldll;
+
+if ($Is_Cygwin) {
+  $perldll = $libperl;
+  $perldll =~ s/(\..*)?$/.$dlext/;
+  if ($Config{useshrplib} eq 'true') {
+    # install ld2 and perlld as well
+    foreach ('ld2', 'perlld') {
+      safe_unlink("$installbin/$_");
+      copy("$_", "$installbin/$_");
+      chmod(0755, "$installbin/$_");
+    };
+  };
+} else {
+  $perldll = 'perl.' . $dlext;
+  $perldll = 'perlcore.' . $dlext if $Config{'ccflags'} =~ /PERL_OBJECT/i;
+}
 
 -f $perldll || die "No perl DLL built\n";
 
@@ -171,20 +194,20 @@ elsif ($^O eq 'mpeix') {
     link($Config{perlpath}, "$installbin/perl$ver$exe_ext");
 }
 elsif ($^O ne 'dos') {
-    safe_unlink("$installbin/$perl$ver$exe_ext");
-    copy("perl$exe_ext", "$installbin/$perl$ver$exe_ext");
-    strip("$installbin/perl$ver$exe_ext") if $^O =~ /^(rhapsody)$;
-    chmod(0755, "$installbin/$perl$ver$exe_ext");
+    safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
+    copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
+    strip("$installbin/$perl_verbase$ver$exe_ext") if $^O =~ /^(rhapsody)$/;
+    chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
 }
 else {
     safe_unlink("$installbin/$perl.exe");
     copy("perl.exe", "$installbin/$perl.exe");
 }
 
-safe_unlink("$installbin/s$perl$ver$exe_ext");
+safe_unlink("$installbin/s$perl_verbase$ver$exe_ext");
 if ($d_dosuid) {
-    copy("suidperl$exe_ext", "$installbin/s$perl$ver$exe_ext");
-    chmod(04711, "$installbin/s$perl$ver$exe_ext");
+    copy("suidperl$exe_ext", "$installbin/s$perl_verbase$ver$exe_ext");
+    chmod(04711, "$installbin/s$perl_verbase$ver$exe_ext");
 }
 
 # Install library files.
@@ -219,7 +242,9 @@ if ($Is_VMS) {  # We did core file selection during build
     @corefiles = <$coredir/*.*>;
 }
 else {
+    # [als] hard-coded 'libperl' name... not good!
     @corefiles = <*.h libperl*.*>;
+
     # AIX needs perl.exp installed as well.
     push(@corefiles,'perl.exp') if $^O eq 'aix';
     if ($^O eq 'mpeix') {
@@ -236,7 +261,7 @@ foreach my $file (@corefiles) {
     if (copy_if_diff($file,"$installarchlib/CORE/$file")) {
        if ($file =~ /\.(so|\Q$dlext\E)$/) {
            chmod(0555, "$installarchlib/CORE/$file");
-           strip("-S", "$installarchlib/CORE/$file") if $^O =~ /^(rhapsody)$;
+           strip("-S", "$installarchlib/CORE/$file") if $^O =~ /^(rhapsody)$/;
        } else {
            chmod(0444, "$installarchlib/CORE/$file");
        }
@@ -253,9 +278,11 @@ if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VM
        # We don't want another cloned copy.
         symlink($Config{perlpath}, "$installbin/perl$exe_ext");
     } else {
-       link("$installbin/$perl$ver$exe_ext", "$installbin/$perl$exe_ext");
+       link("$installbin/$perl_verbase$ver$exe_ext",
+               "$installbin/$perl$exe_ext");
     }
-    link("$installbin/s$perl$ver$exe_ext", "$installbin/suid$perl$exe_ext") 
+    link("$installbin/s$perl_verbase$ver$exe_ext",
+           "$installbin/suid$perl$exe_ext") 
       if $d_dosuid;
 }
 
@@ -384,14 +411,17 @@ if (!$versiononly) {
         }
     }
     my @otherperls;
+    my %otherperls;
     for (@path) {
        next unless m,^/,;
        # Use &samepath here because some systems have other dirs linked
        # to $mainperldir (like SunOS)
        next if samepath($_, $binexp);
        next if ($mainperl_is_instperl && samepath($_, $mainperldir));
-       push(@otherperls, "$_/$perl$exe_ext")
-           if (-x "$_/$perl$exe_ext" && ! -d "$_/$perl$exe_ext");
+        my $otherperl = "$_/$perl$exe_ext";
+       next if $otherperls{$otherperl}++;
+       push(@otherperls, $otherperl)
+           if (-x $otherperl && ! -d $otherperl);
     }
     if (@otherperls) {
        print STDERR "\nWarning: $perl appears in your path in the following " .
@@ -429,7 +459,7 @@ sub unlink {
 
     foreach my $name (@names) {
        next unless -e $name;
-       chmod 0777, $name if ($Is_OS2 || $Is_W32);
+       chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin);
        print STDERR "  unlink $name\n";
        ( CORE::unlink($name) and ++$cnt 
          or warn "Couldn't unlink $name: $!\n" ) unless $nonono;