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