4 $nonono = 1 if $ARGV[0] eq '-n';
5 $versiononly = 1 if $ARGV[0] eq '-v';
9 @scripts = ('h2ph', 'x2p/s2p', 'x2p/find2perl');
10 @manpages = ('perl.man', 'h2ph.man', 'x2p/a2p.man', 'x2p/s2p.man');
12 $version = sprintf("%5.3f", $]);
13 $release = substr($version,0,3);
14 $patchlevel = substr($version,3,2);
16 # Read in the config file.
18 open(CONFIG, "config.sh") || die "You haven't run Configure yet!\n";
20 if (s/^(\w+=)/\$$1/) {
21 $accum =~ s/'undef'/undef/g;
28 # Do some quick sanity checks.
30 if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
32 $installbin || die "No installbin directory in config.sh\n";
33 -d $installbin || die "$installbin is not a directory\n";
34 -w $installbin || die "$installbin is not writable by you\n"
35 unless $installbin =~ m#^/afs/#;
37 -x 'perl' || die "perl isn't executable!\n";
38 -x 'taintperl' || die "taintperl isn't executable!\n";
39 -x 'suidperl' || die "suidperl isn't executable!\n" if $d_dosuid;
41 -x 't/TEST' || warn "WARNING: You've never run 'make test'!!!",
42 " (Installing anyway.)\n";
44 # First we install the version-numbered executables.
46 $ver = sprintf("%5.3f", $]);
48 &unlink("$installbin/perl$ver");
49 &cmd("cp perl $installbin/perl$ver");
51 &unlink("$installbin/tperl$ver");
52 &cmd("cp taintperl $installbin/tperl$ver");
53 &chmod(0755, "$installbin/tperl$ver"); # force non-suid for security
55 &unlink("$installbin/sperl$ver");
57 &cmd("cp suidperl $installbin/sperl$ver");
58 &chmod(04711, "$installbin/sperl$ver");
61 exit 0 if $versiononly;
63 # Make links to ordinary names if installbin directory isn't current directory.
65 ($bdev,$bino) = stat($installbin);
66 ($ddev,$dino) = stat('.');
68 if ($bdev != $ddev || $bino != $dino) {
69 &unlink("$installbin/perl", "$installbin/taintperl", "$installbin/suidperl");
70 &link("$installbin/perl$ver", "$installbin/perl");
71 &link("$installbin/tperl$ver", "$installbin/taintperl");
72 &link("$installbin/sperl$ver", "$installbin/suidperl") if $d_dosuid;
75 ($bdev,$bino) = stat($installbin);
76 ($ddev,$dino) = stat('x2p');
78 if ($bdev != $ddev || $bino != $dino) {
79 &unlink("$installbin/a2p");
80 &cmd("cp x2p/a2p $installbin/a2p");
83 # Make some enemies in the name of standardization. :-)
85 ($udev,$uino) = stat("/usr/bin");
87 if (-w _ && ($udev != $ddev || $uino != $dino) && !$nonono) {
88 unlink "/usr/bin/perl";
89 eval 'symlink("$installbin/perl", "/usr/bin/perl")' ||
90 eval 'link("$installbin/perl", "/usr/bin/perl")' ||
91 &cmd("cp $installbin/perl /usr/bin");
96 &makedir($installscr);
99 &cmd("cp $_ $installscr");
100 s#.*/##; &chmod(0755, "$installscr/$_");
103 # Install library files.
105 &makedir($installprivlib);
107 ($pdev,$pino) = stat($installprivlib);
109 if ($pdev != $ddev || $pino != $dino) {
110 &cmd("cd lib && cp *.pl $installprivlib");
118 ($mdev,$mino) = stat($mansrc);
119 if ($mdev != $ddev || $mino != $dino) {
121 ($new = $_) =~ s/man$/$manext/;
123 print STDERR " Installing $mansrc/$new\n";
126 open(MO,">$mansrc/$new");
127 print MO ".ds RP Release $release Patchlevel $patchlevel\n";
137 print STDERR " Installation complete\n";
141 ###############################################################################
146 foreach $name (@names) {
147 next unless -e $name;
148 print STDERR " unlink $name\n";
149 unlink($name) || warn "Couldn't unlink $name: $!\n" unless $nonono;
155 print STDERR " $cmd\n";
158 warn "Command failed!!!\n" if $?;
163 local($from,$to) = @_;
165 print STDERR " ln $from $to\n";
166 link($from,$to) || warn "Couldn't link $from to $to: $!\n" unless $nonono;
170 local($mode,$name) = @_;
172 printf STDERR " chmod %o %s\n", $mode, $name;
173 chmod($mode,$name) || warn "Couldn't chmod $mode $name: $!\n"
180 local($shortdir) = $dir;
182 $shortdir =~ s#(.*)/.*#$1#;
185 print STDERR " mkdir $dir\n";
186 mkdir($dir, 0777) || warn "Couldn't create $dir: $!\n" unless $nonono;