RT58184: Depends on File::Path 2.06_05 (or so)
[dbsrgits/DBIx-Class.git] / Makefile.PL
CommitLineData
f90896ae 1use inc::Module::Install 0.97;
fe650234 2use strict;
3use warnings;
76607ac8 4use POSIX ();
fe650234 5
55087b99 6use 5.008001;
ce4c07df 7
8057ed01 8use FindBin;
9use lib "$FindBin::Bin/lib";
93c50889 10
97f9f16e 11# adjust ENV for $AUTHOR system() calls
12use Config;
13$ENV{PERL5LIB} = join ($Config{path_sep}, @INC);
14
0424d17a 15use Getopt::Long qw/:config gnu_getopt bundling_override no_ignore_case pass_through/;
16my $args = {
17 skip_author_deps => undef,
18};
19GetOptions ($args, 'skip_author_deps');
20if (@ARGV) {
21 warn "\nIgnoring unrecognized option(s): @ARGV\n\n";
22}
97f9f16e 23
4b5544ad 24###
25### DO NOT ADD OPTIONAL DEPENDENCIES HERE, EVEN AS recommends()
26### All of them should go to DBIx::Class::Optional::Dependencies
27###
28
ce4c07df 29name 'DBIx-Class';
b50d0dd3 30perl_version '5.008001';
8e0f16f1 31all_from 'lib/DBIx/Class.pm';
ce4c07df 32
8057ed01 33my $build_requires = {
30da8374 34 'DBD::SQLite' => '1.25',
8057ed01 35};
36
37my $test_requires = {
30da8374 38 'File::Temp' => '0.22',
39 'Test::Builder' => '0.33',
30da8374 40 'Test::Exception' => '0',
41 'Test::More' => '0.92',
42 'Test::Warn' => '0.21',
8057ed01 43};
44
45my $runtime_requires = {
8057ed01 46 'Carp::Clan' => '6.0',
b182d87b 47 'Class::Accessor::Grouped' => '0.09003',
8057ed01 48 'Class::C3::Componentised' => '1.0005',
49 'Class::Inspector' => '1.24',
50 'Data::Page' => '2.00',
51 'DBI' => '1.609',
c1fdb460 52 'File::Path' => '2.07',
8057ed01 53 'MRO::Compat' => '0.09',
54 'Module::Find' => '0.06',
f4d7449c 55 'Path::Class' => '0.18',
887d8da0 56 'SQL::Abstract' => '1.67',
8057ed01 57 'SQL::Abstract::Limit' => '0.13',
58 'Sub::Name' => '0.04',
59 'Data::Dumper::Concise' => '1.000',
b7b18f32 60 'Scope::Guard' => '0.03',
61 'Context::Preserve' => '0.01',
20674fcd 62 'Try::Tiny' => '0.04',
ecb68746 63 'namespace::clean' => '0.14',
8057ed01 64};
65
66# this is so we can order requires alphabetically
67# copies are needed for author requires injection
68my $reqs = {
69 build_requires => { %$build_requires },
70 requires => { %$runtime_requires },
71 test_requires => { %$test_requires },
72};
3a4251e2 73
8057ed01 74
92f8f62a 75# require extra modules for testing if we're in a checkout
0424d17a 76my $optdep_msg;
92f8f62a 77if ($Module::Install::AUTHOR) {
0424d17a 78 if ($args->{skip_author_deps}) {
79 $optdep_msg = <<'EOW';
80
81******************************************************************************
82******************************************************************************
83*** ***
84*** IGNORING AUTHOR MODE: no optional test dependencies will be forced. ***
85*** ***
86*** If you are using this checkout with the intention of submitting a DBIC ***
87*** patch, you are *STRONGLY ENCOURAGED* to install all dependencies, so ***
88*** that every possible unit-test will run. ***
89*** ***
90******************************************************************************
91******************************************************************************
92
93EOW
94 }
95 else {
96 $optdep_msg = <<'EOW';
97
8057ed01 98******************************************************************************
99******************************************************************************
100*** ***
101*** AUTHOR MODE: all optional test dependencies converted to hard requires ***
0424d17a 102*** ( to disabled re-run Makefile.PL with --skip_author_deps ) ***
8057ed01 103*** ***
104******************************************************************************
105******************************************************************************
106
107EOW
108
0424d17a 109 require DBIx::Class::Optional::Dependencies;
110 $reqs->{test_requires} = {
111 %{$reqs->{test_requires}},
112 map { %$_ } (values %{DBIx::Class::Optional::Dependencies->req_group_list}),
113 };
114 }
8057ed01 115}
116
117# compose final req list, for alphabetical ordering
118my %final_req;
119for my $rtype (keys %$reqs) {
120 for my $mod (keys %{$reqs->{$rtype}} ) {
121
122 # sanity check req duplications
123 if ($final_req{$mod}) {
b718fd0a 124 die "$mod specified as both a '$rtype' and a '$final_req{$mod}[0]'\n";
8057ed01 125 }
126
127 $final_req{$mod} = [ $rtype, $reqs->{$rtype}{$mod}||0 ],
128 }
129}
130
131# actual require
132for my $mod (sort keys %final_req) {
133 my ($rtype, $ver) = @{$final_req{$mod}};
134 no strict 'refs';
135 $rtype->($mod, $ver);
136}
a410299d 137
0424d17a 138# output twice since the deplist is > 70 lines
f90896ae 139warn $optdep_msg if $Module::Install::AUTHOR;
92f8f62a 140auto_install();
f90896ae 141warn $optdep_msg if $Module::Install::AUTHOR;
92f8f62a 142
143# re-create various autogenerated documentation bits
144if ($Module::Install::AUTHOR) {
145
146 print "Regenerating README\n";
147 system('pod2text lib/DBIx/Class.pm > README');
148
149 if (-f 'MANIFEST') {
150 print "Removing MANIFEST\n";
151 unlink 'MANIFEST';
152 }
153
92f8f62a 154 print "Regenerating Optional/Dependencies.pod\n";
155 require DBIx::Class::Optional::Dependencies;
156 DBIx::Class::Optional::Dependencies->_gen_pod;
157
158 # FIXME Disabled due to unsolved issues, ask theorbtwo
159 # require Module::Install::Pod::Inherit;
160 # PodInherit();
161}
162
f90896ae 163
7eaae8db 164tests_recursive (qw|
165 t
166|);
167
f90896ae 168# temporary(?) until I get around to fix M::I wrt xt/
169# needs Module::Install::AuthorTests
c1fdb460 170eval {
7f2c37b8 171 recursive_author_tests (qw/xt/);
172 1;
173} || do {
174 my $err = $@;
175 eval { require Module::Install::AuthorTests }
176 || die "\nYou need Module::Install::AuthorTests installed to run this Makefile.PL:\n\n$@\n";
177 die $@;
178};
f90896ae 179
180
a410299d 181install_script (qw|
182 script/dbicadmin
183|);
184
7eaae8db 185
186### Mangle makefile - read the comments for more info
187#
188postamble <<"EOP";
189
190# This will add an extra dep-spec for the distdir target,
191# which `make` will fold together in a first-come first-serve
192# fashion. What we do here is essentially adding extra
193# commands to execute once the distdir is assembled (via
194# create_distdir), but before control is returned to a higher
195# calling rule.
196distdir : dbicadmin_pod_inject
197
198# The pod self-injection code is in fact a hidden option in
199# dbicadmin itself
200dbicadmin_pod_inject :
201\tcd \$(DISTVNAME) && \$(ABSPERL) -Ilib script/dbicadmin --selfinject-pod
202
203# Regenerate manifest before running create_distdir.
204create_distdir : manifest
205
206EOP
207
f90896ae 208homepage 'http://www.dbix-class.org/';
a410299d 209resources 'IRC' => 'irc://irc.perl.org/#dbix-class';
210resources 'license' => 'http://dev.perl.org/licenses/';
aeb669b8 211resources 'repository' => 'git://git.shadowcat.co.uk/dbsrgits/DBIx-Class.git';
a410299d 212resources 'MailingList' => 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class';
213
974fe5e8 214# Deprecated/internal modules need no exposure
215no_index directory => $_ for (qw|
bc6f129c 216 lib/DBIx/Class/Admin
974fe5e8 217 lib/DBIx/Class/SQLAHacks
281738a4 218 lib/DBIx/Class/PK/Auto
bc6f129c 219 lib/DBIx/Class/CDBICompat
974fe5e8 220|);
221no_index package => $_ for (qw/
974fe5e8 222 DBIx::Class::SQLAHacks DBIx::Class::Storage::DBIHacks
223/);
a410299d 224
269228af 225
713cc98e 226WriteAll();
09d46657 227
8057ed01 228
80ff5ae0 229# Re-write META.yml to _exclude_ all forced requires (we do not want to ship this)
0424d17a 230if ($Module::Install::AUTHOR && ! $args->{skip_author_deps} ) {
713cc98e 231
8057ed01 232 # FIXME test_requires is not yet part of META
233 my %original_build_requires = ( %$build_requires, %$test_requires );
234
235 print "Regenerating META with author requires excluded\n";
281738a4 236 Meta->{values}{build_requires} = [ grep
8057ed01 237 { exists $original_build_requires{$_->[0]} }
238 ( @{Meta->{values}{build_requires}} )
80ff5ae0 239 ];
713cc98e 240
713cc98e 241 Meta->write;
09d46657 242}