Had to turn off caching, but I've merged everything from SPROUT's fixes
[dbsrgits/DBM-Deep.git] / Build.PL
index 5c23217..956bbc4 100644 (file)
--- a/Build.PL
+++ b/Build.PL
@@ -1,31 +1,99 @@
-use Module::Build;
+use Module::Build 0.28; # for prepare_metadata
 
 use strict;
+use warnings FATAL => 'all';
 
-my $build = Module::Build->new(
+my $build = Module::Build->subclass(
+    class => "Module::Build::Custom",
+    code => '
+        sub prepare_metadata {
+            my $node = shift->SUPER::prepare_metadata(@_);
+            my $ver = $node->{version};
+            $_->{version} = $ver for values %{$node->{provides}};
+            $node;
+        }
+
+        sub ACTION_test {
+            my $self = shift;
+            if ( $self->notes(\'TEST_MYSQL_DSN\') ) {
+                $ENV{$_} = $self->notes($_) for qw(
+                    TEST_MYSQL_DSN TEST_MYSQL_USER TEST_MYSQL_PASS
+                );
+            }
+            foreach my $name ( qw( LONG_TESTS TEST_SQLITE ) ) {
+                $ENV{$name} = 1 if $self->notes( $name );
+            }
+
+            $self->SUPER::ACTION_test( @_ );
+        }
+    ',
+)->new(
     module_name => 'DBM::Deep',
     license => 'perl',
     requires => {
-        perl           => '5.6.0',
-        'Digest::MD5'  => '1.00',
-        'Fcntl'        => '0.01',
-        'Scalar::Util' => '1.14',
-    },
-    optional => {
+        'perl'              => '5.006_000',
+        'Fcntl'             => '0.01',
+        'Scalar::Util'      => '1.14',
+        'Digest::MD5'       => '1.00',
     },
     build_requires => {
         'File::Path'      => '0.01',
         'File::Temp'      => '0.01',
-        'Test::Deep'      => '0.94',
-        'Test::More'      => '0.47',
+        'Pod::Usage'      => '1.3',
+        'Test::More'      => '0.88',
+        'Test::Deep'      => '0.095',
+        'Test::Warn'      => '0.08',
         'Test::Exception' => '0.21',
+        'IO::Scalar'      => '0.01',
     },
     create_makefile_pl => 'traditional',
     add_to_cleanup => [
-        'META.yml', '*.bak', '*.gz', 'Makefile.PL', 't/test*.db', 'cover_db'
+        'META.yml', '*.bak', '*.gz', 'Makefile.PL', 'cover_db',
     ],
     test_files => 't/??_*.t',
+    auto_features => {
+        sqlite_engine => {
+            description => 'DBI support via SQLite',
+            requires => {
+                'DBI'         => '1.5',
+                'DBD::SQLite' => '1.25',
+            },
+        },
+        mysql_engine => {
+            description => 'DBI support via MySQL',
+            requires => {
+                'DBI'        => '1.5',
+                'DBD::mysql' => '4.001',
+            },
+        },
+    },
 );
 
-$build->create_build_script;
+if ( $build->y_n( "Run the long-running tests", 'n' ) ) {
+    $build->notes( 'LONG_TESTS' => 1 );
+}
 
+if ( $build->features( 'sqlite_engine' ) ) {
+    if ( $build->y_n( "Run the tests against the DBI engine via SQLite?", 'n' ) ) {
+        $build->notes( 'TEST_SQLITE' => 1 );
+    }
+}
+
+if ( $build->features( 'mysql_engine' ) ) {
+    if ( $build->y_n( "Run the tests against the DBI engine via MySQL?", 'n' ) ) {
+        my ($dsn, $user, $pass) = ('') x 3;
+        $dsn = $build->prompt( "\tWhat is the full DSN (for example 'dbi:mysql:test')" );
+        if ( $dsn ) {
+            $user = $build->prompt( "\tWhat is the username?" );
+            if ( $user ) {
+                $pass = $build->prompt( "\tWhat is the password?" );
+            }
+        }
+
+        $build->notes( 'TEST_MYSQL_DSN'  => $dsn );
+        $build->notes( 'TEST_MYSQL_USER' => $user );
+        $build->notes( 'TEST_MYSQL_PASS' => $pass );
+    }
+}
+
+$build->create_build_script;