[Bast-commits] r5987 - DBIx-Class/0.08/trunk
ribasushi at dev.catalyst.perl.org
ribasushi at dev.catalyst.perl.org
Mon Apr 27 08:03:59 GMT 2009
Author: ribasushi
Date: 2009-04-27 09:03:58 +0100 (Mon, 27 Apr 2009)
New Revision: 5987
Modified:
DBIx-Class/0.08/trunk/Makefile.PL
Log:
Refactor the (almost obsolete) DBD::SQLite check not to fork() within win32
Modified: DBIx-Class/0.08/trunk/Makefile.PL
===================================================================
--- DBIx-Class/0.08/trunk/Makefile.PL 2009-04-25 09:59:28 UTC (rev 5986)
+++ DBIx-Class/0.08/trunk/Makefile.PL 2009-04-27 08:03:58 UTC (rev 5987)
@@ -104,59 +104,57 @@
auto_install;
# Have all prerequisites, check DBD::SQLite sanity
-if (! $ENV{DBICTEST_NO_SQLITE_CHECK} ) {
+_check_sqlite() if (! $ENV{DBICTEST_NO_SQLITE_CHECK} );
- my $pid = fork();
- if (not defined $pid) {
- die "Unable to fork(): $!";
+WriteAll();
+
+if ($Module::Install::AUTHOR) {
+ # Need to do this _after_ WriteAll else it loses track of them
+ Meta->{values}{build_requires} = [ grep {
+ my $ok = 1;
+ foreach my $module (keys %force_requires_if_author) {
+ if ($_->[0] =~ /$module/) {
+ $ok = 0;
+ last;
+ }
+ }
+ $ok;
+ } @{Meta->{values}{build_requires}} ];
+
+ my @scalar_keys = Module::Install::Metadata::Meta_TupleKeys();
+ my $cr = Module::Install::Metadata->can("Meta_TupleKeys");
+ {
+ no warnings 'redefine';
+ *Module::Install::Metadata::Meta_TupleKeys = sub {
+ return $cr->(@_), 'resources';
+ };
}
- elsif (! $pid) {
+ Meta->{values}{resources} = [
+ [ 'MailingList', 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class' ],
+ [ 'IRC', 'irc://irc.perl.org/#dbix-class' ],
+ [ 'license', 'http://dev.perl.org/licenses/' ],
+ [ 'repository', 'http://dev.catalyst.perl.org/svnweb/bast/browse/DBIx-Class/' ],
+ ];
+ Meta->write;
+}
- # Win32 does not have real fork()s so a segfault will bring
- # everything down. Warn about it.
- if ($^O eq 'MSWin32') {
- print <<'EOW';
-######################################################################
-# #
-# A short stress-testing of DBD::SQLite will follow. If you have a #
-# buggy library this might very well be the last text you will see #
-# before the installation silently terminates. If this happens it #
-# would mean that you are running a buggy version of DBD::SQLite #
-# known to randomly segfault on errors. Even if you have the latest #
-# CPAN module version, the system sqlite3 dynamic library might have #
-# been compiled against an older buggy sqlite3 dev library (oddly #
-# DBD::SQLite will prefer the system library against the one bundled #
-# with it). You are strongly advised to resolve this issue before #
-# proceeding. #
-# #
-# If this happens to you (this text is the last thing you see), and #
-# you just want to install this module without worrying about the #
-# tests (which will almost certainly fail) - set the environment #
-# variable DBICTEST_NO_SQLITE_CHECK to a true value and try again. #
-# #
-######################################################################
+# This is legacy code. Latest DBD::SQLite developments fixed all known bugs
+# in this area. Remove before some arbitrary next version
+sub _check_sqlite {
-EOW
- }
+ # Win32 does not have real fork()s so a segfault will bring
+ # everything down. Warn about it below, and don't try fork()
+ if ($^O ne 'MSWin32') {
- require DBI;
- for (1 .. 100) {
- my $dbh;
- $dbh = DBI->connect ('dbi:SQLite::memory:', undef, undef, {
- AutoCommit => 1,
- RaiseError => 0,
- PrintError => 0,
- })
- or die "Unable to connect to database: $@";
- $dbh->do ('CREATE TABLE name_with_no_columns'); # a subtle syntax error
- $dbh->do ('COMMIT'); # followed by commit
- $dbh->disconnect;
- }
-
- exit 0;
- }
- else {
+ my $pid = fork();
+ if (not defined $pid) {
+ die "Unable to fork(): $!";
+ }
+ elsif (! $pid) {
+ _torture_sqlite();
+ }
+ else {
eval {
local $SIG{ALRM} = sub { die "timeout\n" };
alarm 5;
@@ -167,7 +165,7 @@
my $sig = $? & 127;
-# make sure process actually dies
+ # make sure process actually dies
$exception && kill POSIX::SIGKILL(), $pid;
if ($exception || $sig == POSIX::SIGSEGV() || $sig == POSIX::SIGABRT()
@@ -193,40 +191,52 @@
);
exit 0 unless ($ans =~ /^y(es)?$/i);
}
+ }
}
-}
+ else { # the win32 version
-WriteAll();
+ print <<'EOW';
+######################################################################
+# #
+# A short stress-testing of DBD::SQLite will follow. If you have a #
+# buggy library this might very well be the last text you will see #
+# before the installation silently terminates. If this happens it #
+# would mean that you are running a buggy version of DBD::SQLite #
+# known to randomly segfault on errors. Even if you have the latest #
+# CPAN module version, the system sqlite3 dynamic library might have #
+# been compiled against an older buggy sqlite3 dev library (oddly #
+# DBD::SQLite will prefer the system library against the one bundled #
+# with it). You are strongly advised to resolve this issue before #
+# proceeding. #
+# #
+# If this happens to you (this text is the last thing you see), and #
+# you just want to install this module without worrying about the #
+# tests (which will almost certainly fail) - set the environment #
+# variable DBICTEST_NO_SQLITE_CHECK to a true value and try again. #
+# #
+######################################################################
+EOW
-if ($Module::Install::AUTHOR) {
- # Need to do this _after_ WriteAll else it loses track of them
- Meta->{values}{build_requires} = [ grep {
- my $ok = 1;
- foreach my $module (keys %force_requires_if_author) {
- if ($_->[0] =~ /$module/) {
- $ok = 0;
- last;
- }
- }
- $ok;
- } @{Meta->{values}{build_requires}} ];
+ _torture_sqlite();
+ }
+}
- my @scalar_keys = Module::Install::Metadata::Meta_TupleKeys();
- my $cr = Module::Install::Metadata->can("Meta_TupleKeys");
- {
- no warnings 'redefine';
- *Module::Install::Metadata::Meta_TupleKeys = sub {
- return $cr->(@_), 'resources';
- };
+sub _torture_sqlite {
+ require DBI;
+
+ for (1 .. 100) {
+ my $dbh = DBI->connect ('dbi:SQLite::memory:', undef, undef, {
+ AutoCommit => 1,
+ RaiseError => 0,
+ PrintError => 0,
+ }) or die "Unable to connect to database: $@";
+
+ $dbh->do ('CREATE TABLE name_with_no_columns'); # a subtle syntax error
+ $dbh->do ('COMMIT'); # followed by commit
+ $dbh->disconnect;
}
- Meta->{values}{resources} = [
- [ 'MailingList', 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class' ],
- [ 'IRC', 'irc://irc.perl.org/#dbix-class' ],
- [ 'license', 'http://dev.perl.org/licenses/' ],
- [ 'repository', 'http://dev.catalyst.perl.org/svnweb/bast/browse/DBIx-Class/' ],
- ];
- Meta->write;
+
+ exit 0;
}
-
More information about the Bast-commits
mailing list