Reorganize CDBICompat tests - centralize prereq checks in one place
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Optional / Dependencies.pm
index 37759b9..afd41f5 100644 (file)
@@ -3,7 +3,7 @@ package DBIx::Class::Optional::Dependencies;
 use warnings;
 use strict;
 
-use Carp;
+use Carp ();
 
 # NO EXTERNAL NON-5.8.1 CORE DEPENDENCIES EVER (e.g. C::A::G)
 # This module is to be loaded by Makefile.PM on a pristine system
@@ -22,7 +22,6 @@ my $moose_basic = {
 
 my $replicated = {
   %$moose_basic,
-  'Hash::Merge'                   => '0.12',
 };
 
 my $admin_basic = {
@@ -39,10 +38,66 @@ my $datetime_basic = {
 };
 
 my $id_shortener = {
-  'Math::BigInt'                  => '1.89',
+  'Math::BigInt'                  => '1.80',
   'Math::Base36'                  => '0.07',
 };
 
+my $rdbms_sqlite = {
+  'DBD::SQLite'                   => '0',
+};
+my $rdbms_pg = {
+  'DBD::Pg'                       => '0',
+};
+my $rdbms_mssql_odbc = {
+  'DBD::ODBC'                     => '0',
+};
+my $rdbms_mssql_sybase = {
+  'DBD::Sybase'                   => '0',
+};
+my $rdbms_mssql_ado = {
+  'DBD::ADO'                      => '0',
+};
+my $rdbms_msaccess_odbc = {
+  'DBD::ODBC'                     => '0',
+};
+my $rdbms_msaccess_ado = {
+  'DBD::ADO'                      => '0',
+};
+my $rdbms_mysql = {
+  'DBD::mysql'                    => '0',
+};
+my $rdbms_oracle = {
+  'DBD::Oracle'                   => '0',
+  %$id_shortener,
+};
+my $rdbms_ase = {
+  'DBD::Sybase'                   => '0',
+};
+my $rdbms_db2 = {
+  'DBD::DB2'                      => '0',
+};
+my $rdbms_db2_400 = {
+  'DBD::ODBC'                     => '0',
+};
+my $rdbms_informix = {
+  'DBD::Informix'                 => '0',
+};
+my $rdbms_sqlanywhere = {
+  'DBD::SQLAnywhere'              => '0',
+};
+my $rdbms_sqlanywhere_odbc = {
+  'DBD::ODBC'                     => '0',
+};
+my $rdbms_firebird = {
+  'DBD::Firebird'                 => '0',
+};
+my $rdbms_firebird_interbase = {
+  'DBD::InterBase'                => '0',
+};
+my $rdbms_firebird_odbc = {
+  'DBD::ODBC'                     => '0',
+};
+
 my $reqs = {
   dist => {
     #'Module::Install::Pod::Inherit' => '0.01',
@@ -101,6 +156,12 @@ my $reqs = {
     req => $id_shortener,
   },
 
+  test_component_accessor => {
+    req => {
+      'Class::Unload'             => '0.07',
+    },
+  },
+
   test_pod => {
     req => {
       'Test::Pod'                 => '1.41',
@@ -122,7 +183,7 @@ my $reqs = {
 
   test_eol => {
     req => {
-      'Test::EOL'                 => '0.6',
+      'Test::EOL'                 => '1.0',
     },
   },
 
@@ -170,20 +231,204 @@ my $reqs = {
 
   test_cdbicompat => {
     req => {
-      'DBIx::ContextualFetch'     => '0',
+      'Class::DBI' => 0,
       'Class::DBI::Plugin::DeepAbstractSearch' => '0',
-      'Class::Trigger'            => '0',
+      %$datetime_basic,
       'Time::Piece::MySQL'        => '0',
-      'Clone'                     => '0',
       'Date::Simple'              => '3.03',
     },
   },
 
+  # this is just for completeness as SQLite
+  # is a core dep of DBIC for testing
+  rdbms_sqlite => {
+    req => {
+      %$rdbms_sqlite,
+    },
+    pod => {
+      title => 'SQLite support',
+      desc => 'Modules required to connect to SQLite',
+    },
+  },
+
+  rdbms_pg => {
+    req => {
+      %$rdbms_pg,
+    },
+    pod => {
+      title => 'PostgreSQL support',
+      desc => 'Modules required to connect to PostgreSQL',
+    },
+  },
+
+  rdbms_mssql_odbc => {
+    req => {
+      %$rdbms_mssql_odbc,
+    },
+    pod => {
+      title => 'MSSQL support via DBD::ODBC',
+      desc => 'Modules required to connect to MSSQL via DBD::ODBC',
+    },
+  },
+
+  rdbms_mssql_sybase => {
+    req => {
+      %$rdbms_mssql_sybase,
+    },
+    pod => {
+      title => 'MSSQL support via DBD::Sybase',
+      desc => 'Modules required to connect to MSSQL via DBD::Sybase',
+    },
+  },
+
+  rdbms_mssql_ado => {
+    req => {
+      %$rdbms_mssql_ado,
+    },
+    pod => {
+      title => 'MSSQL support via DBD::ADO (Windows only)',
+      desc => 'Modules required to connect to MSSQL via DBD::ADO. This particular DBD is available on Windows only',
+    },
+  },
+
+  rdbms_msaccess_odbc => {
+    req => {
+      %$rdbms_msaccess_odbc,
+    },
+    pod => {
+      title => 'MS Access support via DBD::ODBC',
+      desc => 'Modules required to connect to MS Access via DBD::ODBC',
+    },
+  },
+
+  rdbms_msaccess_ado => {
+    req => {
+      %$rdbms_msaccess_ado,
+    },
+    pod => {
+      title => 'MS Access support via DBD::ADO (Windows only)',
+      desc => 'Modules required to connect to MS Access via DBD::ADO. This particular DBD is available on Windows only',
+    },
+  },
+
+  rdbms_mysql => {
+    req => {
+      %$rdbms_mysql,
+    },
+    pod => {
+      title => 'MySQL support',
+      desc => 'Modules required to connect to MySQL',
+    },
+  },
+
+  rdbms_oracle => {
+    req => {
+      %$rdbms_oracle,
+    },
+    pod => {
+      title => 'Oracle support',
+      desc => 'Modules required to connect to Oracle',
+    },
+  },
+
+  rdbms_ase => {
+    req => {
+      %$rdbms_ase,
+    },
+    pod => {
+      title => 'Sybase ASE support',
+      desc => 'Modules required to connect to Sybase ASE',
+    },
+  },
+
+  rdbms_db2 => {
+    req => {
+      %$rdbms_db2,
+    },
+    pod => {
+      title => 'DB2 support',
+      desc => 'Modules required to connect to DB2',
+    },
+  },
+
+  rdbms_db2_400 => {
+    req => {
+      %$rdbms_db2_400,
+    },
+    pod => {
+      title => 'DB2 on AS/400 support',
+      desc => 'Modules required to connect to DB2 on AS/400',
+    },
+  },
+
+  rdbms_informix => {
+    req => {
+      %$rdbms_informix,
+    },
+    pod => {
+      title => 'Informix support',
+      desc => 'Modules required to connect to Informix',
+    },
+  },
+
+  rdbms_sqlanywhere => {
+    req => {
+      %$rdbms_sqlanywhere,
+    },
+    pod => {
+      title => 'SQLAnywhere support',
+      desc => 'Modules required to connect to SQLAnywhere',
+    },
+  },
+
+  rdbms_sqlanywhere_odbc => {
+    req => {
+      %$rdbms_sqlanywhere_odbc,
+    },
+    pod => {
+      title => 'SQLAnywhere support via DBD::ODBC',
+      desc => 'Modules required to connect to SQLAnywhere via DBD::ODBC',
+    },
+  },
+
+  rdbms_firebird => {
+    req => {
+      %$rdbms_firebird,
+    },
+    pod => {
+      title => 'Firebird support',
+      desc => 'Modules required to connect to Firebird',
+    },
+  },
+
+  rdbms_firebird_interbase => {
+    req => {
+      %$rdbms_firebird_interbase,
+    },
+    pod => {
+      title => 'Firebird support via DBD::InterBase',
+      desc => 'Modules required to connect to Firebird via DBD::InterBase',
+    },
+  },
+
+  rdbms_firebird_odbc => {
+    req => {
+      %$rdbms_firebird_odbc,
+    },
+    pod => {
+      title => 'Firebird support via DBD::ODBC',
+      desc => 'Modules required to connect to Firebird via DBD::ODBC',
+    },
+  },
+
+# the order does matter because the rdbms support group might require
+# a different version that the test group
   test_rdbms_pg => {
     req => {
       $ENV{DBICTEST_PG_DSN}
         ? (
-          'Sys::SigAction'        => '0',
+          %$rdbms_pg,
+          ($^O ne 'MSWin32' ? ('Sys::SigAction' => '0') : ()),
           'DBD::Pg'               => '2.009002',
         ) : ()
     },
@@ -193,7 +438,16 @@ my $reqs = {
     req => {
       $ENV{DBICTEST_MSSQL_ODBC_DSN}
         ? (
-          'DBD::ODBC'             => '0',
+          %$rdbms_mssql_odbc,
+        ) : ()
+    },
+  },
+
+  test_rdbms_mssql_ado => {
+    req => {
+      $ENV{DBICTEST_MSSQL_ADO_DSN}
+        ? (
+          %$rdbms_mssql_ado,
         ) : ()
     },
   },
@@ -202,7 +456,29 @@ my $reqs = {
     req => {
       $ENV{DBICTEST_MSSQL_DSN}
         ? (
-          'DBD::Sybase'           => '0',
+          %$rdbms_mssql_sybase,
+        ) : ()
+    },
+  },
+
+  test_rdbms_msaccess_odbc => {
+    req => {
+      $ENV{DBICTEST_MSACCESS_ODBC_DSN}
+        ? (
+          %$rdbms_msaccess_odbc,
+          %$datetime_basic,
+          'Data::GUID' => '0',
+        ) : ()
+    },
+  },
+
+  test_rdbms_msaccess_ado => {
+    req => {
+      $ENV{DBICTEST_MSACCESS_ADO_DSN}
+        ? (
+          %$rdbms_msaccess_ado,
+          %$datetime_basic,
+          'Data::GUID' => 0,
         ) : ()
     },
   },
@@ -211,7 +487,7 @@ my $reqs = {
     req => {
       $ENV{DBICTEST_MYSQL_DSN}
         ? (
-          'DBD::mysql'            => '0',
+          %$rdbms_mysql,
         ) : ()
     },
   },
@@ -220,7 +496,7 @@ my $reqs = {
     req => {
       $ENV{DBICTEST_ORA_DSN}
         ? (
-          %$id_shortener,
+          %$rdbms_oracle,
           'DateTime::Format::Oracle' => '0',
           'DBD::Oracle'              => '1.24',
         ) : ()
@@ -231,7 +507,7 @@ my $reqs = {
     req => {
       $ENV{DBICTEST_SYBASE_DSN}
         ? (
-          'DateTime::Format::Sybase' => 0,
+          %$rdbms_ase,
         ) : ()
     },
   },
@@ -240,7 +516,70 @@ my $reqs = {
     req => {
       $ENV{DBICTEST_DB2_DSN}
         ? (
-          'DBD::DB2' => 0,
+          %$rdbms_db2,
+        ) : ()
+    },
+  },
+
+  test_rdbms_db2_400 => {
+    req => {
+      $ENV{DBICTEST_DB2_400_DSN}
+        ? (
+          %$rdbms_db2_400,
+        ) : ()
+    },
+  },
+
+  test_rdbms_informix => {
+    req => {
+      $ENV{DBICTEST_INFORMIX_DSN}
+        ? (
+          %$rdbms_informix,
+        ) : ()
+    },
+  },
+
+  test_rdbms_sqlanywhere => {
+    req => {
+      $ENV{DBICTEST_SQLANYWHERE_DSN}
+        ? (
+          %$rdbms_sqlanywhere,
+        ) : ()
+    },
+  },
+
+  test_rdbms_sqlanywhere_odbc => {
+    req => {
+      $ENV{DBICTEST_SQLANYWHERE_ODBC_DSN}
+        ? (
+          %$rdbms_sqlanywhere_odbc,
+        ) : ()
+    },
+  },
+
+  test_rdbms_firebird => {
+    req => {
+      $ENV{DBICTEST_FIREBIRD_DSN}
+        ? (
+          %$rdbms_firebird,
+        ) : ()
+    },
+  },
+
+  test_rdbms_firebird_interbase => {
+    req => {
+      $ENV{DBICTEST_FIREBIRD_INTERBASE_DSN}
+        ? (
+          %$rdbms_firebird_interbase,
+        ) : ()
+    },
+  },
+
+  test_rdbms_firebird_odbc => {
+    req => {
+      $ENV{DBICTEST_FIREBIRD_ODBC_DSN}
+        ? (
+          %$rdbms_firebird_odbc,
         ) : ()
     },
   },
@@ -260,11 +599,11 @@ my $reqs = {
 sub req_list_for {
   my ($class, $group) = @_;
 
-  croak "req_list_for() expects a requirement group name"
+  Carp::croak "req_list_for() expects a requirement group name"
     unless $group;
 
   my $deps = $reqs->{$group}{req}
-    or croak "Requirement group '$group' does not exist";
+    or Carp::croak "Requirement group '$group' does not exist";
 
   return { %$deps };
 }
@@ -274,7 +613,7 @@ our %req_availability_cache;
 sub req_ok_for {
   my ($class, $group) = @_;
 
-  croak "req_ok_for() expects a requirement group name"
+  Carp::croak "req_ok_for() expects a requirement group name"
     unless $group;
 
   return $class->_check_deps($group)->{status};
@@ -283,7 +622,7 @@ sub req_ok_for {
 sub req_missing_for {
   my ($class, $group) = @_;
 
-  croak "req_missing_for() expects a requirement group name"
+  Carp::croak "req_missing_for() expects a requirement group name"
     unless $group;
 
   return $class->_check_deps($group)->{missing};
@@ -292,7 +631,7 @@ sub req_missing_for {
 sub req_errorlist_for {
   my ($class, $group) = @_;
 
-  croak "req_errorlist_for() expects a requirement group name"
+  Carp::croak "req_errorlist_for() expects a requirement group name"
     unless $group;
 
   return $class->_check_deps($group)->{errorlist};
@@ -391,7 +730,7 @@ Somewhere in your build-file (e.g. L<Module::Install>'s Makefile.PL):
 
   require $class;
 
-  my \$deploy_deps = $class->req_list_for ('deploy');
+  my \$deploy_deps = $class->req_list_for('deploy');
 
   for (keys %\$deploy_deps) {
     requires \$_ => \$deploy_deps->{\$_};
@@ -510,7 +849,7 @@ EOD
     'You may distribute this code under the same terms as Perl itself',
   );
 
-  open (my $fh, '>', $podfn) or croak "Unable to write to $podfn: $!";
+  open (my $fh, '>', $podfn) or Carp::croak "Unable to write to $podfn: $!";
   print $fh join ("\n\n", @chunks);
   close ($fh);
 }