summaryrefslogtreecommitdiff
path: root/installperl
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1998-04-08 00:14:13 +0000
committerGurusamy Sarathy <gsar@cpan.org>1998-04-08 00:14:13 +0000
commitba3eb2af450c2577c20a691fb686a5e02955c48b (patch)
treea8cf1145dc0c922547f90f92d9c444715752d512 /installperl
parent00dc2f4f23da07658d2634f904ac3a098aaa4153 (diff)
parent8c9208bc5764dada175aceff9d0b1938978d7db6 (diff)
downloadperl-ba3eb2af450c2577c20a691fb686a5e02955c48b.tar.gz
[asperl] integrate mainline changes
p4raw-id: //depot/asperl@884
Diffstat (limited to 'installperl')
-rwxr-xr-xinstallperl77
1 files changed, 64 insertions, 13 deletions
diff --git a/installperl b/installperl
index 222f3d4761..07be34188f 100755
--- a/installperl
+++ b/installperl
@@ -5,14 +5,18 @@ BEGIN {
chdir '..' if !-d 'lib' and -d '..\lib';
@INC = 'lib';
$ENV{PERL5LIB} = 'lib';
+ $Is_VMS = $^O eq 'VMS';
+ if ($Is_VMS) { eval 'use VMS::Filespec;' }
}
use File::Find;
use File::Compare;
use File::Copy ();
use File::Path ();
+use ExtUtils::Packlist;
use Config;
use subs qw(unlink link chmod);
+use vars qw($packlist);
# override the ones in the rest of the script
sub mkpath {
@@ -28,13 +32,15 @@ while (@ARGV) {
shift;
}
-umask 022;
+umask 022 unless $Is_VMS;
@scripts = qw( utils/c2ph utils/h2ph utils/h2xs
utils/perlbug utils/perldoc utils/pl2pm utils/splain
x2p/s2p x2p/find2perl
pod/pod2man pod/pod2html pod/pod2latex pod/pod2text);
+if ($Is_VMS) { @scripts = map { "$_.Com" } @scripts; }
+
@pods = (<pod/*.pod>);
%archpms = (Config => 1, FileHandle => 1, overload => 1);
@@ -75,6 +81,14 @@ $dlext = $Config{dlext};
$d_dosuid = $Config{d_dosuid};
$binexp = $Config{binexp};
+if ($Is_VMS) { # Hang in there until File::Spec hits the big time
+ foreach ( \$installbin, \$installscript, \$installprivlib,
+ \$installarchlib, \$installsitelib, \$installsitearch,
+ \$installman1dir ) {
+ $$_ = unixify($$_); $$_ =~ s:/$::;
+ }
+}
+
# Do some quick sanity checks.
if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
@@ -106,9 +120,20 @@ copy("$perldll", "$installbin/$perldll");
chmod(0755, "$installbin/$perldll");
}
+# This will be used to store the packlist
+$packlist = ExtUtils::Packlist->new("$installarchlib/.packlist");
+
# First we install the version-numbered executables.
-if ($^O ne 'dos') {
+if ($Is_VMS) {
+ safe_unlink("$installbin/perl$exe_ext");
+ copy("perl$exe_ext", "$installbin/perl$exe_ext");
+ chmod(0755, "$installbin/perl$exe_ext");
+ safe_unlink("$installbin/perlshr$exe_ext");
+ copy("perlshr$exe_ext", "$installbin/perlshr$exe_ext");
+ chmod(0755, "$installbin/perlshr$exe_ext");
+}
+elsif ($^O ne 'dos') {
safe_unlink("$installbin/perl$ver$exe_ext");
copy("perl$exe_ext", "$installbin/perl$ver$exe_ext");
chmod(0755, "$installbin/perl$ver$exe_ext");
@@ -148,11 +173,18 @@ else {
# Install header files and libraries.
mkpath("$installarchlib/CORE", 1, 0777);
-@corefiles = <*.h libperl*.*>;
-# AIX needs perl.exp installed as well.
-push(@corefiles,'perl.exp') if $^O eq 'aix';
-# If they have built sperl.o...
-push(@corefiles,'sperl.o') if -f 'sperl.o';
+if ($Is_VMS) { # We did core file selection during build
+ my $coredir = "lib/$Config{'arch'}/$]";
+ $coredir =~ tr/./_/;
+ @corefiles = <$coredir/*.*>;
+}
+else {
+ @corefiles = <*.h libperl*.*>;
+ # AIX needs perl.exp installed as well.
+ push(@corefiles,'perl.exp') if $^O eq 'aix';
+ # If they have built sperl.o...
+ push(@corefiles,'sperl.o') if -f 'sperl.o';
+}
foreach $file (@corefiles) {
# HP-UX (at least) needs to maintain execute permissions
# on dynamically-loadable libraries. So we do it for all.
@@ -164,7 +196,7 @@ foreach $file (@corefiles) {
# Install main perl executables
# Make links to ordinary names if installbin directory isn't current directory.
-if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos')) {
+if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS) {
safe_unlink("$installbin/perl$exe_ext", "$installbin/suidperl$exe_ext");
link("$installbin/perl$ver$exe_ext", "$installbin/perl$exe_ext");
link("$installbin/sperl$ver$exe_ext", "$installbin/suidperl$exe_ext")
@@ -175,7 +207,7 @@ if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos')) {
$mainperl_is_instperl = 0;
-if (!$versiononly && !$nonono && $^O ne 'MSWin32' && -t STDIN && -t STDERR
+if (!$versiononly && !$nonono && $^O ne 'MSWin32' && !$Is_VMS && -t STDIN && -t STDERR
&& -w $mainperldir && ! samepath($mainperldir, $installbin)) {
local($usrbinperl) = "$mainperldir/perl$exe_ext";
local($instperl) = "$installbin/perl$exe_ext";
@@ -239,9 +271,10 @@ if (! $versiononly) {
# pstruct should be a link to c2ph
if (! $versiononly) {
- safe_unlink("$installscript/pstruct");
- if ($^O eq 'dos') {
- copy("$installscript/c2ph","$installscript/pstruct");
+ safe_unlink("$installscript/pstruct" . ($Is_VMS ? '.Com' : ''));
+ if ($^O eq 'dos' or $Is_VMS) {
+ copy("$installscript/c2ph" . ($Is_VMS ? '.Com' : ''),
+ "$installscript/pstruct" . ($Is_VMS ? '.Com' : ''));
} else {
link("$installscript/c2ph","$installscript/pstruct");
}
@@ -275,6 +308,7 @@ if (! $versiononly || !($installprivlib =~ m/\Q$]/)) {
# Link perldiag.pod into archlib
my ($from, $to) = ("${installprivlib}/pod/perldiag.pod",
"${installarchlib}/pod/perldiag.pod");
+ $packlist->{$to} = { from => $from, type => 'link' };
if (compare($from, $to) || $nonono) {
mkpath("${installarchlib}/pod", 1, 0777);
unlink($to);
@@ -293,6 +327,13 @@ if (!$versiononly) {
$dirsep = ($^O eq 'os2' || $^O eq 'MSWin32') ? ';' : ':' ;
($path = $ENV{"PATH"}) =~ s:\\:/:g ;
@path = split(/$dirsep/, $path);
+ if ($Is_VMS) {
+ my $i = 0;
+ while (exists $ENV{'DCL$PATH' . $i}) {
+ $dir = unixpath($ENV{'DCL$PATH' . $i}); $dir =~ s-/$--;
+ push(@path,$dir);
+ }
+ }
@otherperls = ();
for (@path) {
next unless m,^/,;
@@ -314,6 +355,7 @@ if (!$versiononly) {
}
+$packlist->write() unless $nono;
print STDERR " Installation complete\n";
exit 0;
@@ -334,6 +376,8 @@ sub unlink {
local(@names) = @_;
my($cnt) = 0;
+ return scalar(@names) if $Is_VMS;
+
foreach $name (@names) {
next unless -e $name;
chmod 0777, $name if ($^O eq 'os2' || $^O eq 'MSWin32');
@@ -345,7 +389,7 @@ sub unlink {
}
sub safe_unlink {
- return if $nonono;
+ return if $nonono or $Is_VMS;
local @names = @_;
foreach $name (@names) {
next unless -e $name;
@@ -387,12 +431,15 @@ sub link {
? die "AFS" # okay inside eval {}
: warn "Couldn't link $from to $to: $!\n"
unless $nonono;
+ $packlist->{$to} = { from => $from, type => 'link' };
};
if ($@) {
+ print STDERR " creating new version of $to\n" if $Is_VMS and -e $to;
File::Copy::copy($from, $to)
? $success++
: warn "Couldn't copy $from to $to: $!\n"
unless $nonono;
+ $packlist->{$to} = { type => 'file' };
}
$success;
}
@@ -411,9 +458,11 @@ sub copy {
my($from,$to) = @_;
print STDERR " cp $from $to\n";
+ print STDERR " creating new version of $to\n" if $Is_VMS and -e $to;
File::Copy::copy($from, $to)
|| warn "Couldn't copy $from to $to: $!\n"
unless $nonono;
+ $packlist->{$to} = { type => 'file' };
}
sub samepath {
@@ -469,6 +518,7 @@ sub installlib {
#This might not work because $archname might have changed.
unlink("$installarchlib/$name");
}
+ $packlist->{"$installlib/$name"} = { type => 'file' };
if (compare($_, "$installlib/$name") || $nonono) {
unlink("$installlib/$name");
mkpath("$installlib/$dir", 1, 0777);
@@ -496,6 +546,7 @@ sub installlib {
sub copy_if_diff {
my($from,$to)=@_;
-f $from || die "$0: $from not found";
+ $packlist->{$to} = { type => 'file' };
if (compare($from, $to) || $nonono) {
safe_unlink($to); # In case we don't have write permissions.
if ($nonono) {