Merged with master and am ready to merge back
[dbsrgits/DBM-Deep.git] / Build.PL
index 3f769a1..e691c3f 100644 (file)
--- a/Build.PL
+++ b/Build.PL
@@ -1,9 +1,10 @@
-use Module::Build 0.28; # prepare_metadata
+use Module::Build 0.28; # for prepare_metadata
 
 use strict;
+use warnings FATAL => 'all';
 
 my $build = Module::Build->subclass(
-    class => 'Any::Thing',
+    class => "Module::Build::Custom",
     code => '
         sub prepare_metadata {
             my $node = shift->SUPER::prepare_metadata(@_);
@@ -11,7 +12,21 @@ my $build = Module::Build->subclass(
             $_->{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',
@@ -25,6 +40,7 @@ my $build = Module::Build->subclass(
         'File::Path'      => '0.01',
         'File::Temp'      => '0.01',
         'Pod::Usage'      => '1.3',
+        'Test::More'      => '0.88',
         'Test::Deep'      => '0.095',
         'Test::Warn'      => '0.08',
         'Test::More'      => '0.88', # done_testing
@@ -36,6 +52,49 @@ my $build = Module::Build->subclass(
         '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',
+            },
+        },
+    },
 );
 
+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;