calculate mro module once
[gitmo/Role-Tiny.git] / Makefile.PL
1 use strict;
2 use warnings FATAL => 'all';
3 use 5.006;
4
5 my %META = (
6   name => 'Role-Tiny',
7   license => 'perl_5',
8   prereqs => {
9     configure => { requires => {
10       'ExtUtils::MakeMaker'   => 0,
11     } },
12     build => { requires => {
13     } },
14     test => { requires => {
15       'Test::More' => 0.96,
16       'Test::Fatal' => 0.003,
17     } },
18     runtime => {
19       requires => {
20         Exporter => '5.57',
21         ($] >= 5.010 ? () : ('MRO::Compat' => 0)),
22       },
23       recommends => {
24         'Class::Method::Modifiers' => 1.05,
25       },
26     },
27     develop => { requires => {
28       Moo => 0,
29       ($] >= 5.008004 ? () : ('namespace::clean' => 0)),
30     } },
31   },
32   resources => {
33     # r/w: gitmo@git.shadowcat.co.uk:Role-Tiny.git
34     repository => {
35       url => 'git://git.shadowcat.co.uk/gitmo/Role-Tiny.git',
36       web => 'http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo/Role-Tiny.git',
37       type => 'git',
38     },
39     bugtracker => {
40         mailto => 'bug-Role-Tiny@rt.cpan.org',
41         web => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Role-Tiny',
42     },
43     x_IRC => 'irc://irc.perl.org/#moose',
44     license => [ 'http://dev.perl.org/licenses/' ],
45   },
46   no_index => {
47     directory => [ 't', 'xt' ]
48   },
49 );
50
51 my %MM_ARGS = ();
52
53 ##############################################################################
54 require ExtUtils::MakeMaker;
55 ExtUtils::MakeMaker->import;
56
57 (do 'maint/Makefile.PL.include' or die $@) unless -f 'META.yml';
58
59 # have to do this since old EUMM dev releases miss the eval $VERSION line
60 my $eumm_version = eval $ExtUtils::MakeMaker::VERSION;
61 my $mymeta_works      = $eumm_version >= 6.57_07;
62 my $mymeta            = $eumm_version >= 6.57_02;
63 my $has_test_requires = $eumm_version >= 6.63_03;
64
65 my %configure_deps = %{$META{prereqs}{configure}{requires}};
66 my %build_deps     = %{$META{prereqs}{build}{requires}};
67 my %test_deps      = %{$META{prereqs}{test}{requires}};
68 my %run_deps       = %{$META{prereqs}{runtime}{requires}};
69
70 my $min_perl_version = delete $run_deps{perl};
71
72 if (not $has_test_requires) {
73   %build_deps = (%build_deps, %test_deps);
74   %test_deps = ();
75 }
76 if (not $mymeta_works) {
77   %run_deps = (%run_deps, %build_deps);
78   %build_deps = ();
79 }
80
81 (my $module_name = $META{name}) =~ s/-/::/g;
82 (my $module_file = "lib/$module_name.pm") =~ s{::}{/}g;
83
84 WriteMakefile(
85   NAME => $module_name,
86   VERSION_FROM => $module_file,
87   LICENSE => $META{license},
88
89   $eumm_version >= 6.47_01 && $min_perl_version
90     ? ( MIN_PERL_VERSION    => $min_perl_version ) : (),
91   $eumm_version >= 6.51_03
92     ? ( CONFIGURE_REQUIRES  => \%configure_deps ) : (),
93   $eumm_version >= 6.55_01
94     ? ( BUILD_REQUIRES      => \%build_deps ) : (),
95   $eumm_version >= 6.63_03
96     ? ( TEST_REQUIRES       => \%test_deps ) : (),
97   PREREQ_PM => \%run_deps,
98
99   ($mymeta && !$mymeta_works ? (NO_MYMETA => 1) : ()),
100   -f 'META.yml' ? () : (META_ADD => { 'meta-spec' => { version => 2 }, %META }),
101
102   %MM_ARGS,
103 );