Commit | Line | Data |
---|---|---|
c623bd54 LW |
1 | #!./perl |
2 | ||
3 | while (@ARGV) { | |
4 | $nonono = 1 if $ARGV[0] eq '-n'; | |
5 | $versiononly = 1 if $ARGV[0] eq '-v'; | |
6 | shift; | |
7 | } | |
8 | ||
9 | @scripts = 'h2ph'; | |
10 | @manpages = ('perl.man', 'h2ph.man'); | |
11 | ||
12 | # Read in the config file. | |
13 | ||
14 | open(CONFIG, "config.sh") || die "You haven't run Configure yet!\n"; | |
15 | while (<CONFIG>) { | |
16 | if (s/^(\w+=)/\$$1/) { | |
17 | $accum =~ s/'undef'/undef/g; | |
18 | eval $accum; | |
19 | $accum = ''; | |
20 | } | |
21 | $accum .= $_; | |
22 | } | |
23 | ||
24 | # Do some quick sanity checks. | |
25 | ||
26 | if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; } | |
27 | ||
28 | $bin || die "No bin directory in config.sh\n"; | |
29 | -d $bin || die "$bin is not a directory\n"; | |
30 | -w $bin || die "$bin is not writable by you\n"; | |
31 | ||
32 | -x 'perl' || die "perl isn't executable!\n"; | |
33 | -x 'taintperl' || die "taintperl isn't executable!\n"; | |
34 | -x 'suidperl' || die "suidperl isn't executable!\n" if $d_dosuid; | |
35 | ||
36 | -x 't/TEST' || die "You've never run 'make test'!\n"; | |
37 | ||
38 | # First we install the version-numbered executables. | |
39 | ||
40 | $ver = sprintf("%5.3f", $]); | |
41 | ||
42 | &unlink("$bin/perl$ver"); | |
43 | &cmd("cp perl $bin/perl$ver"); | |
44 | ||
45 | &unlink("$bin/tperl$ver"); | |
46 | &cmd("cp taintperl $bin/tperl$ver"); | |
47 | &chmod(0755, "$bin/tperl$ver"); # force non-suid for security | |
48 | ||
49 | &unlink("$bin/sperl$ver"); | |
50 | if ($d_dosuid) { | |
51 | &cmd("cp suidperl $bin/sperl$ver"); | |
52 | &chmod(04711, "$bin/sperl$ver"); | |
53 | } | |
54 | ||
55 | exit 0 if $versiononly; | |
56 | ||
57 | # Make links to ordinary names if bin directory isn't current directory. | |
58 | ||
59 | ($bdev,$bino) = stat($bin); | |
60 | ($ddev,$dino) = stat('.'); | |
61 | ||
62 | if ($bdev != $ddev || $bino != $dino) { | |
63 | &unlink("$bin/perl", "$bin/taintperl", "$bin/suidperl"); | |
64 | &link("$bin/perl$ver", "$bin/perl"); | |
65 | &link("$bin/tperl$ver", "$bin/taintperl"); | |
66 | &link("$bin/sperl$ver", "$bin/suidperl") if $d_dosuid; | |
67 | } | |
68 | ||
69 | # Make some enemies in the name of standardization. :-) | |
70 | ||
71 | ($udev,$uino) = stat("/usr/bin"); | |
72 | ||
73 | if (($udev != $ddev || $uino != $dino) && !$nonono) { | |
74 | unlink "/usr/bin/perl"; | |
75 | eval 'symlink("$bin/perl", "/usr/bin/perl")' || | |
76 | eval 'link("$bin/perl", "/usr/bin/perl")' || | |
77 | &cmd("cp $bin/perl /usr/bin"); | |
78 | } | |
79 | ||
80 | # Install scripts. | |
81 | ||
82 | &makedir($scriptdir); | |
83 | ||
84 | for (@scripts) { | |
85 | &chmod(0755, $_); | |
86 | &cmd("cp $_ $scriptdir"); | |
87 | } | |
88 | ||
89 | # Install library files. | |
90 | ||
91 | &makedir($privlib); | |
92 | ||
93 | ($pdev,$pino) = stat($privlib); | |
94 | ||
95 | if ($pdev != $ddev || $pino != $dino) { | |
96 | &cmd("cd lib && cp *.pl $privlib"); | |
97 | } | |
98 | ||
99 | # Install man pages. | |
100 | ||
101 | &makedir($mansrc); | |
102 | ||
103 | ($mdev,$mino) = stat($mansrc); | |
104 | if ($mdev != $ddev || $mino != $dino) { | |
105 | for (@manpages) { | |
106 | ($new = $_) =~ s/man$/$manext/; | |
107 | &cmd("cp $_ $mansrc/$new"); | |
108 | } | |
109 | } | |
110 | ||
111 | print STDERR " Installation complete\n"; | |
112 | ||
113 | exit 0; | |
114 | ||
115 | ############################################################################### | |
116 | ||
117 | sub unlink { | |
118 | local(@names) = @_; | |
119 | ||
120 | foreach $name (@names) { | |
121 | next unless -e $name; | |
122 | print STDERR " unlink $name\n"; | |
123 | unlink($name) || warn "Couldn't unlink $name: $!\n" unless $nonono; | |
124 | } | |
125 | } | |
126 | ||
127 | sub cmd { | |
128 | local($cmd) = @_; | |
129 | print STDERR " $cmd\n"; | |
130 | unless ($nonono) { | |
131 | system $cmd; | |
132 | warn "Command failed!!!\n" if $?; | |
133 | } | |
134 | } | |
135 | ||
136 | sub link { | |
137 | local($from,$to) = @_; | |
138 | ||
139 | print STDERR " ln $from $to\n"; | |
140 | link($from,$to) || warn "Couldn't link $from to $to: $!\n" unless $nonono; | |
141 | } | |
142 | ||
143 | sub chmod { | |
144 | local($mode,$name) = @_; | |
145 | ||
146 | printf STDERR " chmod %o %s\n", $mode, $name; | |
147 | chmod($mode,$name) || warn "Couldn't chmod $mode $name: $!\n" | |
148 | unless $nonono; | |
149 | } | |
150 | ||
151 | sub makedir { | |
152 | local($dir) = @_; | |
153 | unless (-d $dir) { | |
154 | local($shortdir) = $dir; | |
155 | ||
156 | $shortdir =~ s#(.*)/.*#$1#; | |
157 | &makedir($shortdir); | |
158 | ||
159 | print STDERR " mkdir $dir\n"; | |
160 | mkdir($dir, 0777) || warn "Couldn't create $dir: $!\n" unless $nonono; | |
161 | } | |
162 | } |