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