X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=installperl;h=150b334f8cc671c1bb2404833482bae03db52c23;hb=5fd9e9a4300f95315d24c4b2a79cc95e32b1bdb7;hp=a96c89a3596a814d249510d717f14ff043c61fb5;hpb=4b66953f587b2138e003f8c94d1fd938314f4325;p=p5sagit%2Fp5-mst-13.2.git diff --git a/installperl b/installperl index a96c89a..150b334 100755 --- a/installperl +++ b/installperl @@ -2,6 +2,7 @@ BEGIN { require 5.004; + chdir '..' if !-d 'lib' and -d '..\lib'; @INC = 'lib'; $ENV{PERL5LIB} = 'lib'; } @@ -37,6 +38,12 @@ umask 022; @pods = (); %archpms = (Config => 1, FileHandle => 1, overload => 1); + +if ($^O eq 'dos') { + push(@scripts,'djgpp/fixpmain'); + $archpms{config} = $archpms{filehand} = 1; +} + find(sub { if ("$File::Find::dir/$_" =~ m{^ext/[^/]+/(.*)\.pm$}) { (my $pm = $1) =~ s{^lib/}{}; @@ -81,14 +88,31 @@ if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; } -x 'perl' . $exe_ext || die "perl isn't executable!\n"; -x 'suidperl' . $exe_ext|| die "suidperl isn't executable!\n" if $d_dosuid; --x 't/TEST' || warn "WARNING: You've never run 'make test'!!!", - " (Installing anyway.)\n"; +-x 't/TEST' || $^O eq 'MSWin32' + || warn "WARNING: You've never run 'make test'!!!", + " (Installing anyway.)\n"; + +if ($^O eq 'MSWin32') { + +-f 'perl.' . $dlext || die "No perl DLL built\n"; + +# Install the DLL + +safe_unlink("$installbin/perl.$dlext"); +copy("perl.$dlext", "$installbin/perl.$dlext"); +chmod(0755, "$installbin/perl.$dlext"); +} # First we install the version-numbered executables. -safe_unlink("$installbin/perl$ver$exe_ext"); -copy("perl$exe_ext", "$installbin/perl$ver$exe_ext"); -chmod(0755, "$installbin/perl$ver$exe_ext"); +if ($^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"); +} else { + safe_unlink("$installbin/perl.exe"); + copy("perl.exe", "$installbin/perl.exe"); +} safe_unlink("$installbin/sperl$ver$exe_ext"); if ($d_dosuid) { @@ -128,9 +152,9 @@ push(@corefiles,'perl.exp') if $^O eq 'aix'; push(@corefiles,'sperl.o') if -f 'sperl.o'; foreach $file (@corefiles) { # HP-UX (at least) needs to maintain execute permissions - # on dynamically-loaded libraries. + # on dynamically-loadable libraries. So we do it for all. copy_if_diff($file,"$installarchlib/CORE/$file") - and chmod($file =~ /^\.(so|$dlext)$/ ? 0555 : 0444, + and chmod($file =~ /\.(so|\Q$dlext\E)$/ ? 0555 : 0444, "$installarchlib/CORE/$file"); } @@ -138,7 +162,7 @@ foreach $file (@corefiles) { $mainperl_is_instperl = 0; -if (!$versiononly && !$nonono && -t STDIN && -t STDERR +if (!$versiononly && !$nonono && $^O ne 'MSWin32' && -t STDIN && -t STDERR && -w $mainperldir && ! samepath($mainperldir, $installbin)) { local($usrbinperl) = "$mainperldir/perl$exe_ext"; local($instperl) = "$installbin/perl$exe_ext"; @@ -171,7 +195,7 @@ if (!$versiononly && !$nonono && -t STDIN && -t STDERR # Make links to ordinary names if installbin directory isn't current directory. -if (! $versiononly && ! samepath($installbin, '.')) { +if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos')) { 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") @@ -210,7 +234,11 @@ if (! $versiononly) { if (! $versiononly) { safe_unlink("$installscript/pstruct"); - link("$installscript/c2ph","$installscript/pstruct"); + if ($^O eq 'dos') { + copy("$installscript/c2ph","$installscript/pstruct"); + } else { + link("$installscript/c2ph","$installscript/pstruct"); + } } # Install pod pages. Where? I guess in $installprivlib/pod. @@ -244,7 +272,7 @@ if (! $versiononly || !($installprivlib =~ m/\Q$]/)) { if (compare($from, $to) || $nonono) { mkpath("${installarchlib}/pod", 1, 0777); unlink($to); - link($from, $to); + link($from, $to) if ($^O ne 'dos'); } } @@ -256,7 +284,7 @@ if (! $versiononly || !($installprivlib =~ m/\Q$]/)) { if (!$versiononly) { - $dirsep = ($^O eq 'os2') ? ';' : ':' ; + $dirsep = ($^O eq 'os2' || $^O eq 'MSWin32') ? ';' : ':' ; ($path = $ENV{"PATH"}) =~ s:\\:/:g ; @path = split(/$dirsep/, $path); @otherperls = (); @@ -302,7 +330,7 @@ sub unlink { foreach $name (@names) { next unless -e $name; - chmod 0777, $name if $^O eq 'os2'; + chmod 0777, $name if ($^O eq 'os2' || $^O eq 'MSWin32'); print STDERR " unlink $name\n"; ( CORE::unlink($name) and ++$cnt or warn "Couldn't unlink $name: $!\n" ) unless $nonono; @@ -315,7 +343,7 @@ sub safe_unlink { local @names = @_; foreach $name (@names) { next unless -e $name; - chmod 0777, $name if $^O eq 'os2'; + chmod 0777, $name if ($^O eq 'os2' || $^O eq 'MSWin32'); print STDERR " unlink $name\n"; next if CORE::unlink($name); warn "Couldn't unlink $name: $!\n"; @@ -366,6 +394,7 @@ sub link { sub chmod { local($mode,$name) = @_; + return if ($^O eq 'dos'); printf STDERR " chmod %o %s\n", $mode, $name; CORE::chmod($mode,$name) || warn sprintf("Couldn't chmod %o %s: $!\n", $mode, $name) @@ -383,9 +412,11 @@ sub copy { sub samepath { local($p1, $p2) = @_; - local($dev1, $ino1, $dev2, $ino2); + + return (lc($p1) eq lc($p2)) if ($^O eq 'MSWin32'); if ($p1 ne $p2) { + local($dev1, $ino1, $dev2, $ino2); ($dev1, $ino1) = stat($p1); ($dev2, $ino2) = stat($p2); ($dev1 == $dev2 && $ino1 == $ino2); @@ -414,7 +445,9 @@ sub installlib { my $installlib = $installprivlib; if ($dir =~ /^auto/ || - ($name =~ /^(.*)\.(?:pm|pod)$/ && $archpms{$1})) { + ($name =~ /^(.*)\.(?:pm|pod)$/ && $archpms{$1}) || + ($name =~ /^(.*)\.(?:h|lib)$/i && $^O eq 'MSWin32') + ) { $installlib = $installarchlib; return unless $do_installarchlib; } else {