require File::Spec;
require File::Find;
-my $xt_dirs;
+my $xt_dist_dirs;
File::Find::find(sub {
- return if $xt_dirs->{$File::Find::dir};
- $xt_dirs->{$File::Find::dir} = 1 if (
+ return if $xt_dist_dirs->{$File::Find::dir};
+ $xt_dist_dirs->{$File::Find::dir} = 1 if (
$_ =~ /\.t$/ and -f $_
);
-}, 'xt');
+}, 'xt/dist');
-my $xt_tests = join (' ', map { File::Spec->catfile($_, '*.t') } sort keys %$xt_dirs );
+my @xt_dist_tests = map { File::Spec->catfile($_, '*.t') } sort keys %$xt_dist_dirs;
-# this will add the xt tests to the `make test` target among other things
-Meta->tests(join (' ', map { $_ || () } Meta->tests, $xt_tests ) );
-
-# inject an explicit xt test run for making a tarball (distdir is exempt)
+# inject an explicit xt test run, mainly to check the contents of
+# lib and the generated POD's *before* anything is copied around
+#
+# at the end rerun the whitespace and footer tests in the distdir
+# to make sure everything is pristine
postamble <<"EOP";
-.PHONY: test_xt
-
-dist : test_xt
-
-test_xt :
-\tPERL_DL_NONLAZY=1 RELEASE_TESTING=1 \$(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness(\$(TEST_VERBOSE), 'inc', '\$(INST_LIB)', '\$(INST_ARCHLIB)')" $xt_tests
+dbic_clonedir_copy_generated_pod : test_xt
+
+test_xt : pm_to_blib
+@{[
+ # When xt tests are explicitly requested, we want to run with RELEASE_TESTING=1
+ # so that all optdeps are turned into a hard failure
+ # However portably modifying ENV for a single command is surprisingly hard
+ # So instead we (ab)use perl's ability to stack -e options, and simply modify
+ # the ENV from within perl itself
+ $mm_proto->test_via_harness(
+ # perl cmd
+ join( ' ',
+ '$(ABSPERLRUN)',
+ map { $mm_proto->quote_literal($_) } qw(-e $ENV{RELEASE_TESTING}=1;$ENV{DBICTEST_NO_MAKEFILE_VERIFICATION}=1;)
+ ),
+ # test list
+ join( ' ',
+ map { $mm_proto->quote_literal($_) } @xt_dist_tests
+ ),
+ )
+]}
+
+create_distdir : dbic_distdir_retest_ws_and_footers
+
+dbic_distdir_retest_ws_and_footers :
+\t@{[
+ $mm_proto->cd (
+ '$(DISTVNAME)',
+ $mm_proto->test_via_harness(
+ # perl cmd
+ join( ' ',
+ '$(ABSPERLRUN)',
+ map { $mm_proto->quote_literal($_) } qw(-Ilib -e $ENV{RELEASE_TESTING}=1;$ENV{DBICTEST_NO_MAKEFILE_VERIFICATION}=1;)
+ ),
+ 'xt/dist/postdistdir/*.t',
+ )
+ )
+]}
EOP
-
# keep the Makefile.PL eval happy
1;