use strict;
my ($Is_VMS, $Is_W32, $Is_OS2, $Is_Cygwin, $Is_Darwin,
$nonono, $dostrip, $versiononly, $silent, $verbose,
- $otherperls, $archname,$Is_NetWare, $nwinstall);
+ $otherperls, $archname,$Is_NetWare, $nwinstall, $nopods);
use vars qw /$depth/;
BEGIN {
$verbose = 1 if $ARGV[0] eq '-V' || $ARGV [0] eq '-n';
$archname = 1 if $ARGV[0] eq '-A';
$nwinstall = 1 if $ARGV[0] eq '-netware';
+ $nopods = 1 if $ARGV[0] eq '-p';
if ($ARGV[0] eq '-?' or $ARGV[0] =~ /^-?-h/) {
print <<"EOT";
Usage $0: [switches]
-V Verbose mode.
-A Also install perl with the architecture's name in the perl binary's
name.
+ -p Don't install the pod files. [This will break use diagnostics;]
-netware Install correctly on a Netware server.
EOT
exit;
if ($scr_ext) { @scripts = map { "$_$scr_ext" } @scripts; }
-my @pods = (<pod/*.pod>);
+my @pods = $nopods ? () : (<pod/*.pod>);
# Specify here any .pm files that are actually architecture-dependent.
# (Those included with XS extensions under ext/ are automatically
# added later.)
# Now that the default privlib has the full perl version number included,
-# we no longer have to play the trick of sticking version-specific .pm
+# we no longer have to play the trick of sticking version-specific .pm
# files under the archlib directory.
my %archpms = (
- Config => 1,
- lib => 1,
+ Config => 1,
+ lib => 1,
+ Cwd => 1,
);
if ($^O eq 'dos') {
if ($Is_Cygwin) {
$perldll = $libperl;
- $perldll =~ s/(\..*)?$/.$dlext/;
+ my $v_e_r_s = $ver; $v_e_r_s =~ tr/./_/;
+ $perldll =~ s/(\..*)?$/$v_e_r_s.$dlext/;
+ $perldll =~ s/^lib/cyg/;
if ($Config{useshrplib} eq 'true') {
# install ld2 and perlld as well
foreach ('ld2', 'perlld') {
copy("$_", "$installbin/$_");
chmod(0755, "$installbin/$_");
};
+ {
+ open (LD2, ">$installbin/ld2");
+ print LD2 "#!/bin/sh\n#\n# ld wrapper, passes all args to perlld;\n#\n"
+ . "for trythis in $installbin/perl\ndo\n if [ -x \$trythis ]\n"
+ . " then\n \$trythis $installbin/perlld \"\$\@\"\n"
+ . " exit \$?\n fi\ndone\n# hard luck!\necho i see no perl"
+ . " executable around there\necho perl is required to build "
+ . "dynamic libraries\necho look if the path to perl in /bin/ld2"
+ . " is correct\nexit 1\n";
+ close LD2;
+ };
+ chmod(0755, "$installbin/ld2");
};
} else {
- $perldll = 'perl57.' . $dlext;
+ $perldll = 'perl58.' . $dlext;
}
if ($dlsrc ne "dl_none.xs") {
safe_unlink("$installbin/$perldll");
copy("$perldll", "$installbin/$perldll");
chmod(0755, "$installbin/$perldll");
-
+
} # if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin)
# This will be used to store the packlist
# Install library files.
my ($do_installarchlib, $do_installprivlib) = (0, 0);
-
+
mkpath($installprivlib, $verbose, 0777);
mkpath($installarchlib, $verbose, 0777);
mkpath($installsitelib, $verbose, 0777) if ($installsitelib);
}
}
+# 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.
# MPE doesn't support hard links, so use a symlink.
# We don't want another cloned copy.
symlink($Config{perlpath}, "$installbin/perl$exe_ext");
+ } elsif ($^O eq 'vos') {
+ # VOS doesn't support hard links, so use a symlink.
+ symlink("$installbin/$perl_verbase$ver$exe_ext",
+ "$installbin/$perl$exe_ext");
} else {
link("$installbin/$perl_verbase$ver$exe_ext",
"$installbin/$perl$exe_ext");
}
link("$installbin/s$perl_verbase$ver$exe_ext",
- "$installbin/suid$perl$exe_ext")
+ "$installbin/suid$perl$exe_ext")
if $d_dosuid;
}
# MPE doesn't support hard links, so use a symlink.
# We don't want another cloned copy.
symlink($Config{perlpath}, "$installbin/$archperl");
+ } elsif ($^O eq 'vos') {
+ # VOS doesn't support hard links, so use a symlink.
+ symlink("$installbin/$perl_verbase$ver$exe_ext",
+ "$installbin/$archperl");
} else {
link("$installbin/$perl_verbase$ver$exe_ext",
"$installbin/$archperl");
(-l $usrbinperl) &&
((readlink $usrbinperl) eq $expinstperl));
}
- if ((! $mainperl_is_instperl) &&
- (yn("Many scripts expect perl to be installed as $usrbinperl.\n" .
- "Do you wish to have $usrbinperl be the same as\n" .
- "$expinstperl? [y] ")))
- {
+ if (! $mainperl_is_instperl) {
unlink($usrbinperl);
( $Config{'d_link'} eq 'define' &&
eval { CORE::link $instperl, $usrbinperl } ) ||
safe_unlink("$installscript/$alias$scr_ext");
if ($^O eq 'dos' or $Is_VMS or $^O eq 'transit') {
copy("$installscript/$orig$scr_ext",
- "$installscript/$alias$scr_ext");
+ "$installscript/$alias$scr_ext");
+ } elsif ($^O eq 'vos') {
+ symlink("$installscript/$orig$scr_ext",
+ "$installscript/$alias$scr_ext");
} else {
link("$installscript/$orig$scr_ext",
"$installscript/$alias$scr_ext");
chmod(0755, "$installscript/$base");
}
- for (@tolink) {
+ for (@tolink) {
my ($from, $to) = map { "$_$ver" } @$_;
(my $frbase = $from) =~ s#.*/##;
(my $tobase = $to) =~ s#.*/##;
chmod(0755, "$installscript/$base");
}
- for (@tolink) {
+ for (@tolink) {
my ($from, $to) = @$_;
(my $frbase = $from) =~ s#.*/##;
(my $tobase = $to) =~ s#.*/##;
next unless -e $name;
chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare);
print " unlink $name\n" if $verbose;
- ( CORE::unlink($name) and ++$cnt
+ ( CORE::unlink($name) and ++$cnt
or warn "Couldn't unlink $name: $!\n" ) unless $nonono;
}
return $cnt;
for ($i = 1; $i < 50; $i++) {
last if rename($to, "$to.$i");
}
- warn("Cannot rename to `$to.$i': $!"), return 0
+ warn("Cannot rename to `$to.$i': $!"), return 0
if $i >= 50; # Give up!
}
link($from,$to) || return 0;
$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$};
+ return if $name =~ m{\.orig$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.t$} ||
+ $dir =~ m{/t(?:/|$)};
+ # ignore the test extensions
+ return if $dir =~ m{ext/XS/(?:APItest|Typemap)/};
$name = "$dir/$name" if $dir ne '';
sub copy_if_diff {
my($from,$to)=@_;
return 1 if (($^O eq 'VMS') && (-d $from));
- -f $from || warn "$0: $from not found";
+ my $perlpodbadsymlink;
+ if ($from =~ m!^pod/perl[\w-]+\.pod$! &&
+ -l $from &&
+ ! -e $from) {
+ # Some Linux implementations have problems traversing over
+ # multiple symlinks (when going over NFS?) and fail to read
+ # the symlink target. Combine this with the fact that some
+ # of the pod files (the perl$OS.pod) are symlinks (to ../README.$OS),
+ # and you end up with those pods not getting installed.
+ $perlpodbadsymlink = 1;
+ }
+ -f $from || $perlpodbadsymlink || warn "$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) {
$from = $depth . "/" . $from if $depth;
}
+ if ($perlpodbadsymlink && $from =~ m!^pod/perl(.+)\.pod$!) {
+ $from = "README.$1";
+ }
copy($from, $to);
# Restore timestamps if it's a .a library or for OS/2.
if (!$nonono && ($Is_OS2 || $to =~ /\.a$/)) {