BEGIN {
require 5.004;
- chdir '..' if !-d 'lib' and -d '..\lib';
+ chdir '..' if !-d 'lib' and -d '../lib';
@INC = 'lib';
$ENV{PERL5LIB} = 'lib';
}
my $perl_verbase = defined($ENV{PERLNAME_VERBASE})
? $ENV{PERLNAME_VERBASE}
: $perl;
+my $dbg = '';
+my $ndbg = '';
+if ( $Is_VMS ) {
+ if ( defined $Config{usevmsdebug} ) {
+ if ( $Config{usevmsdebug} eq 'define' ) {
+ $dbg = 'dbg';
+ $ndbg = 'ndbg';
+ }
+ }
+}
$otherperls = 1;
+my $destdir = '';
while (@ARGV) {
$nonono = 1 if $ARGV[0] eq '-n';
$dostrip = 1 if $ARGV[0] eq '-s';
$archname = 1 if $ARGV[0] eq '-A';
$nwinstall = 1 if $ARGV[0] eq '-netware';
$nopods = 1 if $ARGV[0] eq '-p';
+ $destdir = $1 if $ARGV[0] =~ /^-?-destdir=(.*)$/;
if ($ARGV[0] eq '-?' or $ARGV[0] =~ /^-?-h/) {
print <<"EOT";
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;
}
open SCRIPTS, "utils.lst" or die "Can't open utils.lst: $!";
while (<SCRIPTS>) {
next if /^#/;
- next if /#\s*pod\s*=/; # Binary programs need separate treatment
+ s/\s*#\s*pod\s*=.*//; # install script regardless of pod location
+ next if /a2p/; # a2p is binary, to be installed separately
chomp;
if (/(\S*)\s*#\s*link\s*=\s*(\S*)/) {
push @scripts, $1;
if $patchlevel != $Config{'PERL_VERSION'};
# Fetch some frequently-used items from %Config
-my $installbin = $Config{installbin};
-my $installscript = $Config{installscript};
-my $installprivlib = $Config{installprivlib};
-my $installarchlib = $Config{installarchlib};
-my $installsitelib = $Config{installsitelib};
-my $installsitearch = $Config{installsitearch};
-my $installman1dir = $Config{installman1dir};
+my $installbin = "$destdir$Config{installbin}";
+my $installscript = "$destdir$Config{installscript}";
+my $installprivlib = "$destdir$Config{installprivlib}";
+my $installarchlib = "$destdir$Config{installarchlib}";
+my $installsitelib = "$destdir$Config{installsitelib}";
+my $installsitearch = "$destdir$Config{installsitearch}";
+my $installman1dir = "$destdir$Config{installman1dir}";
my $man1ext = $Config{man1ext};
my $libperl = $Config{libperl};
# Shared library and dynamic loading suffixes.
# Do some quick sanity checks.
-if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
+if (!$nonono && $d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
$installbin || die "No installbin directory in config.sh\n";
-d $installbin || mkpath($installbin, $verbose, 0777);
unless $installbin =~ m#^/afs/# || $nonono;
if (!$Is_NetWare) {
+if (!$Is_VMS) {
-x 'perl' . $exe_ext || die "perl isn't executable!\n";
+}
+else {
+-x $ndbg . 'perl' . $exe_ext || die "${ndbg}perl$exe_ext isn't executable!\n";
+ if ($dbg) {
+ -x $dbg . 'perl' . $exe_ext || die "${dbg}perl$exe_ext isn't executable!\n";
+ }
+}
-x 'suidperl' . $exe_ext|| die "suidperl isn't executable!\n" if $d_dosuid;
-f 't/rantests' || $Is_W32
# First we install the version-numbered executables.
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/${perl}shr$exe_ext");
- copy("perlshr$exe_ext", "$installbin/${perl}shr$exe_ext");
- chmod(0755, "$installbin/${perl}shr$exe_ext");
+ 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");
+ safe_unlink("$installbin/$dbg${perl}shr$exe_ext");
+ 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/${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') {
# MPE lacks hard links and requires that executables with special
}
}
-# Switch in the 5.005-threads versions of he threadsafe queue and semaphore
-# modules if so needed.
-if ($Config{use5005threads}) {
- for my $m (qw(Queue Semaphore)) {
- my $t = "$installprivlib/Thread/$m.pm";
- unlink $t;
- copy("ext/Thread/$m.pmx", $t);
- chmod(0444, $t);
- }
-}
-
# Install main perl executables
# Make links to ordinary names if installbin directory isn't current directory.
}
# 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;
my($from,$to) = @_;
my($success) = 0;
- print $verbose ? " ln $from $to\n" : " $to\n" unless $silent;
+ my $xfrom = $from;
+ $xfrom =~ s/^\Q$destdir\E// if $destdir;
+ my $xto = $to;
+ $xto =~ s/^\Q$destdir\E// if $destdir;
+ print $verbose ? " ln $xfrom $xto\n" : " $xto\n" unless $silent;
eval {
CORE::link($from, $to)
? $success++
? die "AFS" # okay inside eval {}
: die "Couldn't link $from to $to: $!\n"
unless $nonono;
- $packlist->{$to} = { from => $from, type => 'link' };
+ $packlist->{$xto} = { from => $xfrom, type => 'link' };
};
if ($@) {
- warn $@;
- print $verbose ? " cp $from $to\n" : " $to\n" unless $silent;
- print " creating new version of $to\n"
+ 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;
- $packlist->{$to} = { type => 'file' };
+ 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;
}
sub copy {
my($from,$to) = @_;
- print $verbose ? " cp $from $to\n" : " $to\n" unless $silent;
- print " creating new version of $to\n" if $Is_VMS and -e $to and !$silent;
- File::Copy::copy($from, $to)
- || warn "Couldn't copy $from to $to: $!\n"
- unless $nonono;
- $packlist->{$to} = { type => 'file' };
+ my $xto = $to;
+ $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;
+ 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' };
}
sub samepath {
my $name = $_;
- # Ignore RCS and CVS directories.
- if (($name eq 'CVS' or $name eq 'RCS') and -d $name) {
+ # Ignore version control directories.
+ if ($name =~ /^(?:CVS|RCS|SCCS|\.svn)\z/ and -d $name) {
$File::Find::prune = 1;
return;
}
# ignore patch backups, RCS files, emacs backup & temp files and the
- # .exists files, .PL files, and .t files.
- return if $name =~ m{\.orig$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.t$} ||
+ # .exists files, .PL files, and test files.
+ return if $name =~ m{\.orig$|\.rej$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.plc$|\.t$|^test\.pl$} ||
$dir =~ m{/t(?:/|$)};
+ # ignore the cpan script in lib/CPAN/bin and the instmodsh and xsubpp
+ # scripts in lib/ExtUtils (they're installed later with other utils)
+ return if $name =~ /^(?:cpan|instmodsh|xsubpp)\z/;
+ # ignore the Makefiles
+ return if $name =~ /^makefile$/i;
# ignore the test extensions
return if $dir =~ m{ext/XS/(?:APItest|Typemap)/};
#This might not work because $archname might have changed.
unlink("$installarchlib/$name");
}
- $packlist->{"$installlib/$name"} = { type => 'file' };
+ my $xname = "$installlib/$name";
+ $xname =~ s/^\Q$destdir\E// if $destdir;
+ $packlist->{$xname} = { type => 'file' };
if ($force || compare($_, "$installlib/$name") || $nonono) {
unlink("$installlib/$name");
mkpath("$installlib/$dir", $verbose, 0777);
sub copy_if_diff {
my($from,$to)=@_;
return 1 if (($^O eq 'VMS') && (-d $from));
+ my $xto = $to;
+ $xto =~ s/^\Q$destdir\E// if $destdir;
my $perlpodbadsymlink;
if ($from =~ m!^pod/perl[\w-]+\.pod$! &&
-l $from &&
$perlpodbadsymlink = 1;
}
-f $from || $perlpodbadsymlink || warn "$0: $from not found";
- $packlist->{$to} = { type => 'file' };
+ $packlist->{$xto} = { type => 'file' };
if ($force || compare($from, $to) || $nonono) {
safe_unlink($to); # In case we don't have write permissions.
if ($nonono) {