### This may look crazy, but it in fact tangibly ( by 50(!)% ) shortens
# the skip-test time when everything requested is unavailable
-use if $ENV{RELEASE_TESTING} => 'warnings';
-use if $ENV{RELEASE_TESTING} => 'strict';
+BEGIN {
+ if ( $ENV{RELEASE_TESTING} ) {
+ require warnings and warnings->import;
+ require strict and strict->import;
+ }
+}
sub croak {
require Carp;
# POD is generated automatically by calling _gen_pod from the
# Makefile.PL in $AUTHOR mode
-# *DELIBERATELY* not making a group for these - they must disappear
-# forever as optdeps in the first place
-my $moose_basic = {
- 'Moose' => '0.98',
- 'MooseX::Types' => '0.21',
- 'MooseX::Types::LoadableClass' => '0.011',
-};
-
my $dbic_reqs = {
# NOTE: the rationale for 2 JSON::Any versions is that
},
},
+ _types_common => {
+ req => {
+ 'Type::Utils' => '0',
+ 'Type::Library' => '0',
+ 'Types::Standard' => '0',
+ 'Types::LoadableClass' => '0',
+ },
+ },
+
# a common placeholder for engines with IC::DT support based off DT::F::S
_icdt_strptime_based => {
augment => {
# this prevents the "skips due to forgotten deps" issue
test_adhoc => {
req => {
+ 'Class::DBI::Plugin::DeepAbstractSearch' => '0',
+ 'Class::DBI' => '3.000005',
'Date::Simple' => '3.03',
'YAML' => '0',
'Class::Unload' => '0.07',
+ 'Time::Piece' => '0',
+ 'Time::Piece::MySQL' => '0',
},
},
replicated => {
- req => $moose_basic,
+ include => '_types_common',
pod => {
title => 'Storage::Replicated',
desc => 'Modules required for L<DBIx::Class::Storage::DBI::Replicated>',
test_replicated => {
include => 'replicated',
- req => {
- 'Test::Moose' => '0',
- },
},
admin => {
- include => '_json_any',
- req => {
- %$moose_basic,
- 'MooseX::Types::Path::Class' => '0.05',
- 'MooseX::Types::JSON' => '0.02',
- },
+ include => [qw(_json_any _types_common)],
pod => {
title => 'DBIx::Class::Admin',
desc => 'Modules required for the DBIx::Class administrative library',
},
},
+ cdbicompat => {
+ req => {
+ 'Class::Data::Inheritable' => '0',
+ 'Class::Trigger' => '0',
+ 'DBIx::ContextualFetch' => '0',
+ 'Clone' => '0.32',
+ },
+ pod => {
+ title => 'DBIx::Class::CDBICompat support',
+ desc => 'Modules required for L<DBIx::Class::CDBICompat>'
+ },
+ },
+
test_pod => {
req => {
'Test::Pod' => '1.42',
test_strictures => {
req => {
- 'Test::Strict' => '0.20',
+ 'Test::Strict' => '0.24',
},
release_testing_mandatory => 1,
},
},
},
- test_cdbicompat => {
- include => 'icdt',
- req => {
- 'Class::DBI::Plugin::DeepAbstractSearch' => '0',
- 'Time::Piece::MySQL' => '0',
- },
- },
# this is just for completeness as SQLite
# is a core dep of DBIC for testing
my ($self, $groups) = @_;
my $reqs = $self->_groups_to_reqs($groups);
- my $mods_missing = $self->modreq_missing_for($groups);
+
+ my $mods_missing = $reqs->{missing_envvars}
+ ? $self->_list_physically_missing_modules( $reqs->{modreqs} )
+ : $self->modreq_missing_for($groups)
+ ;
return '' if
! $mods_missing
}
-# this method tries to load specified modreqs and returns a hashref of
+# this method tries to find/load specified modreqs and returns a hashref of
# module/loaderror pairs for anything that failed
sub _errorlist_for_modreqs {
# args supposedly already went through _groups_to_reqs and are therefore sanitized
$ret;
}
+# Unlike the above DO NOT try to load anything
+# This is executed when some needed envvars are not available
+# which in turn means a module load will never be reached anyway
+# This is important because some modules (especially DBDs) can be
+# *really* fickle when a require() is attempted, with pretty confusing
+# side-effects (especially on windows)
+sub _list_physically_missing_modules {
+ my ($self, $modreqs) = @_;
+
+ # in case there is a coderef in @INC there is nothing we can definitively prove
+ # so short circuit directly
+ return '' if grep { length ref $_ } @INC;
+
+ my @definitely_missing;
+ for my $mod (keys %$modreqs) {
+ (my $fn = $mod . '.pm') =~ s|::|/|g;
+
+ push @definitely_missing, $mod unless grep
+ # this should work on any combination of slashes
+ { $_ and -d $_ and -f "$_/$fn" and -r "$_/$fn" }
+ @INC
+ ;
+ }
+
+ join ' ', map
+ { $modreqs->{$_} ? qq("$_~>=$modreqs->{$_}") : $_ }
+ sort { lc($a) cmp lc($b) } @definitely_missing
+ ;
+}
+
# This is to be called by the author only (automatically in Makefile.PL)
sub _gen_pod {