8 Makes sure that all of the modules that are 'use'd are listed in the
9 Makefile.PL as dependencies.
15 eval 'use Module::CoreList';
16 if ($@) { plan skip_all => 'Module::CoreList not installed' }
21 find( \&wanted, qw/ lib t / );
25 return if $File::Find::dir =~ m!/.git($|/)!;
26 return if $File::Find::name =~ /~$/;
27 return if $File::Find::name =~ /\.(pod|html)$/;
29 # read in the file from disk
32 open( FILE, $filename ) or return;
36 # strip pod, in a really idiotic way. Good enough though
37 $data =~ s/^=head.+?(^=cut|\Z)//gms;
39 # look for use and use base statements
40 $used{$1}{$File::Find::name}++ while $data =~ /^\s*use\s+([\w:]+)/gm;
41 while ( $data =~ m|^\s*use base qw.([\w\s:]+)|gm ) {
42 $used{$_}{$File::Find::name}++ for split ' ', $1;
49 ok( open( MAKEFILE, "Makefile.PL" ), "Opened Makefile" );
50 my $data = <MAKEFILE>;
52 while ( $data =~ /^\s*?(?:requires|recommends|).*?([\w:]+)'(?:\s*=>\s*['"]?([\d\.]+)['"]?)?.*?(?:#(.*))?$/gm ) {
54 if ( defined $3 and length $3 ) {
55 $required{$_} = undef for split ' ', $3;
60 for ( sort keys %used ) {
61 my $first_in = Module::CoreList->first_release($_);
62 next if defined $first_in and $first_in <= 5.00803;
63 next if /^(Text::Tradition|inc|t)(::|$)/;
66 ok( exists $required{$_}, "$_ in Makefile.PL" )
67 or diag( "used in ", join ", ", sort keys %{ $used{$_} } );
72 for ( sort keys %required ) {
73 my $first_in = Module::CoreList->first_release( $_, $required{$_} );
74 fail("Required module $_ (v. $required{$_}) is in core since $first_in")
75 if defined $first_in and $first_in <= 5.008003;