Optionally update conflicting modules by adding them to requires. This is disabled...
[catagits/Catalyst-Runtime.git] / Makefile.PL
CommitLineData
c55f01aa 1use inc::Module::Install 0.64;
022d1311 2
2f381252 3perl_version '5.008001';
0ba80bce 4
341d40d1 5name 'Catalyst-Runtime';
6all_from 'lib/Catalyst/Runtime.pm';
24b3262a 7
64b2a0de 8requires 'namespace::clean';
d134bcca 9requires 'Scope::Upper' => '0.06';
0a0c74aa 10requires 'MooseX::Emulate::Class::Accessor::Fast' => '0.00801';
6597dbcb 11requires 'Moose' => '0.73';
93704c74 12requires 'MooseX::MethodAttributes::Inheritable' => '0.06';
9ce44430 13requires 'Carp';
269408a4 14requires 'Class::C3::Adopt::NEXT' => '0.07';
46435d36 15requires 'Class::MOP' => '0.79';
fa32ac82 16requires 'CGI::Simple::Cookie';
f63c03e4 17requires 'Data::Dump';
24b3262a 18requires 'File::Modified';
19requires 'HTML::Entities';
2f381252 20requires 'HTTP::Body' => '1.04'; # makes uploadtmp work
1e514a51 21requires 'HTTP::Headers' => '1.64';
24b3262a 22requires 'HTTP::Request';
23requires 'HTTP::Response';
ee3c41e3 24requires 'HTTP::Request::AsCGI' => '0.5';
24b3262a 25requires 'LWP::UserAgent';
d8e0de58 26requires 'Module::Pluggable' => '3.01';
1e514a51 27requires 'Path::Class' => '0.09';
24b3262a 28requires 'Scalar::Util';
64edd785 29requires 'Sub::Exporter';
1e514a51 30requires 'Text::SimpleTable' => '0.03';
24b3262a 31requires 'Time::HiRes';
1e514a51 32requires 'Tree::Simple' => '1.15';
24b3262a 33requires 'Tree::Simple::Visitor::FindByPath';
1e514a51 34requires 'URI' => '1.35';
ea0e58d9 35requires 'Text::Balanced'; # core in 5.8.x but mentioned for completeness
6f1f968a 36requires 'MRO::Compat';
a9835938 37
65b708a6 38recommends 'B::Hooks::OP::Check::StashChange';
39
1a667b7c 40test_requires 'Class::Data::Inheritable';
647a251f 41test_requires 'Test::MockObject';
1a667b7c 42
1cdcbcf5 43# NOTE - This is the version number which the user must upgrade to to be ok,
44my %conflicts = (
45 'Catalyst::Plugin::ConfigLoader' => '0.23', # Older versions work but
46 # throw Data::Visitor warns
47 'Catalyst::Devel' => '0.10',
48 'Catalyst::Plugin::SmartURI' => '0.030',
49 'CatalystX::CRUD' => '0.38',
50 'Catalyst::Action::RenderView' => '0.08',
51 'Catalyst::Plugin::DebugCookie' => '0.999003',
52 'Catalyst::Plugin::Authentication' => '0.100092',
53 'CatalystX::Imports' => '0.04',
54 'Catalyst::Plugin::HashedCookies' => '1.04',
55 'Catalyst::Action::REST' => '0.68',
56);
57check_conflicts(%conflicts);
58
c102399c 59# Run aggregate tests if AGGREGATE_TESTS environment = 1, but not if it = 0
60# Otherwise default to using Test::Aggregate if installed, but not requiring it.
bf6d41be 61if ( ( exists $ENV{AGGREGATE_TESTS} && !$ENV{AGGREGATE_TESTS})
c70c5546 62 || (!exists $ENV{AGGREGATE_TESTS} && !can_use('Test::Aggregate', '0.34_01'))) {
bf6d41be 63 tests join q{ },
64 grep { $_ ne 't/aggregate.t' }
65 map { glob } qw[t/*.t t/aggregate/*.t];
66}
a24c0135 67else {
68 test_requires('Test::Aggregate', '0.34_01');
69}
621f279b 70my @force_build_requires_if_author = qw(
0a0c74aa 71 Test::NoTabs
72 Test::Pod
73 Test::Pod::Coverage
621f279b 74 Pod::Coverage
75);
76
77if ($Module::Install::AUTHOR) {
c102399c 78 foreach my $module (@force_build_requires_if_author) {
79 build_requires $module;
80 }
81 darwin_check_no_resource_forks();
de925c79 82}
83
24b3262a 84install_script glob('script/*.pl');
b6395bce 85auto_install;
24b3262a 86WriteAll;
614f3ad6 87
621f279b 88if ($Module::Install::AUTHOR) {
89
90 # Strip out the author only build_requires from META.yml
91 # Need to do this _after_ WriteAll else it looses track of them
1cdcbcf5 92 strip_build_requires(@force_build_requires_if_author);
93
94 # Strip out any conflicts, so that even if the author has a conflicting
95 # module installed, we don't end up with META.fail
96 strip_requires(keys %conflicts);
c102399c 97
98 Meta->{values}{resources} = [
99 [ 'MailingList' => 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst' ],
100 [ 'IRC' => 'irc://irc.perl.org/#catalyst' ],
101 [ 'license', => 'http://dev.perl.org/licenses/' ],
102 [ 'homepage', => 'http://dev.catalyst.perl.org/'],
103 [ 'repository', => 'http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/' ],
621f279b 104 ];
105
106 Meta->write;
107}
c102399c 108
614f3ad6 109print <<"EOF";
110
111 Important:
a5b5152b 112
0187a79d 113 This library is for running Catalyst applications.
114
341d40d1 115 For development and use of catalyst.pl and myapp_create.pl, make sure
116 you also install the development tools package Catalyst::Devel.
f63c03e4 117
6bc14aef 118 perl -MCPANPLUS -e 'install Catalyst::Devel' # or
119 perl -MCPAN -e 'install Catalyst::Devel'
120
ac5c933b 121 To get some commonly used plugins, as well as the TT view and DBIC
6bc14aef 122 model, install Task::Catalyst in the same way.
a5b5152b 123
a5b5152b 124 Have fun!
614f3ad6 125EOF
64d96919 126
c102399c 127# End of script, helper functions below.
128
129sub darwin_check_no_resource_forks {
130 if ($^O eq 'darwin') {
131 my $osx_ver = `/usr/bin/sw_vers -productVersion`;
132 chomp $osx_ver;
133
134 # TAR on 10.4 wants COPY_EXTENDED_ATTRIBUTES_DISABLE
135 # On 10.5 (Leopard) it wants COPYFILE_DISABLE
136 my $attr = $osx_ver eq '10.5' ? 'COPYFILE_DISABLE' : 'COPY_EXTENDED_ATTRIBUTES_DISABLE';
137
138 makemaker_args(dist => { PREOP => qq{\@if [ "\$\$$attr" != "true" ]; then}.
139 qq{ echo "You must set the ENV variable $attr to true,"; }.
140 ' echo "to avoid getting resource forks in your dist."; exit 255; fi' });
141 }
142}
143
1cdcbcf5 144sub strip_build_requires {
145 _strip_a_requires('build_requires', @_);
146}
147sub strip_requires {
148 _strip_a_requires('requires', @_);
149}
150sub _strip_a_requires {
151 my ($type, @to_strip) = @_;
152 Meta->{values}{$type} = [ grep {
c102399c 153 my $ok = 1;
1cdcbcf5 154 foreach my $module (@to_strip) {
c102399c 155 if ($_->[0] =~ /$module/) {
156 $ok = 0;
157 last;
158 }
159 }
160 $ok;
1cdcbcf5 161 } @{Meta->{values}{$type}} ];
c102399c 162}
64d96919 163
64d96919 164sub check_conflicts {
c102399c 165 my %conflicts = @_;
166
167 my %conflicts_found;
64d96919 168 for my $mod ( sort keys %conflicts ) {
dc0e73a3 169 eval "require($mod)";
64d96919 170 next if $@;
171
172 my $installed = $mod->VERSION();
1cdcbcf5 173 $conflicts_found{$mod} = $installed
174 if ( $installed lt $conflicts{$mod} );
c102399c 175 }
176
177 return unless scalar keys %conflicts_found;
178
179 print <<"EOF";
64d96919 180
c102399c 181 WARNING:
64d96919 182
c102399c 183 This version of Catalyst conflicts with the versions of
184 some components you have installed.
64d96919 185
c102399c 186 You will need to upgrade these modules after installing
64d96919 187 this version of Catalyst.
c102399c 188
189 List of the conflicting components and their installed versions:
64d96919 190
191EOF
192
c102399c 193 foreach my $mod (keys %conflicts_found) {
194 print sprintf(" %s => %s\n", $mod, $conflicts_found{$mod});
64d96919 195 }
1cdcbcf5 196 print "\n\n";
197 return unless prompt("Would you like to upgrade these modules as part of this install?", 'N') =~ /Y/i;
64d96919 198
1cdcbcf5 199 foreach my $mod (keys %conflicts_found) {
200 requires($mod, $conflicts{$mod})
201 if prompt("Install $mod?", 'Y') =~ /Y/i;
202 }
64d96919 203}