source: trunk/essentials/dev-lang/perl/utils/perlivp.PL@ 3280

Last change on this file since 3280 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 13.5 KB
Line 
1#!/usr/local/bin/perl
2
3use Config;
4use File::Basename;
5use Cwd;
6
7# List explicitly here the variables you want Configure to
8# generate. Metaconfig only looks for shell variables, so you
9# have to mention them as if they were shell variables, not
10# %Config entries:
11# $startperl
12# $perlpath
13# $eunicefix
14
15# This forces PL files to create target in same directory as PL file.
16# This is so that make depend always knows where to find PL derivatives.
17my $origdir = cwd;
18chdir dirname($0);
19my $file = basename($0, '.PL');
20$file .= '.com' if $^O eq 'VMS';
21
22# Create output file.
23open OUT,">$file" or die "Can't create $file: $!";
24
25print "Extracting $file (with variable substitutions)\n";
26
27# In this section, perl variables will be expanded during extraction.
28# You can use $Config{...} to use Configure variables.
29
30print OUT <<"!GROK!THIS!";
31$Config{'startperl'}
32 eval 'exec $Config{'perlpath'} -S \$0 \${1+"\$@"}'
33 if \$running_under_some_shell;
34!GROK!THIS!
35
36# In the following, perl variables are not expanded during extraction.
37
38print OUT <<'!NO!SUBS!';
39
40# perlivp V 0.02
41
42
43sub usage {
44 warn "@_\n" if @_;
45 print << " EOUSAGE";
46Usage:
47
48 $0 [-a] [-p] [-v] | [-h]
49
50 -a Run all tests (default is to skip .ph tests)
51 -p Print a preface before each test telling what it will test.
52 -v Verbose mode in which extra information about test results
53 is printed. Test failures always print out some extra information
54 regardless of whether or not this switch is set.
55 -h Prints this help message.
56 EOUSAGE
57 exit;
58}
59
60use vars qw(%opt); # allow testing with older versions (do not use our)
61
62@opt{ qw/? H h P p V v/ } = qw(0 0 0 0 0 0 0);
63
64while ($ARGV[0] =~ /^-/) {
65 $ARGV[0] =~ s/^-//;
66 for my $flag (split(//,$ARGV[0])) {
67 usage() if '?' =~ /\Q$flag/;
68 usage() if 'h' =~ /\Q$flag/;
69 usage() if 'H' =~ /\Q$flag/;
70 usage("unknown flag: `$flag'") unless 'HhPpVva' =~ /\Q$flag/;
71 warn "$0: `$flag' flag already set\n" if $opt{$flag}++;
72 }
73 shift;
74}
75
76$opt{p}++ if $opt{P};
77$opt{v}++ if $opt{V};
78
79my $pass__total = 0;
80my $error_total = 0;
81my $tests_total = 0;
82
83!NO!SUBS!
84
85# We cannot merely check the variable `$^X' in general since on many
86# Unixes it is the basename rather than the full path to the perl binary.
87my $perlpath = '';
88if (defined($Config{'perlpath'})) { $perlpath = $Config{'perlpath'}; }
89
90# The useithreads Config variable plays a role in whether or not
91# threads and threads/shared work when C<use>d. They apparently always
92# get installed on systems that can run Configure.
93my $useithreads = '';
94if (defined($Config{'useithreads'})) { $useithreads = $Config{'useithreads'}; }
95
96print OUT <<"!GROK!THIS!";
97my \$perlpath = '$perlpath';
98my \$useithreads = '$useithreads';
99!GROK!THIS!
100
101print OUT <<'!NO!SUBS!';
102
103print "## Checking Perl binary via variable `\$perlpath' = $perlpath.\n" if $opt{'p'};
104
105if (-x $perlpath) {
106 print "## Perl binary `$perlpath' appears executable.\n" if $opt{'v'};
107 print "ok 1\n";
108 $pass__total++;
109}
110else {
111 print "# Perl binary `$perlpath' does not appear executable.\n";
112 print "not ok 1\n";
113 $error_total++;
114}
115$tests_total++;
116
117
118print "## Checking Perl version via variable `\$]'.\n" if $opt{'p'};
119
120!NO!SUBS!
121
122print OUT <<"!GROK!THIS!";
123my \$ivp_VERSION = $];
124
125!GROK!THIS!
126print OUT <<'!NO!SUBS!';
127if ($ivp_VERSION eq $]) {
128 print "## Perl version `$]' appears installed as expected.\n" if $opt{'v'};
129 print "ok 2\n";
130 $pass__total++;
131}
132else {
133 print "# Perl version `$]' installed, expected $ivp_VERSION.\n";
134 print "not ok 2\n";
135 $error_total++;
136}
137$tests_total++;
138
139
140print "## Checking roots of the Perl library directory tree via variable `\@INC'.\n" if $opt{'p'};
141
142my $INC_total = 0;
143my $INC_there = 0;
144foreach (@INC) {
145 next if $_ eq '.'; # skip -d test here
146 if ($^O eq 'MacOS') {
147 next if $_ eq ':'; # skip -d test here
148 next if $_ eq 'Dev:Pseudo:'; # why is this in @INC?
149 }
150 if (-d $_) {
151 print "## Perl \@INC directory `$_' exists.\n" if $opt{'v'};
152 $INC_there++;
153 }
154 else {
155 print "# Perl \@INC directory `$_' does not appear to exist.\n";
156 }
157 $INC_total++;
158}
159if ($INC_total == $INC_there) {
160 print "ok 3\n";
161 $pass__total++;
162}
163else {
164 print "not ok 3\n";
165 $error_total++;
166}
167$tests_total++;
168
169
170print "## Checking installations of modules necessary for ivp.\n" if $opt{'p'};
171
172my $needed_total = 0;
173my $needed_there = 0;
174foreach (qw(Config.pm ExtUtils/Installed.pm)) {
175 $@ = undef;
176 $needed_total++;
177 eval "require \"$_\";";
178 if (!$@) {
179 print "## Module `$_' appears to be installed.\n" if $opt{'v'};
180 $needed_there++;
181 }
182 else {
183 print "# Needed module `$_' does not appear to be properly installed.\n";
184 }
185 $@ = undef;
186}
187if ($needed_total == $needed_there) {
188 print "ok 4\n";
189 $pass__total++;
190}
191else {
192 print "not ok 4\n";
193 $error_total++;
194}
195$tests_total++;
196
197
198print "## Checking installations of extensions built with perl.\n" if $opt{'p'};
199
200use Config;
201
202my $extensions_total = 0;
203my $extensions_there = 0;
204if (defined($Config{'extensions'})) {
205 my @extensions = split(/\s+/,$Config{'extensions'});
206 foreach (@extensions) {
207 next if ($_ eq '');
208 if ( $useithreads !~ /define/i ) {
209 next if ($_ eq 'threads');
210 next if ($_ eq 'threads/shared');
211 }
212 next if ($_ eq 'Devel/DProf');
213 # VMS$ perl -e "eval ""require \""Devel/DProf.pm\"";"" print $@"
214 # \NT> perl -e "eval \"require 'Devel/DProf.pm'\"; print $@"
215 # DProf: run perl with -d to use DProf.
216 # Compilation failed in require at (eval 1) line 1.
217 eval " require \"$_.pm\"; ";
218 if (!$@) {
219 print "## Module `$_' appears to be installed.\n" if $opt{'v'};
220 $extensions_there++;
221 }
222 else {
223 print "# Required module `$_' does not appear to be properly installed.\n";
224 $@ = undef;
225 }
226 $extensions_total++;
227 }
228
229 # A silly name for a module (that hopefully won't ever exist).
230 # Note that this test serves more as a check of the validity of the
231 # actuall required module tests above.
232 my $unnecessary = 'bLuRfle';
233
234 if (!grep(/$unnecessary/, @extensions)) {
235 $@ = undef;
236 eval " require \"$unnecessary.pm\"; ";
237 if ($@) {
238 print "## Unnecessary module `$unnecessary' does not appear to be installed.\n" if $opt{'v'};
239 }
240 else {
241 print "# Unnecessary module `$unnecessary' appears to be installed.\n";
242 $extensions_there++;
243 }
244 }
245 $@ = undef;
246}
247if ($extensions_total == $extensions_there) {
248 print "ok 5\n";
249 $pass__total++;
250}
251else {
252 print "not ok 5\n";
253 $error_total++;
254}
255$tests_total++;
256
257
258print "## Checking installations of later additional extensions.\n" if $opt{'p'};
259
260use ExtUtils::Installed;
261
262my $installed_total = 0;
263my $installed_there = 0;
264my $version_check = 0;
265my $installed = ExtUtils::Installed -> new();
266my @modules = $installed -> modules();
267my @missing = ();