summaryrefslogtreecommitdiff
path: root/t/lib/1_compile.t
diff options
context:
space:
mode:
Diffstat (limited to 't/lib/1_compile.t')
-rw-r--r--t/lib/1_compile.t75
1 files changed, 75 insertions, 0 deletions
diff --git a/t/lib/1_compile.t b/t/lib/1_compile.t
new file mode 100644
index 0000000000..e853dee2b7
--- /dev/null
+++ b/t/lib/1_compile.t
@@ -0,0 +1,75 @@
+#!./perl
+
+BEGIN {
+ chdir '..' if -d '../pod' && -d '../t';
+ @INC = 'lib';
+}
+
+use strict;
+use warnings;
+use Config;
+use File::Find;
+
+my %Core_Modules;
+
+find(sub {
+ if ($File::Find::name =~ m!^lib\W+(.+)\.pm$!i) {
+ my $module = $1;
+ $module =~ s/[^\w-]/::/g;
+ $Core_Modules{$module}++;
+ }
+ }, "lib");
+
+# Delete stuff that can't be tested here.
+
+sub delete_unless_in_extensions {
+ delete $Core_Modules{$_[0]} unless $Config{extensions} =~ /\b$_[0]\b/;
+}
+
+foreach my $known_extension (split(' ', $Config{known_extensions})) {
+ delete_unless_in_extensions($known_extension);
+}
+
+sub delete_by_prefix {
+ delete @Core_Modules{grep { /^$_[0]/ } keys %Core_Modules};
+}
+
+delete $Core_Modules{'CGI::Fast'}; # won't load without FCGI
+
+delete $Core_Modules{'Devel::DProf'}; # needs to be run as -d:DProf
+
+delete_by_prefix('ExtUtils::MM_'); # ExtUtils::MakeMaker's domain
+
+delete_by_prefix('File::Spec::'); # File::Spec's domain
+$Core_Modules{'File::Spec::Functions'}++; # put this back
+
+unless ($Config{extensions} =~ /\bThread\b/) {
+ delete $Core_Modules{Thread};
+ delete_by_prefix('Thread::');
+}
+
+delete_by_prefix('unicode::');
+$Core_Modules{'unicode::distinct'}++; # put this back
+
+# Okay, this is the list.
+
+my @Core_Modules = sort keys %Core_Modules;
+
+print "1..".@Core_Modules."\n";
+
+my $test_num = 1;
+
+foreach my $module (@Core_Modules) {
+ print "# $module compile failed\nnot " unless compile_module($module);
+ print "ok $test_num\n";
+ $test_num++;
+}
+
+
+# We do this as a separate process else we'll blow the hell out of our
+# namespace.
+sub compile_module {
+ my($module) = @_;
+
+ return scalar `./perl -Ilib t/lib/compmod.pl $module` =~ /^ok/;
+}