package DBICTest::AuthorCheck;
use strict;
use warnings;
use Path::Class qw/file dir/;
_check_author_makefile() unless $ENV{DBICTEST_NO_MAKEFILE_VERIFICATION};
sub _check_author_makefile {
my $root = _find_co_root()
or return;
my $optdeps = file('lib/DBIx/Class/Optional/Dependencies.pm');
my ($mf_pl_mtime, $mf_mtime, $optdeps_mtime) = ( map
{ (stat ($root->file ($_)) )[9] }
(qw|Makefile.PL Makefile|, $optdeps)
);
return unless $mf_pl_mtime;
my @fail_reasons;
if(not -d $root->subdir ('inc')) {
push @fail_reasons, "Missing ./inc directory";
}
if (not $mf_mtime) {
push @fail_reasons, "Missing ./Makefile";
}
elsif($mf_mtime < $mf_pl_mtime) {
push @fail_reasons, "./Makefile.PL is newer than ./Makefile";
}
if ($mf_mtime < $optdeps_mtime) {
push @fail_reasons, "./$optdeps is newer than ./Makefile";
}
if (@fail_reasons) {
print STDERR <<'EOE';
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
======================== FATAL ERROR ===========================
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
We have a number of reasons to believe that this is a development
checkout and that you, the user, did not run `perl Makefile.PL`
before using this code. You absolutely _must_ perform this step,
and ensure you have all required dependencies present. Not doing
so often results in a lot of wasted time for other contributors
trying to assit you with spurious "its broken!" problems.
If you are seeing this message unexpectedly (i.e. you are in fact
attempting a regular installation be it through CPAN or manually),
please report the situation to either the mailing list or to the
irc channel as described in
http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class.pm#GETTING_HELP/SUPPORT
The DBIC team
Reasons you received this message:
EOE
foreach my $r (@fail_reasons) {
print STDERR " * $r\n";
}
print STDERR "\n\n\n";
exit 1;
}
}
sub is_author {
my $root = _find_co_root()
or return undef;
return (
( not -d $root->subdir ('inc') )
or
( -e $root->subdir ('inc')->file ($^O eq 'VMS' ? '_author' : '.author') )
);
}
sub _find_co_root {
my @mod_parts = split /::/, (__PACKAGE__ . '.pm');
my $rel_path = join ('/', @mod_parts);
return undef unless ($INC{$rel_path});
my $root = dir ($INC{$rel_path});
for (1 .. @mod_parts + 2) {
$root = $root->parent;
}
return (-f $root->file ('Makefile.PL') )
? $root
: undef
;
}
1;