X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=installperl;h=9e06145df72ee31171bfc2d5d5c4934ae4124ef3;hb=02a834a9ae508dc3fab0b5a0375804172985b012;hp=fb16bab0be2a031ece164eb20bfdcafbc4a92860;hpb=835f8a63f39ee0b6fcc61424cf4e964d4562ffbb;p=p5sagit%2Fp5-mst-13.2.git diff --git a/installperl b/installperl index fb16bab..9e06145 100755 --- a/installperl +++ b/installperl @@ -10,7 +10,7 @@ BEGIN { 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 { @@ -72,6 +72,7 @@ while (@ARGV) { $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] @@ -86,6 +87,7 @@ 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; @@ -111,17 +113,18 @@ close SCRIPTS; if ($scr_ext) { @scripts = map { "$_$scr_ext" } @scripts; } -my @pods = (); +my @pods = $nopods ? () : (); # 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') { @@ -231,7 +234,9 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { 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') { @@ -239,9 +244,21 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { 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") { @@ -252,7 +269,7 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { 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 @@ -314,7 +331,7 @@ if ($d_dosuid) { # Install library files. my ($do_installarchlib, $do_installprivlib) = (0, 0); - + mkpath($installprivlib, $verbose, 0777); mkpath($installarchlib, $verbose, 0777); mkpath($installsitelib, $verbose, 0777) if ($installsitelib); @@ -369,6 +386,17 @@ foreach my $file (@corefiles) { } } +# 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. @@ -378,12 +406,16 @@ if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VM # 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; } @@ -396,6 +428,10 @@ if ($archname && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS) { # 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"); @@ -462,7 +498,10 @@ sub script_alias { 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"); @@ -479,7 +518,7 @@ if ($versiononly) { chmod(0755, "$installscript/$base"); } - for (@tolink) { + for (@tolink) { my ($from, $to) = map { "$_$ver" } @$_; (my $frbase = $from) =~ s#.*/##; (my $tobase = $to) =~ s#.*/##; @@ -492,7 +531,7 @@ if ($versiononly) { chmod(0755, "$installscript/$base"); } - for (@tolink) { + for (@tolink) { my ($from, $to) = @$_; (my $frbase = $from) =~ s#.*/##; (my $tobase = $to) =~ s#.*/##; @@ -599,7 +638,7 @@ sub unlink { 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; @@ -629,7 +668,7 @@ sub safe_rename { 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; @@ -713,10 +752,13 @@ sub installlib { $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 ''; @@ -785,13 +827,27 @@ sub installlib { 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$/)) {