Simplify unresolvable test by arcanez
[dbsrgits/DBIx-Class.git] / Makefile.PL
CommitLineData
0ee285f3 1use inc::Module::Install 0.79;
fe650234 2use strict;
3use warnings;
76607ac8 4use POSIX ();
fe650234 5
6use 5.006001; # delete this line if you want to send patches for earlier.
ce4c07df 7
8name 'DBIx-Class';
ce4c07df 9perl_version '5.006001';
8e0f16f1 10all_from 'lib/DBIx/Class.pm';
ce4c07df 11
0ee285f3 12# configure_requires so _check_sqlite() below can run
13# remove once test deprecated
14configure_requires 'DBD::SQLite';
15
2f8a12ff 16requires 'DBD::SQLite' => 1.25;
82fae370 17requires 'Data::Page' => 2.00;
a1600033 18requires 'SQL::Abstract' => 1.55;
82fae370 19requires 'SQL::Abstract::Limit' => 0.13;
624764ae 20requires 'Class::C3::Componentised' => 1.0005;
2f8a12ff 21requires 'Carp::Clan' => 6.0;
22requires 'DBI' => 1.605;
23requires 'Module::Find' => 0.06;
24requires 'Class::Inspector' => 1.24;
2d60be4d 25requires 'Class::Accessor::Grouped' => 0.08003;
2f8a12ff 26requires 'JSON::Any' => 1.18;
82fae370 27requires 'Scope::Guard' => 0.03;
2f8a12ff 28requires 'Path::Class' => 0.16;
82fae370 29requires 'Sub::Name' => 0.04;
0fdb7298 30requires 'MRO::Compat' => 0.09;
ce4c07df 31
2f8a12ff 32# Core
33requires 'List::Util' => 0;
34requires 'Scalar::Util' => 0;
35requires 'Storable' => 0;
36
ce4c07df 37# Perl 5.8.0 doesn't have utf8::is_utf8()
2f8a12ff 38requires 'Encode' => 0 if ($] <= 5.008000);
ce4c07df 39
2f8a12ff 40test_requires 'Test::More' => 0.82;
f947585b 41test_requires 'Test::Builder' => 0.33;
97aca715 42test_requires 'Test::Warn' => 0.11;
f947585b 43test_requires 'Test::Exception' => 0;
ce3b4eb9 44test_requires 'Test::Deep' => 0;
ce4c07df 45
82fae370 46recommends 'SQL::Translator' => 0.09004;
47
0ee285f3 48install_script (qw|
49 script/dbicadmin
50|);
ce4c07df 51
0ee285f3 52tests_recursive (qw|
53 t
54|);
ce4c07df 55
c96454c3 56# re-build README and require extra modules for testing if we're in a checkout
fe650234 57
82fae370 58my %force_requires_if_author = (
c96454c3 59 'Test::Pod::Coverage' => 1.04,
9ac2c0f8 60 'SQL::Translator' => 0.09004,
61
62 # CDBI-compat related
82fae370 63 'DBIx::ContextualFetch' => 0,
602fd807 64 'Class::DBI::Plugin::DeepAbstractSearch' => 0,
82fae370 65 'Class::Trigger' => 0,
97d61088 66 'Time::Piece::MySQL' => 0,
82fae370 67 'Clone' => 0,
97d61088 68 'Date::Simple' => 0,
9ac2c0f8 69
70 # t/52cycle.t
82fae370 71 'Test::Memory::Cycle' => 0,
9ac2c0f8 72
c96454c3 73 # t/60core.t
74 'DateTime::Format::MySQL' => 0,
75
9d2b098e 76 # t/72pg.t
77 $ENV{DBICTEST_PG_DSN}
78 ? ('Sys::SigAction'=> 0)
79 : ()
80 ,
81
9ac2c0f8 82 # t/93storage_replication.t
ee356d00 83 'Moose', => 0.77,
0ee285f3 84 'MooseX::AttributeHelpers' => 0.12,
9901aad7 85 'MooseX::Types', => 0.10,
86 'namespace::clean' => 0.11,
b88b85e7 87 'Hash::Merge', => 0.11,
c96454c3 88
89 # t/96_is_deteministic_value.t
90 'DateTime::Format::Strptime' => 0,
fe650234 91);
92
93if ($Module::Install::AUTHOR) {
94
82fae370 95 foreach my $module (keys %force_requires_if_author) {
6882de2b 96 build_requires ($module => $force_requires_if_author{$module});
fe650234 97 }
09d46657 98
1543db24 99 system('pod2text lib/DBIx/Class.pm > README');
ff132c6f 100}
101
102auto_provides;
103
d7fda552 104if ($Module::Install::AUTHOR) {
105 warn <<'EOW';
106******************************************************************************
107******************************************************************************
108*** ***
109*** AUTHOR MODE: all optional test dependencies converted to hard requires ***
110*** ***
111******************************************************************************
112******************************************************************************
113
114EOW
115}
3e110410 116auto_install;
117
e0b438fb 118# Have all prerequisites, check DBD::SQLite sanity
713cc98e 119_check_sqlite() if (! $ENV{DBICTEST_NO_SQLITE_CHECK} );
269228af 120
713cc98e 121WriteAll();
269228af 122
713cc98e 123if ($Module::Install::AUTHOR) {
124 # Need to do this _after_ WriteAll else it loses track of them
125 Meta->{values}{build_requires} = [ grep {
126 my $ok = 1;
127 foreach my $module (keys %force_requires_if_author) {
128 if ($_->[0] =~ /$module/) {
129 $ok = 0;
130 last;
131 }
132 }
133 $ok;
134 } @{Meta->{values}{build_requires}} ];
269228af 135
713cc98e 136 Meta->{values}{resources} = [
137 [ 'MailingList', 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class' ],
138 [ 'IRC', 'irc://irc.perl.org/#dbix-class' ],
139 [ 'license', 'http://dev.perl.org/licenses/' ],
140 [ 'repository', 'http://dev.catalyst.perl.org/svnweb/bast/browse/DBIx-Class/' ],
141 ];
142 Meta->write;
143}
269228af 144
269228af 145
713cc98e 146# This is legacy code. Latest DBD::SQLite developments fixed all known bugs
147# in this area. Remove before some arbitrary next version
148sub _check_sqlite {
e0b438fb 149
713cc98e 150 # Win32 does not have real fork()s so a segfault will bring
151 # everything down. Warn about it below, and don't try fork()
152 if ($^O ne 'MSWin32') {
153
154 my $pid = fork();
155 if (not defined $pid) {
156 die "Unable to fork(): $!";
157 }
158 elsif (! $pid) {
159 _torture_sqlite();
d1b53160 160 exit 0;
713cc98e 161 }
162 else {
76607ac8 163 eval {
164 local $SIG{ALRM} = sub { die "timeout\n" };
165 alarm 5;
166 wait();
167 alarm 0;
168 };
7a0e56cb 169 my $exception = $@;
170
e0b438fb 171 my $sig = $? & 127;
7a0e56cb 172
713cc98e 173 # make sure process actually dies
7a0e56cb 174 $exception && kill POSIX::SIGKILL(), $pid;
175
176 if ($exception || $sig == POSIX::SIGSEGV() || $sig == POSIX::SIGABRT()
3c086319 177 || $sig == 7) { # 7 == SIGBUS, haven't seen it but just in case
e0b438fb 178 warn (<<EOE);
179
3951a291 180############################### WARNING #################################
181# #
182# You are running a buggy version of DBD::SQLite known to randomly #
183# segfault on errors. Even if you have the latest CPAN module version, #
184# the sqlite3 dynamic library on this system might have been compiled #
185# against an older buggy sqlite3 dev library (oddly DBD::SQLite will #
186# prefer the system library against the one bundled with it). You are #
187# strongly advised to resolve this issue before proceeding. #
188# #
189#########################################################################
e0b438fb 190
191EOE
192 my $ans = prompt (
193 "The test suite of this module is almost certain to fail.\n"
194 . 'Do you really want to continue?',
195 'no',
196 );
a86fdee9 197
e0b438fb 198 exit 0 unless ($ans =~ /^y(es)?$/i);
199 }
713cc98e 200 }
e0b438fb 201 }
e0b438fb 202
713cc98e 203 else { # the win32 version
e0b438fb 204
713cc98e 205 print <<'EOW';
206######################################################################
207# #
208# A short stress-testing of DBD::SQLite will follow. If you have a #
209# buggy library this might very well be the last text you will see #
210# before the installation silently terminates. If this happens it #
211# would mean that you are running a buggy version of DBD::SQLite #
212# known to randomly segfault on errors. Even if you have the latest #
213# CPAN module version, the system sqlite3 dynamic library might have #
214# been compiled against an older buggy sqlite3 dev library (oddly #
215# DBD::SQLite will prefer the system library against the one bundled #
216# with it). You are strongly advised to resolve this issue before #
217# proceeding. #
218# #
219# If this happens to you (this text is the last thing you see), and #
220# you just want to install this module without worrying about the #
221# tests (which will almost certainly fail) - set the environment #
222# variable DBICTEST_NO_SQLITE_CHECK to a true value and try again. #
223# #
224######################################################################
09d46657 225
713cc98e 226EOW
09d46657 227
713cc98e 228 _torture_sqlite();
09d46657 229 }
09d46657 230}
9a3219ee 231
713cc98e 232sub _torture_sqlite {
233 require DBI;
234
235 for (1 .. 100) {
236 my $dbh = DBI->connect ('dbi:SQLite::memory:', undef, undef, {
237 AutoCommit => 1,
238 RaiseError => 0,
239 PrintError => 0,
240 }) or die "Unable to connect to database: $@";
241
242 $dbh->do ('CREATE TABLE name_with_no_columns'); # a subtle syntax error
243 $dbh->do ('COMMIT'); # followed by commit
244 $dbh->disconnect;
245 }
713cc98e 246}