Automate 1_compile.t.
[p5sagit/p5-mst-13.2.git] / t / lib / 1_compile.t
1 #!./perl
2
3 BEGIN {
4     chdir '..' if -d '../pod' && -d '../t';
5     @INC = 'lib';
6 }
7
8 use strict;
9 use warnings;
10 use Config;
11 use File::Find;
12
13 my %Core_Modules;
14
15 find(sub {
16         if ($File::Find::name =~ m!^lib\W+(.+)\.pm$!i) {
17             my $module = $1;
18             $module =~ s/[^\w-]/::/g;
19             $Core_Modules{$module}++;
20         }
21     }, "lib");
22
23 # Delete stuff that can't be tested here.
24
25 sub delete_unless_in_extensions {
26     delete $Core_Modules{$_[0]} unless $Config{extensions} =~ /\b$_[0]\b/;
27 }
28
29 foreach my $known_extension (split(' ', $Config{known_extensions})) {
30     delete_unless_in_extensions($known_extension);
31 }
32
33 sub delete_by_prefix {
34     delete @Core_Modules{grep { /^$_[0]/ } keys %Core_Modules};
35 }
36
37 delete $Core_Modules{'CGI::Fast'}; # won't load without FCGI
38
39 delete $Core_Modules{'Devel::DProf'}; # needs to be run as -d:DProf
40
41 delete_by_prefix('ExtUtils::MM_');      # ExtUtils::MakeMaker's domain
42
43 delete_by_prefix('File::Spec::');       # File::Spec's domain
44 $Core_Modules{'File::Spec::Functions'}++;       # put this back
45
46 delete_by_prefix('Thread::') unless $Config{extensions} =~ /\bThread\b/;
47
48 delete_by_prefix('unicode::');
49 $Core_Modules{'unicode::distinct'}++;   # put this back
50
51 # Okay, this is the list.
52
53 my @Core_Modules = sort keys %Core_Modules;
54
55 print "1..".@Core_Modules."\n";
56
57 my $test_num = 1;
58
59 foreach my $module (@Core_Modules) {
60     print "# $module compile failed\nnot " unless compile_module($module);
61     print "ok $test_num\n";
62     $test_num++;
63 }
64
65
66 # We do this as a separate process else we'll blow the hell out of our
67 # namespace.
68 sub compile_module {
69     my($module) = @_;
70     
71     return scalar `./perl -Ilib t/lib/compmod.pl $module` =~ /^ok/;
72 }