Use plain old file concat for the dbicadmin pod-injection
[dbsrgits/DBIx-Class.git] / maint / Makefile.PL.inc / 11_authortests.pl
index b8f00b4..c9ff881 100644 (file)
@@ -1,22 +1,47 @@
-# temporary(?) until I get around to fix M::I wrt xt/
-# needs Module::Install::AuthorTests
-eval {
-  # this should not be necessary since the autoloader is supposed
-  # to work, but there were reports of it failing
-  require Module::Install::AuthorTests;
-  recursive_author_tests (qw/xt/);
-  1;
-} || do {
-  if (! $args->{skip_author_deps}) {
-    my $err = $@;
-
-    # better error message in case of missing dep
-    eval { require Module::Install::AuthorTests }
-      || die "\nYou need Module::Install::AuthorTests installed to run this Makefile.PL in author mode (or add --skip-author-deps):\n\n$@\n";
-
-    die $err;
-  }
-};
+require File::Spec;
+require File::Find;
+
+my $xt_dirs;
+File::Find::find(sub {
+  return if $xt_dirs->{$File::Find::dir};
+  $xt_dirs->{$File::Find::dir} = 1 if (
+    $_ =~ /\.t$/ and -f $_
+  );
+}, 'xt');
+
+my @xt_tests = map { File::Spec->catfile($_, '*.t') } sort keys %$xt_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, mainly to check the contents of
+# lib and the generated POD's *before* anything is copied around
+postamble <<"EOP";
+
+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)',
+      # $'s need to be escaped (doubled) before inserting into the Makefile
+      map { $mm_proto->quote_literal($_) } qw(-e $$ENV{RELEASE_TESTING}=1;) 
+    ),
+    # test list
+    join( ' ',
+      map { $mm_proto->quote_literal($_) } @xt_tests
+    ),
+  )
+]}
+
+EOP
 
 # keep the Makefile.PL eval happy
 1;