Add Test::Exception in test_requires to Makefile.PL
[catagits/Catalyst-Runtime.git] / Makefile.PL
1 use inc::Module::Install 0.87;
2
3 perl_version '5.008001';
4
5 name 'Catalyst-Runtime';
6 all_from 'lib/Catalyst/Runtime.pm';
7
8 requires 'namespace::clean';
9 requires 'B::Hooks::EndOfScope' => '0.08';
10 requires 'MooseX::Emulate::Class::Accessor::Fast' => '0.00801';
11 requires 'Class::MOP' => '0.83';
12 requires 'Moose' => '0.78';
13 requires 'MooseX::MethodAttributes::Inheritable' => '0.12';
14 requires 'Carp';
15 requires 'Class::C3::Adopt::NEXT' => '0.07';
16 requires 'CGI::Simple::Cookie';
17 requires 'Data::Dump';
18 requires 'File::Modified';
19 requires 'HTML::Entities';
20 requires 'HTTP::Body'    => '1.04'; # makes uploadtmp work
21 requires 'HTTP::Headers' => '1.64';
22 requires 'HTTP::Request';
23 requires 'HTTP::Response';
24 requires 'HTTP::Request::AsCGI' => '0.8';
25 requires 'LWP::UserAgent';
26 requires 'Module::Pluggable' => '3.01';
27 requires 'Path::Class' => '0.09';
28 requires 'Scalar::Util';
29 requires 'Sub::Exporter';
30 requires 'Text::SimpleTable' => '0.03';
31 requires 'Time::HiRes';
32 requires 'Tree::Simple' => '1.15';
33 requires 'Tree::Simple::Visitor::FindByPath';
34 requires 'URI' => '1.35';
35 requires 'Text::Balanced'; # core in 5.8.x but mentioned for completeness
36 requires 'MRO::Compat';
37
38 recommends 'B::Hooks::OP::Check::StashChange';
39
40 test_requires 'Class::Data::Inheritable';
41 test_requires 'Test::MockObject' => '1.07'; # Newish (hah, 2006!) version to
42                                             # hopefully avoid broken distro
43                                             # packages (RT#46104)
44 test_requires 'Test::Exception';
45
46 # aggregate tests if AGGREGATE_TESTS is set and a recent Test::Aggregate is available
47 if ($ENV{AGGREGATE_TESTS} && can_use('Test::Aggregate', '0.34_01')) {
48     test_requires('Test::Aggregate', '0.34_01');
49 }
50 else {
51     tests join q{ },
52         grep { $_ ne 't/aggregate.t' }
53         map  { glob } qw[t/*.t t/aggregate/*.t];
54 }
55
56 my @force_build_requires_if_author = qw(
57   Test::NoTabs
58   Test::Pod
59   Test::Pod::Coverage
60   Pod::Coverage
61 );
62
63 if ($Module::Install::AUTHOR) {
64     foreach my $module (@force_build_requires_if_author) {
65         build_requires $module;
66     }
67     darwin_check_no_resource_forks();
68 }
69
70 install_script glob('script/*.pl');
71 auto_install;
72 WriteAll;
73
74 if ($Module::Install::AUTHOR) {
75
76   # Strip out the author only build_requires from META.yml
77   # Need to do this _after_ WriteAll else it looses track of them
78   strip_author_only_build_requires(@force_build_requires_if_author, 'Test::Aggregate');
79
80   Meta->{values}{resources} = [
81     [ 'MailingList' => 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst' ],
82     [ 'IRC'         => 'irc://irc.perl.org/#catalyst' ],
83     [ 'license',    => 'http://dev.perl.org/licenses/' ],
84     [ 'homepage',   => 'http://dev.catalyst.perl.org/'],
85     [ 'repository', => 'http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/' ],
86   ];
87
88   Meta->write;
89 }
90
91 print <<"EOF";
92
93  Important:
94
95     This library is for running Catalyst applications.
96
97     For development and use of catalyst.pl and myapp_create.pl, make sure
98     you also install the development tools package Catalyst::Devel.
99
100         perl -MCPANPLUS -e 'install Catalyst::Devel' # or
101         perl -MCPAN -e 'install Catalyst::Devel'
102
103     To get some commonly used plugins, as well as the TT view and DBIC 
104     model, install Task::Catalyst in the same way.
105
106  Have fun!
107 EOF
108
109 # NOTE - This is the version number of the _incompatible_ code,
110 #        not the version number of the fixed version.
111 my %conflicts = (
112     'Catalyst::Plugin::ENV' => '9999', # This plugin is just stupid, full stop
113                                        # should have been a core fix.
114     'Catalyst::Plugin::Unicode::Encoding' => '0.2',
115     'Catalyst::Authentication::Credential::HTTP' => '1.009',
116     'Catalyst::Plugin::Session::Store::File' => '0.16',
117     'Catalyst::Plugin::Session' => '0.21',
118     'Catalyst::Plugin::Session::State::Cookie' => '0.10',
119     'Catalyst::Plugin::Session::Store::FastMmap' => '0.09',
120     'Catalyst::Controller::AllowDisable' => '0.03',
121     'Reaction' => '0.001999',
122     'Catalyst::Plugin::Upload::Image::Magick' => '0.03',
123     'Catalyst::Plugin::ConfigLoader'   => '0.22', # Older versions work but
124                                                   # throw Data::Visitor warns
125     'Catalyst::Devel'                  => '0.09',
126     'Catalyst::Plugin::SmartURI'       => '0.032',
127     'CatalystX::CRUD'                  => '0.37',
128     'Catalyst::Action::RenderView'     => '0.07',
129     'Catalyst::Plugin::DebugCookie'    => '0.999002',
130     'Catalyst::Plugin::Authentication' => '0.100091',
131     'CatalystX::Imports'               => '0.03',
132     'Catalyst::Plugin::HashedCookies'  => '1.03',
133     'Catalyst::Action::REST'           => '0.67',
134     'CatalystX::CRUD'                  => '0.42',
135     'CatalystX::CRUD::Model::RDBO'     => '0.20',
136 );
137 check_conflicts(%conflicts);
138
139 # End of script, helper functions below.
140
141 sub darwin_check_no_resource_forks {
142     if ($^O eq 'darwin') {
143         my $osx_ver = `/usr/bin/sw_vers -productVersion`;
144         chomp $osx_ver;
145
146         # TAR on 10.4 wants COPY_EXTENDED_ATTRIBUTES_DISABLE
147         # On 10.5 (Leopard) it wants COPYFILE_DISABLE
148         my $attr = $osx_ver eq '10.5' ? 'COPYFILE_DISABLE' : 'COPY_EXTENDED_ATTRIBUTES_DISABLE';
149
150         makemaker_args(dist => { PREOP => qq{\@if [ "\$\$$attr" != "true" ]; then}.
151                                           qq{ echo "You must set the ENV variable $attr to true,"; }.
152                                           ' echo "to avoid getting resource forks in your dist."; exit 255; fi' });
153         }
154 }
155
156 sub strip_author_only_build_requires {
157     my @build_requires_to_strip = @_;
158     Meta->{values}{build_requires} = [ grep {
159       my $ok = 1;
160       foreach my $module (@build_requires_to_strip) {
161         if ($_->[0] =~ /$module/) {
162           $ok = 0;
163           last;
164         }
165       }
166       $ok;
167     } @{Meta->{values}{build_requires}} ];
168 }
169
170 sub check_conflicts {
171     my %conflicts = @_;
172
173     my %conflicts_found;
174     for my $mod ( sort keys %conflicts ) {
175         eval "require($mod)";
176         next if $@;
177
178         my $installed = $mod->VERSION();
179         $conflicts_found{$mod} = $installed if ( $installed le $conflicts{$mod} );
180     }
181
182     return unless scalar keys %conflicts_found;
183
184     print <<"EOF";
185
186  WARNING:
187
188     This version of Catalyst conflicts with the versions of
189     some components you have installed.
190
191     You will need to upgrade these modules after installing
192     this version of Catalyst.
193
194     List of the conflicting components and their installed versions:
195
196 EOF
197
198     foreach my $mod (keys %conflicts_found) {
199         print sprintf("    %s => %s\n", $mod, $conflicts_found{$mod});
200     }
201     print "\n";
202
203     # More or less copied from Module::Build, via Moose
204     return if $ENV{PERL_MM_USE_DEFAULT};
205     return unless -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT));
206
207     sleep 4;
208 }