=head1 DESCRIPTION
Makes sure that all of the modules that are 'use'd are listed in the
-Makefile.PL as dependencies.
+Makefile.PL as dependencies. Also as long as we are source filtering,
+make sure there are no $DB::single statements in the code.
=cut
plan 'no_plan';
+my %skipped;
+if( -f 'MANIFEST.SKIP' ) {
+ # We don't want these
+ open( SKIP, 'MANIFEST.SKIP' ) or die "Could not open manifest skip file";
+ while(<SKIP>) {
+ chomp;
+ $skipped{$_} = 1;
+ }
+ close SKIP;
+}
my %used;
find( \&wanted, qw/ lib t / );
return if $File::Find::dir =~ m!/.git($|/)!;
return if $File::Find::name =~ /~$/;
return if $File::Find::name =~ /\.(pod|html)$/;
+ return if $skipped{$File::Find::name};
# read in the file from disk
my $filename = $_;
close(FILE);
# strip pod, in a really idiotic way. Good enough though
- $data =~ s/^=head.+?(^=cut|\Z)//gms;
+ $data =~ s/^=(begin|head).+?(^=cut|\Z)//gms;
# look for use and use base statements
$used{$1}{$File::Find::name}++ while $data =~ /^\s*use\s+([\w:]+)/gm;
while ( $data =~ m|^\s*use base qw.([\w\s:]+)|gm ) {
$used{$_}{$File::Find::name}++ for split ' ', $1;
}
+ # look for DB statements while we are here
+ while( $data =~ /^\s*\$DB::single/gm ) {
+ fail( "DB::single statement present in source " . $File::Find::name );
+ }
}
my %required;
for ( sort keys %used ) {
my $first_in = Module::CoreList->first_release($_);
next if defined $first_in and $first_in <= 5.00803;
- next if /^(Text::Tradition|inc|t)(::|$)/;
+ next if /^(Text::Tradition|inc|t|feature|parent)(::|$)/;
#warn $_;
ok( exists $required{$_}, "$_ in Makefile.PL" )