160131Selan#!./perl 260131Selan 360131Selan$mainperldir = "/usr/bin"; 460131Selan 560131Selanwhile (@ARGV) { 660131Selan $nonono = 1 if $ARGV[0] eq '-n'; 760131Selan $versiononly = 1 if $ARGV[0] eq '-v'; 860131Selan shift; 960131Selan} 1060131Selan 1160131Selanumask 022; 1260131Selan 1360131Selan@scripts = ('cppstdin', 'h2ph', 'c2ph', 'pstruct', 'x2p/s2p', 'x2p/find2perl'); 1460131Selan@manpages = ('perl.man', 'h2ph.man', 'x2p/a2p.man', 'x2p/s2p.man'); 1560131Selan 1660131Selan# Read in the config file. 1760131Selan 1860131Selanopen(CONFIG, "config.sh") || die "You haven't run Configure yet!\n"; 1960131Selanwhile (<CONFIG>) { 2060131Selan if (s/^(\w+=)/\$$1/) { 2160131Selan $accum =~ s/'undef'/undef/g; 2260131Selan eval $accum; 2360131Selan $accum = ''; 2460131Selan } 2560131Selan $accum .= $_; 2660131Selan} 2760131Selanclose CONFIG; 2860131Selan 2960131Selanopen(PERL_C, "perl.c"); 3060131Selanwhile (<PERL_C>) { 3160131Selan last if /Revision:/; 3260131Selan} 3360131Selanclose PERL_C; 3460131Selans/.*Revision: //; 3560131Selan$major = $_ + 0; 3660131Selan 3760131Selan$ver = sprintf("%5.3f", $major + $PATCHLEVEL / 1000); 3860131Selan$release = substr($ver,0,3); 3960131Selan$patchlevel = substr($ver,3,2); 4060131Selan 4160131Selan# Do some quick sanity checks. 4260131Selan 4360131Selanif ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; } 4460131Selan 4560131Selan $installbin || die "No installbin directory in config.sh\n"; 4660131Selan-d $installbin || die "$installbin is not a directory\n"; 4760131Selan-w $installbin || die "$installbin is not writable by you\n" 4860131Selan unless $installbin =~ m#^/afs/#; 4960131Selan 5060131Selan-x 'perl' || die "perl isn't executable!\n"; 5160131Selan-x 'taintperl' || die "taintperl isn't executable!\n"; 5260131Selan-x 'suidperl' || die "suidperl isn't executable!\n" if $d_dosuid; 5360131Selan 5460131Selan-x 't/TEST' || warn "WARNING: You've never run 'make test'!!!", 5560131Selan " (Installing anyway.)\n"; 5660131Selan 5760131Selan# First we install the version-numbered executables. 5860131Selan 5960131Selan&unlink("$installbin/perl$ver"); 6060131Selan&cmd("cp perl $installbin/perl$ver"); 6160131Selan 6260131Selan&unlink("$installbin/tperl$ver"); 6360131Selan&cmd("cp taintperl $installbin/tperl$ver"); 6460131Selan&chmod(0755, "$installbin/tperl$ver"); # force non-suid for security 6560131Selan 6660131Selan&unlink("$installbin/sperl$ver"); 6760131Selanif ($d_dosuid) { 6860131Selan &cmd("cp suidperl $installbin/sperl$ver"); 6960131Selan &chmod(04711, "$installbin/sperl$ver"); 7060131Selan} 7160131Selan 7260131Selanexit 0 if $versiononly; 7360131Selan 7460131Selan# Make links to ordinary names if installbin directory isn't current directory. 7560131Selan 7660131Selan($bdev,$bino) = stat($installbin); 7760131Selan($ddev,$dino) = stat('.'); 7860131Selan 7960131Selanif ($bdev != $ddev || $bino != $dino) { 8060131Selan &unlink("$installbin/perl", "$installbin/taintperl", "$installbin/suidperl"); 8160131Selan &link("$installbin/perl$ver", "$installbin/perl"); 8260131Selan &link("$installbin/tperl$ver", "$installbin/taintperl"); 8360131Selan &link("$installbin/sperl$ver", "$installbin/suidperl") if $d_dosuid; 8460131Selan} 8560131Selan 8660131Selan($bdev,$bino) = stat($installbin); 8760131Selan($ddev,$dino) = stat('x2p'); 8860131Selan 8960131Selanif ($bdev != $ddev || $bino != $dino) { 9060131Selan &unlink("$installbin/a2p"); 9160131Selan &cmd("cp x2p/a2p $installbin/a2p"); 9260131Selan &chmod(0755, "$installbin/a2p"); 9360131Selan} 9460131Selan 9560131Selan# Make some enemies in the name of standardization. :-) 9660131Selan 9760131Selan($udev,$uino) = stat($mainperldir); 9860131Selan 9960131Selanif (-w _ && ($udev != $bdev || $uino != $bino) && !$nonono) { 10060131Selan &unlink("$mainperldir/perl"); 10160131Selan eval 'link("$installbin/perl", "$mainperldir/perl")' || 10260131Selan eval 'symlink("$installbin/perl", "$mainperldir/perl")' || 10360131Selan &cmd("cp $installbin/perl $mainperldir"); 10460131Selan} 10560131Selan 10660131Selan# Install scripts. 10760131Selan 10860131Selan&makedir($installscr); 10960131Selan 11060131Selanfor (@scripts) { 11160131Selan &cmd("cp $_ $installscr"); 11260131Selan s#.*/##; &chmod(0755, "$installscr/$_"); 11360131Selan} 11460131Selan 115*62692Selan# BSD modification -- install them in makefile. 11660131Selan 117*62692Selan# Install man pages. 118*62692Selan# 119*62692Selan#if ($mansrc ne '') { 120*62692Selan# &makedir($mansrc); 121*62692Selan# 122*62692Selan# ($mdev,$mino) = stat($mansrc); 123*62692Selan# if ($mdev != $ddev || $mino != $dino) { 124*62692Selan# for (@manpages) { 125*62692Selan# ($new = $_) =~ s/man$/$manext/; 126*62692Selan# $new =~ s#.*/##; 127*62692Selan# print STDERR " Installing $mansrc/$new\n"; 128*62692Selan# next if $nonono; 129*62692Selan# open(MI,$_) || warn "Can't open $_: $!\n"; 130*62692Selan# open(MO,">$mansrc/$new") || warn "Can't install $mansrc/$new: $!\n"; 131*62692Selan# print MO ".ds RP Release $release Patchlevel $patchlevel\n"; 132*62692Selan# while (<MI>) { 133*62692Selan# print MO; 134*62692Selan# } 135*62692Selan# close MI; 136*62692Selan# close MO; 137*62692Selan# } 138*62692Selan# } 139*62692Selan#} 14060131Selan 14160131Selan# Install library files. 14260131Selan 14360131Selan&makedir($installprivlib); 14460131Selanif (chdir "lib") { 14560131Selan 14660131Selan ($pdev,$pino) = stat($installprivlib); 14760131Selan ($ldev,$lino) = stat('.'); 14860131Selan 14960131Selan if ($pdev != $ldev || $pino != $lino) { 15060131Selan foreach $file (<*.pl>) { 15160131Selan system "cmp", "-s", $file, "$privlib/$file"; 15260131Selan if ($?) { 15360131Selan &unlink("$installprivlib/$file"); 15460131Selan &cmd("cp $file $installprivlib"); 15560131Selan &chmod(0644, "$installprivlib/$file"); 15660131Selan } 15760131Selan } 15860131Selan } 15960131Selan chdir ".." || die "Can't cd back to source directory: $!\n"; 16060131Selan} 16160131Selanelse { 16260131Selan warn "Can't cd to lib to install lib files: $!\n"; 16360131Selan} 16460131Selan 16560131Selan&chmod(0755, "usub/mus"); 16660131Selan 16760131Selanprint STDERR " Installation complete\n"; 16860131Selan 16960131Selanexit 0; 17060131Selan 17160131Selan############################################################################### 17260131Selan 17360131Selansub unlink { 17460131Selan local(@names) = @_; 17560131Selan 17660131Selan foreach $name (@names) { 17760131Selan next unless -e $name; 17860131Selan print STDERR " unlink $name\n"; 17960131Selan unlink($name) || warn "Couldn't unlink $name: $!\n" unless $nonono; 18060131Selan } 18160131Selan} 18260131Selan 18360131Selansub cmd { 18460131Selan local($cmd) = @_; 18560131Selan print STDERR " $cmd\n"; 18660131Selan unless ($nonono) { 18760131Selan system $cmd; 18860131Selan warn "Command failed!!!\n" if $?; 18960131Selan } 19060131Selan} 19160131Selan 19260131Selansub link { 19360131Selan local($from,$to) = @_; 19460131Selan 19560131Selan print STDERR " ln $from $to\n"; 19660131Selan link($from,$to) || warn "Couldn't link $from to $to: $!\n" unless $nonono; 19760131Selan} 19860131Selan 19960131Selansub chmod { 20060131Selan local($mode,$name) = @_; 20160131Selan 20260131Selan printf STDERR " chmod %o %s\n", $mode, $name; 20360131Selan chmod($mode,$name) || warn sprintf("Couldn't chmod %o %s: $!\n",$mode,$name) 20460131Selan unless $nonono; 20560131Selan} 20660131Selan 20760131Selansub makedir { 20860131Selan local($dir) = @_; 20960131Selan unless (-d $dir) { 21060131Selan local($shortdir) = $dir; 21160131Selan 21260131Selan $shortdir =~ s#(.*)/.*#$1#; 21360131Selan &makedir($shortdir); 21460131Selan 21560131Selan print STDERR " mkdir $dir\n"; 21660131Selan mkdir($dir, 0777) || warn "Couldn't create $dir: $!\n" unless $nonono; 21760131Selan } 21860131Selan} 219