Only invoke the author Makefile.PL includes if we are not part of a `make` run
[dbsrgits/DBIx-Class.git] / maint / Makefile.PL.inc / 12_authordeps.pl
CommitLineData
fc4b0448 1my ($optdep_msg, $opt_testdeps);
2
3if ($args->{skip_author_deps}) {
4 $optdep_msg = <<'EOW';
5
6******************************************************************************
7******************************************************************************
8*** ***
9*** IGNORING AUTHOR MODE: no optional test dependencies will be forced. ***
10*** ***
11*** If you are using this checkout with the intention of submitting a DBIC ***
12*** patch, you are *STRONGLY ENCOURAGED* to install all dependencies, so ***
13*** that every possible unit-test will run. ***
14*** ***
15******************************************************************************
16******************************************************************************
17
18EOW
19}
20else {
21 $optdep_msg = <<'EOW';
22
23******************************************************************************
24******************************************************************************
25*** ***
26*** AUTHOR MODE: all optional test dependencies converted to hard requires ***
27*** ( to disable re-run Makefile.PL with --skip_author_deps ) ***
28*** ***
29******************************************************************************
30******************************************************************************
31
32EOW
33
34 require DBIx::Class::Optional::Dependencies;
35 my %reqs_for_group = %{DBIx::Class::Optional::Dependencies->req_group_list};
36
37 # exclude the rdbms_* groups which are for DBIC users
38 $opt_testdeps = {
39 map { %{$reqs_for_group{$_}} } grep { !/^rdbms_/ } keys %reqs_for_group
40 };
41
42 print "Including all optional deps\n";
43 $reqs->{test_requires} = {
44 %{$reqs->{test_requires}},
45 %$opt_testdeps
46 };
47}
48
49# nasty hook into both M::AI init and the prompter, so that the optdep message
50# comes at the right places (on top and then right above the prompt)
51{
52 require Module::AutoInstall;
53 no warnings 'redefine';
54 no strict 'refs';
55
56 for (qw/_prompt import/) {
57 my $meth = "Module::AutoInstall::$_";
58 my $orig = \&{$meth};
59 *{$meth} = sub {
60 print $optdep_msg;
61 goto $orig;
62 };
63 }
64}
65
66# this will run after the Makefile is written and the main Makefile.PL terminates
67#
68END {
69 # Re-write META.yml at the end to _exclude_ all forced build-requires (we do not
70 # want to ship this) We are also not using M::I::AuthorRequires as this will be
71 # an extra dep, and deps in Makefile.PL still suck
72 # Also always test the result so we stop shipping borked dependency lists to CPAN
73
74 # FIXME test_requires is not yet part of META
75 my %original_build_requires = ( %$build_requires, %$test_requires );
76 my @all_build_requires = @{delete Meta->{values}{build_requires}||[]};
77 my %removed_build_requires;
78
79 for (@all_build_requires) {
80 if ($original_build_requires{$_->[0]}) {
81 push @{Meta->{values}{build_requires}}, $_;
82 }
83 else {
84 $removed_build_requires{$_->[0]} = $_->[1]
85 unless $_->[0] eq 'ExtUtils::MakeMaker';
86 }
87 }
88
89 if (keys %removed_build_requires) {
90 print "Regenerating META with author requires excluded\n";
91 Meta->write;
92 }
93
94 # test that we really took things away (just in case, happened twice somehow)
95 if (! -f 'META.yml') {
96 warn "No META.yml generated?! aborting...\n";
97 unlink 'Makefile';
98 exit 1;
99 }
100 my $meta = do { local @ARGV = 'META.yml'; local $/; <> };
101
102 # this is safe as there is a fatal check earlier in the main Makefile.PL
103 # to make sure there are no duplicates (i.e. $opt_testdeps does not contain
104 # any real dependencies)
105 my @illegal_leftovers = grep
106 { $meta =~ /^ \s+ \Q$_\E \: \s+ /mx }
107 ( sort keys %$opt_testdeps )
108 ;
109
110 if (@illegal_leftovers) {
111 warn join ("\n",
112 "\n\nFATAL FAIL! It looks like some author dependencies made it to the META.yml:\n",
113 map { "\t$_" } @illegal_leftovers
114 ) . "\n\n";
115 unlink 'Makefile';
116 exit 1;
117 }
118}
119
120# keep the Makefile.PL eval happy
1211;