Commit | Line | Data |
7200bc44 |
1 | #!./perl |
2 | |
3 | BEGIN { |
6469810f |
4 | if (-d '../pod' && -d '../t') { |
5 | require File::Spec; |
6 | my ($v,$d,$f) = File::Spec->splitpath($^X); |
7 | $^X = File::Spec->catfile(File::Spec->curdir, $f) |
8 | if $^X eq File::Spec->catfile(File::Spec->updir, $f); |
9 | chdir '..'; |
10 | } |
7200bc44 |
11 | @INC = 'lib'; |
12 | } |
13 | |
14 | use strict; |
15 | use warnings; |
cdd2acaa |
16 | use Config; |
7200bc44 |
17 | |
cdd2acaa |
18 | my %Core_Modules; |
4d0ed6f7 |
19 | my %Test; |
cdd2acaa |
20 | |
656b9f42 |
21 | unless (open(MANIFEST, "MANIFEST")) { |
22 | die "$0: failed to open 'MANIFEST': $!\n"; |
23 | } |
24 | |
25 | sub add_by_name { |
26 | $Core_Modules{$_[0]}++; |
27 | } |
28 | |
29 | while (<MANIFEST>) { |
4d0ed6f7 |
30 | if (m!^(lib)/(\S+?)\.pm\s!) { |
31 | # Collecting modules names from under ext/ would be |
32 | # rather painful since the mapping from filenames |
33 | # to module names is not 100%. |
34 | my ($dir, $module) = ($1, $2); |
35 | $module =~ s!/!::!g; |
36 | add_by_name($module); |
37 | } elsif (m!^(lib|ext)/(\S+?)(?:\.t|/test.pl)\s!) { |
38 | my ($dir, $test) = ($1, $2); |
39 | $test =~ s!(\w+)/\1$!$1! if $dir eq 'ext'; |
40 | $test =~ s!/t/[^/]+$!!; |
41 | $test =~ s!/!::!g; |
42 | $Test{$test}++; |
43 | } |
656b9f42 |
44 | } |
45 | |
46 | close(MANIFEST); |
cdd2acaa |
47 | |
48 | # Delete stuff that can't be tested here. |
49 | |
656b9f42 |
50 | sub delete_by_name { |
51 | delete $Core_Modules{$_[0]}; |
52 | } |
53 | |
54 | sub has_extension { |
55 | $Config{extensions} =~ /\b$_[0]\b/i; |
56 | } |
57 | |
58 | sub delete_unless_has_extension { |
59 | delete $Core_Modules{$_[0]} unless has_extension($_[0]); |
cdd2acaa |
60 | } |
61 | |
62 | foreach my $known_extension (split(' ', $Config{known_extensions})) { |
656b9f42 |
63 | delete_unless_has_extension($known_extension); |
cdd2acaa |
64 | } |
65 | |
66 | sub delete_by_prefix { |
656b9f42 |
67 | for my $match (grep { /^$_[0]/ } keys %Core_Modules) { |
68 | delete_by_name($match); |
69 | } |
cdd2acaa |
70 | } |
71 | |
656b9f42 |
72 | delete_by_name('CGI::Fast'); # won't load without FCGI |
cdd2acaa |
73 | |
cdd2acaa |
74 | delete_by_prefix('ExtUtils::MM_'); # ExtUtils::MakeMaker's domain |
75 | |
76 | delete_by_prefix('File::Spec::'); # File::Spec's domain |
656b9f42 |
77 | add_by_name('File::Spec::Functions'); # put this back |
cdd2acaa |
78 | |
04070b92 |
79 | delete_by_prefix('Attribute::Handlers');# we test this, and we have demos |
80 | |
656b9f42 |
81 | sub using_feature { |
82 | my $use = "use$_[0]"; |
83 | exists $Config{$use} && |
84 | defined $Config{$use} && |
85 | $Config{$use} eq 'define'; |
86 | } |
87 | |
88 | unless (using_feature('threads') && has_extension('Thread')) { |
89 | delete_by_name('Thread'); |
290a1446 |
90 | delete_by_prefix('Thread::'); |
eba8ff18 |
91 | } |
cdd2acaa |
92 | |
a0cb3900 |
93 | unless (has_extension('NDBM_File')) { |
94 | delete_by_name('Memoize::NDBM_File'); |
95 | } |
96 | |
3de3f243 |
97 | if (ord('A') == 193) { |
c8b7969b |
98 | delete_by_prefix('Net::') unless eval { require Convert::EBCDIC }; |
3de3f243 |
99 | } |
100 | |
04070b92 |
101 | # Delete all modules which have their own tests. |
102 | # This makes this test a lot faster. |
4d0ed6f7 |
103 | foreach my $mod (sort keys %Test) { |
104 | delete_by_name($mod); |
105 | } |
6b40b044 |
106 | foreach my $mod (<DATA>) { |
107 | chomp $mod; |
0d0c1411 |
108 | print "### $mod has a test but is in DATA of $0\n" if exists $Test{$mod}; |
6b40b044 |
109 | delete_by_name($mod); |
110 | } |
111 | |
cdd2acaa |
112 | # Okay, this is the list. |
113 | |
114 | my @Core_Modules = sort keys %Core_Modules; |
7200bc44 |
115 | |
116 | print "1..".@Core_Modules."\n"; |
117 | |
118 | my $test_num = 1; |
cdd2acaa |
119 | |
7200bc44 |
120 | foreach my $module (@Core_Modules) { |
17bcccd5 |
121 | print "$module compile failed\nnot " unless compile_module($module); |
7200bc44 |
122 | print "ok $test_num\n"; |
123 | $test_num++; |
124 | } |
125 | |
656b9f42 |
126 | # We do this as a separate process else we'll blow the hell |
127 | # out of our namespace. |
7200bc44 |
128 | sub compile_module { |
656b9f42 |
129 | my ($module) = $_[0]; |
7200bc44 |
130 | |
1189d1e4 |
131 | my $out = scalar `$^X "-Ilib" t/lib/compmod.pl $module`; |
132 | print "# $out"; |
133 | return $out =~ /^ok/; |
7200bc44 |
134 | } |
6b40b044 |
135 | |
20e80008 |
136 | # Add here modules that have their own test scripts and therefore |
137 | # need not be test-compiled by 1_compile.t. |
6b40b044 |
138 | __DATA__ |
6b40b044 |
139 | B::ShowLex |
79319589 |
140 | CGI::Apache |
141 | CGI::Carp |
142 | CGI::Cookie |
143 | CGI::Form |
6b40b044 |
144 | CGI::Pretty |
0d0c1411 |
145 | CGI::Push |
79319589 |
146 | CGI::Switch |
6b40b044 |
147 | CGI::Util |
20e80008 |
148 | Carp::Heavy |
6ae1853a |
149 | CPAN::Nox |
6b40b044 |
150 | Exporter::Heavy |
20e80008 |
151 | ExtUtils::Constant |
152 | ExtUtils::MakeMaker |
6b40b044 |
153 | Filter::Util::Call |
6b40b044 |
154 | GDBM_File |
0e6c72d5 |
155 | I18N::LangTags::List |
6b40b044 |
156 | IO::Dir |
157 | IO::File |
158 | IO::Handle |
159 | IO::Pipe |
160 | IO::Poll |
161 | IO::Seekable |
162 | IO::Select |
163 | IO::Socket |
164 | IO::Socket::INET |
165 | IO::Socket::UNIX |
6b40b044 |
166 | Locale::Constants |
167 | Locale::Country |
168 | Locale::Currency |
169 | Locale::Language |
6b40b044 |
170 | MIME::QuotedPrint |
171 | Math::BigFloat |
0e6c72d5 |
172 | Math::BigInt::Calc |
0e6c72d5 |
173 | Memoize::AnyDBM_File |
174 | Memoize::Expire |
175 | Memoize::ExpireFile |
176 | Memoize::ExpireTest |
177 | Memoize::NDBM_File |
178 | Memoize::SDBM_File |
179 | Memoize::Storable |
6b40b044 |
180 | NDBM_File |
6b40b044 |
181 | ODBM_File |
6b40b044 |
182 | Pod::Checker |
183 | Pod::Find |
f56fdd80 |
184 | Pod::Html |
fed96050 |
185 | Pod::LaTeX |
f56fdd80 |
186 | Pod::Man |
187 | Pod::ParseLink |
fed96050 |
188 | Pod::ParseUtils |
6b40b044 |
189 | Pod::Text |
f56fdd80 |
190 | Pod::Text::Overstrike |
191 | Pod::Text::Termcap |
6b40b044 |
192 | Pod::Usage |
193 | SDBM_File |
194 | Safe |
195 | Scalar::Util |
6b40b044 |
196 | Sys::Syslog |
0e6c72d5 |
197 | Test::More |
6b40b044 |
198 | Test::ParseWords |
6b40b044 |
199 | Text::Tabs |
200 | Text::Wrap |
201 | Thread |
202 | Tie::Array |
203 | Tie::Handle |
204 | Tie::Hash |
2857d2f7 |
205 | Time::tm |
6b40b044 |
206 | UNIVERSAL |
601f2d16 |
207 | attributes |
6b40b044 |
208 | base |
6b40b044 |
209 | ops |
d99274ce |
210 | warnings::register |