This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
[perl5.git] / t / lib / 1_compile.t
index e853dee..a713c6c 100644 (file)
@@ -8,48 +8,82 @@ BEGIN {
 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");
+unless (open(MANIFEST, "MANIFEST")) {
+    die "$0: failed to open 'MANIFEST': $!\n";
+}
+
+sub add_by_name {
+    $Core_Modules{$_[0]}++;
+}
+
+while (<MANIFEST>) {
+    next unless m!^lib/(\S+?)\.pm!;
+    my $module = $1;
+    $module =~ s!/!::!g;
+    add_by_name($module);
+}
+
+close(MANIFEST);
 
 # Delete stuff that can't be tested here.
 
-sub delete_unless_in_extensions {
-    delete $Core_Modules{$_[0]} unless $Config{extensions} =~ /\b$_[0]\b/;
+sub delete_by_name {
+    delete $Core_Modules{$_[0]};
+}
+
+sub has_extension {
+    $Config{extensions} =~ /\b$_[0]\b/i;
+}
+
+sub delete_unless_has_extension {
+    delete $Core_Modules{$_[0]} unless has_extension($_[0]);
 }
 
 foreach my $known_extension (split(' ', $Config{known_extensions})) {
-    delete_unless_in_extensions($known_extension);
+    delete_unless_has_extension($known_extension);
 }
 
 sub delete_by_prefix {
-    delete @Core_Modules{grep { /^$_[0]/ } keys %Core_Modules};
+    for my $match (grep { /^$_[0]/ } keys %Core_Modules) {
+       delete_by_name($match);
+    }
 }
 
-delete $Core_Modules{'CGI::Fast'}; # won't load without FCGI
+delete_by_name('CGI::Fast');           # won't load without FCGI
 
-delete $Core_Modules{'Devel::DProf'}; # needs to be run as -d:DProf
+delete_by_name('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
+add_by_name('File::Spec::Functions');  # put this back
+
+delete_by_prefix('Attribute::Handlers');# we test this, and we have demos
+
+sub using_feature {
+    my $use = "use$_[0]";
+    exists $Config{$use} &&
+       defined $Config{$use} &&
+       $Config{$use} eq 'define';
+}
 
-unless ($Config{extensions} =~ /\bThread\b/) {
-    delete $Core_Modules{Thread};
+unless (using_feature('threads') && has_extension('Thread')) {
+    delete_by_name('Thread');
     delete_by_prefix('Thread::');
 }
 
 delete_by_prefix('unicode::');
-$Core_Modules{'unicode::distinct'}++;  # put this back
+add_by_name('unicode::distinct');      # put this back
+
+# Delete all modules which have their own tests.
+# This makes this test a lot faster.
+foreach my $mod (<DATA>) {
+    chomp $mod;
+    delete_by_name($mod);
+}
 
 # Okay, this is the list.
 
@@ -65,11 +99,168 @@ foreach my $module (@Core_Modules) {
     $test_num++;
 }
 
-
-# We do this as a separate process else we'll blow the hell out of our
-# namespace.
+# We do this as a separate process else we'll blow the hell
+# out of our namespace.
 sub compile_module {
-    my($module) = @_;
+    my ($module) = $_[0];
     
-    return scalar `./perl -Ilib t/lib/compmod.pl $module` =~ /^ok/;
+    return scalar `$^X "-Ilib" t/lib/compmod.pl $module` =~ /^ok/;
 }
+
+# Add here modules that have their own test scripts and therefore
+# need not be test-compiled by 1_compile.t.
+__DATA__
+AnyDBM_File
+Attribute::Handlers
+AutoLoader
+B
+B::Debug
+B::Deparse
+B::ShowLex
+B::Stash
+Benchmark
+CGI
+CGI::Pretty
+CGI::Util
+Carp
+Carp::Heavy
+Class::ISA
+Class::Struct
+CPAN
+Cwd
+DB_File
+Data::Dumper
+Devel::DProf
+Devel::Peek
+Devel::SelfStubber
+Digest
+Digest::MD5
+DirHandle
+Dumpvalue
+Encode
+English
+Env
+Errno
+Exporter
+Exporter::Heavy
+ExtUtils::Constant
+ExtUtils::MakeMaker
+Fatal
+Fcntl
+File::Basename
+File::CheckTree
+File::Compare
+File::Copy
+File::DosGlob
+File::Find
+File::Glob
+File::Path
+File::Spec
+File::Spec::Functions
+File::Temp
+File::stat
+FileCache
+FileHandle
+Filter::Simple
+Filter::Util::Call
+FindBin
+GDBM_File
+Getopt::Long
+Getopt::Std
+I18N::LangTags
+I18N::Collate
+IO::Dir
+IO::File
+IO::Handle
+IO::Pipe
+IO::Poll
+IO::Seekable
+IO::Select
+IO::Socket
+IO::Socket::INET
+IO::Socket::UNIX
+IPC::Open2
+IPC::Open3
+IPC::SysV
+List::Util
+Locale::Constants
+Locale::Country
+Locale::Currency
+Locale::Language
+Locale::Maketext
+MIME::Base64
+MIME::QuotedPrint
+Math::BigFloat
+Math::BigInt
+Math::Complex
+Math::Trig
+NDBM_File
+NEXT
+Net::hostent
+Net::netent
+Net::protoent
+Net::servent
+ODBM_File
+Opcode
+PerlIO
+POSIX
+Pod::Checker
+Pod::Find
+Pod::Text
+Pod::Usage
+SDBM_File
+Safe
+Scalar::Util
+Search::Dict
+SelectSaver
+SelfLoader
+Socket
+Storable
+Switch
+Symbol
+Sys::Hostname
+Sys::Syslog
+Term::ANSIColor
+Test
+Test::Harness
+Test::ParseWords
+Text::Abbrev
+Text::Balanced
+Text::ParseWords
+Text::Soundex
+Text::Tabs
+Text::Wrap
+Thread
+Tie::Array
+Tie::Handle
+Tie::Hash
+Tie::RefHash
+Tie::Scalar
+Tie::SubstrHash
+Time::HiRes
+Time::Local
+Time::Piece
+Time::gmtime
+Time::localtime
+Time::tm
+UNIVERSAL
+User::grent
+User::pwent
+XS::Typemap
+attrs
+autouse
+base
+bytes
+charnames
+constant
+diagnostics
+fields
+integer
+locale
+ops
+overload
+strict
+subs
+utf8
+warnings
+warnings::register