From: Peter Rabbitson Date: Sun, 16 Dec 2012 07:39:42 +0000 (+0100) Subject: Rewrite all Makefile oneliners in terms of EU::MM::oneliner X-Git-Tag: v0.08205~44 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3ba58fe4768f0cca6731dad6ac669b5ab049980e;p=dbsrgits%2FDBIx-Class.git Rewrite all Makefile oneliners in terms of EU::MM::oneliner --- diff --git a/Makefile.PL b/Makefile.PL index b5c2368..df1da83 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -146,9 +146,15 @@ if ($Module::Install::AUTHOR and ! $ENV{MAKELEVEL}) { warn "\nIgnoring unrecognized option(s): @ARGV\n\n"; } + # We need the MM facilities to generate the pieces for the final MM run. + # Just instantiate a throaway object here + my $mm_proto = ExtUtils::MakeMaker->new({ + NAME => Meta->name || die 'The Module::Install metadata must be available at this point but is not - did you rearrange the Makefile.PL...?', + }); + require File::Spec; # string-eval, not do(), because we need to provide the - # $reqs and $*_requires lexicals to the included file + # $mm_proto, $reqs and $*_requires lexicals to the included file # (some includes *do* modify $reqs above) for my $inc (sort glob ( File::Spec->catfile('maint', 'Makefile.PL.inc', '*') ) ) { my $src = do { local (@ARGV, $/) = $inc; <> } or die $!; diff --git a/maint/Makefile.PL.inc/11_authortests.pl b/maint/Makefile.PL.inc/11_authortests.pl index 9b3067d..dc3eb4c 100644 --- a/maint/Makefile.PL.inc/11_authortests.pl +++ b/maint/Makefile.PL.inc/11_authortests.pl @@ -9,21 +9,38 @@ File::Find::find(sub { ); }, 'xt'); -my $xt_tests = join (' ', map { File::Spec->catfile($_, '*.t') } sort keys %$xt_dirs ); +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 ) ); +Meta->tests(join (' ', map { $_ || () } Meta->tests, @xt_tests ) ); # inject an explicit xt test run for the create_distdir target postamble <<"EOP"; create_distdir : 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 +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; diff --git a/maint/Makefile.PL.inc/53_autogen_pod.pl b/maint/Makefile.PL.inc/53_autogen_pod.pl index 1119c7f..e31dd1d 100644 --- a/maint/Makefile.PL.inc/53_autogen_pod.pl +++ b/maint/Makefile.PL.inc/53_autogen_pod.pl @@ -29,7 +29,9 @@ else { clonedir_generate_files : dbic_clonedir_gen_optdeps_pod dbic_clonedir_gen_optdeps_pod : -\t\$(ABSPERLRUN) -Ilib -MDBIx::Class::Optional::Dependencies -e "DBIx::Class::Optional::Dependencies->_gen_pod(qw($ver $pod_dir))" +\t@{[ + $mm_proto->oneliner("DBIx::Class::Optional::Dependencies->_gen_pod(q($ver), q($pod_dir))", [qw/-Ilib -MDBIx::Class::Optional::Dependencies/]) +]} EOP } @@ -62,8 +64,9 @@ clonedir_post_generate_files : dbic_clonedir_copy_generated_pod dbic_clonedir_copy_generated_pod : \t\$(RM_F) $pod_dir.packlist -\t\$(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {qw($pod_dir lib write $pod_dir.packlist)}, verbose => 0, uninstall_shadows => 0, skip => [] ]);' - +\t@{[ + $mm_proto->oneliner("install([ from_to => {q($pod_dir) => 'lib', write => q($pod_dir.packlist)}, verbose => 0, uninstall_shadows => 0, skip => [] ])", ['-MExtUtils::Install']) +]} EOP } @@ -75,7 +78,9 @@ EOP clonedir_cleanup_generated_files : dbic_clonedir_cleanup_generated_pod_copies dbic_clonedir_cleanup_generated_pod_copies : -\t\$(ABSPERLRUN) -MExtUtils::Install -e 'uninstall(qw($pod_dir.packlist))' +\t@{[ + $mm_proto->oneliner("uninstall(q($pod_dir.packlist))", ['-MExtUtils::Install']) +]} EOP }