1 package DBIx::Class::Optional::Dependencies;
8 # NO EXTERNAL NON-5.8.1 CORE DEPENDENCIES EVER (e.g. C::A::G)
9 # This module is to be loaded by Makefile.PM on a pristine system
11 # POD is generated automatically by calling _gen_pod from the
12 # Makefile.PL in $AUTHOR mode
15 'JSON::Any' => '1.23',
20 'MooseX::Types' => '0.21',
21 'MooseX::Types::LoadableClass' => '0.011',
31 'MooseX::Types::Path::Class' => '0.05',
32 'MooseX::Types::JSON' => '0.02',
33 'namespace::autoclean' => '0.09',
39 'Getopt::Long::Descriptive' => '0.081',
40 'Text::CSV' => '1.16',
43 my $datetime_basic = {
45 'DateTime::Format::Strptime' => '1.2',
49 'Math::BigInt' => '1.80',
50 'Math::Base36' => '0.07',
59 my $rdbms_mssql_odbc = {
62 my $rdbms_mssql_sybase = {
65 my $rdbms_mssql_ado = {
68 my $rdbms_msaccess_odbc = {
71 my $rdbms_msaccess_ado = {
90 my $rdbms_informix = {
91 'DBD::Informix' => '0',
93 my $rdbms_sqlanywhere = {
94 'DBD::SQLAnywhere' => '0',
96 my $rdbms_sqlanywhere_odbc = {
99 my $rdbms_firebird = {
100 'DBD::Firebird' => '0',
102 my $rdbms_firebird_interbase = {
103 'DBD::InterBase' => '0',
105 my $rdbms_firebird_odbc = {
113 title => 'Storage::Replicated',
114 desc => 'Modules required for L<DBIx::Class::Storage::DBI::Replicated>',
121 'Test::Moose' => '0',
131 title => 'DBIx::Class::Admin',
132 desc => 'Modules required for the DBIx::Class administrative library',
141 title => 'dbicadmin',
142 desc => 'Modules required for the CLI DBIx::Class interface dbicadmin',
148 'SQL::Translator' => '0.11016',
151 title => 'Storage::DBI::deploy()',
152 desc => 'Modules required for L<DBIx::Class::Storage::DBI/deploy> and L<DBIx::Class::Storage::DBI/deployment_statements>',
157 req => $id_shortener,
160 test_component_accessor => {
162 'Class::Unload' => '0.07',
168 'Test::Pod' => '1.42',
172 test_podcoverage => {
174 'Test::Pod::Coverage' => '1.08',
175 'Pod::Coverage' => '0.20',
181 'Test::EOL' => '1.0',
182 'Test::NoTabs' => '0.9',
188 'Test::Strict' => '0.20',
192 test_prettydebug => {
196 test_admin_script => {
199 'JSON::Any' => '1.30',
202 'Cpanel::JSON::XS' => 0,
205 # for t/admin/10script.t
206 ? ('Win32::ShellQuote' => 0)
207 # DWIW does not compile (./configure even) on win32
208 : ('JSON::DWIW' => 0 )
215 'Test::Memory::Cycle' => '0',
216 'Devel::Cycle' => '1.10',
221 req => $datetime_basic,
229 'DateTime::Format::SQLite' => '0',
236 # t/inflate/datetime_mysql.t
237 # (doesn't need Mysql itself)
238 'DateTime::Format::MySQL' => '0',
245 # t/inflate/datetime_pg.t
246 # (doesn't need PG itself)
247 'DateTime::Format::Pg' => '0.16004',
253 'Class::DBI::Plugin::DeepAbstractSearch' => '0',
255 'Time::Piece::MySQL' => '0',
256 'Date::Simple' => '3.03',
260 # this is just for completeness as SQLite
261 # is a core dep of DBIC for testing
267 title => 'SQLite support',
268 desc => 'Modules required to connect to SQLite',
274 # when changing this list make sure to adjust xt/optional_deps.t
278 title => 'PostgreSQL support',
279 desc => 'Modules required to connect to PostgreSQL',
283 rdbms_mssql_odbc => {
288 title => 'MSSQL support via DBD::ODBC',
289 desc => 'Modules required to connect to MSSQL via DBD::ODBC',
293 rdbms_mssql_sybase => {
295 %$rdbms_mssql_sybase,
298 title => 'MSSQL support via DBD::Sybase',
299 desc => 'Modules required to connect to MSSQL via DBD::Sybase',
308 title => 'MSSQL support via DBD::ADO (Windows only)',
309 desc => 'Modules required to connect to MSSQL via DBD::ADO. This particular DBD is available on Windows only',
313 rdbms_msaccess_odbc => {
315 %$rdbms_msaccess_odbc,
318 title => 'MS Access support via DBD::ODBC',
319 desc => 'Modules required to connect to MS Access via DBD::ODBC',
323 rdbms_msaccess_ado => {
325 %$rdbms_msaccess_ado,
328 title => 'MS Access support via DBD::ADO (Windows only)',
329 desc => 'Modules required to connect to MS Access via DBD::ADO. This particular DBD is available on Windows only',
338 title => 'MySQL support',
339 desc => 'Modules required to connect to MySQL',
348 title => 'Oracle support',
349 desc => 'Modules required to connect to Oracle',
358 title => 'Sybase ASE support',
359 desc => 'Modules required to connect to Sybase ASE',
368 title => 'DB2 support',
369 desc => 'Modules required to connect to DB2',
378 title => 'DB2 on AS/400 support',
379 desc => 'Modules required to connect to DB2 on AS/400',
388 title => 'Informix support',
389 desc => 'Modules required to connect to Informix',
393 rdbms_sqlanywhere => {
398 title => 'SQLAnywhere support',
399 desc => 'Modules required to connect to SQLAnywhere',
403 rdbms_sqlanywhere_odbc => {
405 %$rdbms_sqlanywhere_odbc,
408 title => 'SQLAnywhere support via DBD::ODBC',
409 desc => 'Modules required to connect to SQLAnywhere via DBD::ODBC',
418 title => 'Firebird support',
419 desc => 'Modules required to connect to Firebird',
423 rdbms_firebird_interbase => {
425 %$rdbms_firebird_interbase,
428 title => 'Firebird support via DBD::InterBase',
429 desc => 'Modules required to connect to Firebird via DBD::InterBase',
433 rdbms_firebird_odbc => {
435 %$rdbms_firebird_odbc,
438 title => 'Firebird support via DBD::ODBC',
439 desc => 'Modules required to connect to Firebird via DBD::ODBC',
443 # the order does matter because the rdbms support group might require
444 # a different version that the test group
447 $ENV{DBICTEST_PG_DSN}
449 # when changing this list make sure to adjust xt/optional_deps.t
451 ($^O ne 'MSWin32' ? ('Sys::SigAction' => '0') : ()),
452 'DBD::Pg' => '2.009002',
457 test_rdbms_mssql_odbc => {
459 $ENV{DBICTEST_MSSQL_ODBC_DSN}
466 test_rdbms_mssql_ado => {
468 $ENV{DBICTEST_MSSQL_ADO_DSN}
475 test_rdbms_mssql_sybase => {
477 $ENV{DBICTEST_MSSQL_DSN}
479 %$rdbms_mssql_sybase,
484 test_rdbms_msaccess_odbc => {
486 $ENV{DBICTEST_MSACCESS_ODBC_DSN}
488 %$rdbms_msaccess_odbc,
495 test_rdbms_msaccess_ado => {
497 $ENV{DBICTEST_MSACCESS_ADO_DSN}
499 %$rdbms_msaccess_ado,
506 test_rdbms_mysql => {
508 $ENV{DBICTEST_MYSQL_DSN}
515 test_rdbms_oracle => {
517 $ENV{DBICTEST_ORA_DSN}
520 'DateTime::Format::Oracle' => '0',
521 'DBD::Oracle' => '1.24',
528 $ENV{DBICTEST_SYBASE_DSN}
537 $ENV{DBICTEST_DB2_DSN}
544 test_rdbms_db2_400 => {
546 $ENV{DBICTEST_DB2_400_DSN}
553 test_rdbms_informix => {
555 $ENV{DBICTEST_INFORMIX_DSN}
562 test_rdbms_sqlanywhere => {
564 $ENV{DBICTEST_SQLANYWHERE_DSN}
571 test_rdbms_sqlanywhere_odbc => {
573 $ENV{DBICTEST_SQLANYWHERE_ODBC_DSN}
575 %$rdbms_sqlanywhere_odbc,
580 test_rdbms_firebird => {
582 $ENV{DBICTEST_FIREBIRD_DSN}
589 test_rdbms_firebird_interbase => {
591 $ENV{DBICTEST_FIREBIRD_INTERBASE_DSN}
593 %$rdbms_firebird_interbase,
598 test_rdbms_firebird_odbc => {
600 $ENV{DBICTEST_FIREBIRD_ODBC_DSN}
602 %$rdbms_firebird_odbc,
609 $ENV{DBICTEST_MEMCACHED}
611 'Cache::Memcached' => 0,
618 'ExtUtils::MakeMaker' => '6.64',
619 'Pod::Inherit' => '0.90',
626 'CPAN::Uploader' => '0.103001',
632 our %req_availability_cache;
635 my ($class, $group) = @_;
637 Carp::croak "req_list_for() expects a requirement group name"
640 my $deps = $reqs->{$group}{req}
641 or Carp::croak "Requirement group '$group' does not exist";
647 sub die_unless_req_ok_for {
648 my ($class, $group) = @_;
650 Carp::croak "die_unless_req_ok_for() expects a requirement group name"
653 $class->_check_deps($group)->{status}
654 or die sprintf( "Required modules missing, unable to continue: %s\n", $class->_check_deps($group)->{missing} );
658 my ($class, $group) = @_;
660 Carp::croak "req_ok_for() expects a requirement group name"
663 return $class->_check_deps($group)->{status};
666 sub req_missing_for {
667 my ($class, $group) = @_;
669 Carp::croak "req_missing_for() expects a requirement group name"
672 return $class->_check_deps($group)->{missing};
675 sub req_errorlist_for {
676 my ($class, $group) = @_;
678 Carp::croak "req_errorlist_for() expects a requirement group name"
681 return $class->_check_deps($group)->{errorlist};
685 my ($class, $group) = @_;
687 return $req_availability_cache{$group} ||= do {
689 my $deps = $class->req_list_for ($group);
692 for my $mod (keys %$deps) {
693 my $req_line = "require $mod;";
694 if (my $ver = $deps->{$mod}) {
695 $req_line .= "$mod->VERSION($ver);";
700 $errors{$mod} = $@ if $@;
706 my $missing = join (', ', map { $deps->{$_} ? "$_ >= $deps->{$_}" : $_ } (sort keys %errors) );
707 $missing .= " (see $class for details)" if $reqs->{$group}{pod};
710 errorlist => \%errors,
727 return { map { $_ => { %{ $reqs->{$_}{req} || {} } } } (keys %$reqs) };
730 # This is to be called by the author only (automatically in Makefile.PL)
732 my ($class, $distver, $pod_dir) = @_;
734 die "No POD root dir supplied" unless $pod_dir;
737 eval { require DBIx::Class; DBIx::Class->VERSION; }
740 "\n\n---------------------------------------------------------------------\n" .
741 'Unable to load core DBIx::Class module to determine current version, '.
742 'possibly due to missing dependencies. Author-mode autodocumentation ' .
744 "\n\n---------------------------------------------------------------------\n"
747 # do not ask for a recent version, use 1.x API calls
748 # this *may* execute on a smoker with old perl or whatnot
751 (my $modfn = __PACKAGE__ . '.pm') =~ s|::|/|g;
753 (my $podfn = "$pod_dir/$modfn") =~ s/\.pm$/\.pod/;
754 (my $dir = $podfn) =~ s|/[^/]+$||;
756 File::Path::mkpath([$dir]);
758 my $sqltver = $class->req_list_for ('deploy')->{'SQL::Translator'}
759 or die "Hrmm? No sqlt dep?";
763 #########################################################################
764 ##################### A U T O G E N E R A T E D ########################
765 #########################################################################
767 # The contents of this POD file are auto-generated. Any changes you make
768 # will be lost. If you need to change the generated text edit _gen_pod()
769 # at the end of $modfn
773 "$class - Optional module dependency specifications (for module authors)",
776 Somewhere in your build-file (e.g. L<Module::Install>'s Makefile.PL):
780 configure_requires 'DBIx::Class' => '$distver';
784 my \$deploy_deps = $class->req_list_for('deploy');
786 for (keys %\$deploy_deps) {
787 requires \$_ => \$deploy_deps->{\$_};
792 Note that there are some caveats regarding C<configure_requires()>, more info
793 can be found at L<Module::Install/configure_requires>
795 '=head1 DESCRIPTION',
797 Some of the less-frequently used features of L<DBIx::Class> have external
798 module dependencies on their own. In order not to burden the average user
799 with modules he will never use, these optional dependencies are not included
800 in the base Makefile.PL. Instead an exception with a descriptive message is
801 thrown when a specific feature is missing one or several modules required for
802 its operation. This module is the central holding place for the current list
803 of such dependencies, for DBIx::Class core authors, and DBIx::Class extension
806 '=head1 CURRENT REQUIREMENT GROUPS',
808 Dependencies are organized in C<groups> and each group can list one or more
809 required modules, with an optional minimum version (or 0 for any version).
810 The group name can be used in the
814 for my $group (sort keys %$reqs) {
815 my $p = $reqs->{$group}{pod}
818 my $modlist = $reqs->{$group}{req}
821 next unless keys %$modlist;
824 "=head2 $p->{title}",
827 ( map { "=item * $_" . ($modlist->{$_} ? " >= $modlist->{$_}" : '') } (sort keys %$modlist) ),
829 "Requirement group: B<$group>",
835 '=head2 req_group_list',
837 '=item Arguments: none',
838 '=item Return Value: \%list_of_requirement_groups',
841 This method should be used by DBIx::Class packagers, to get a hashref of all
842 dependencies keyed by dependency group. Each key (group name) can be supplied
843 to one of the group-specific methods below.
846 '=head2 req_list_for',
848 '=item Arguments: $group_name',
849 '=item Return Value: \%list_of_module_version_pairs',
852 This method should be used by DBIx::Class extension authors, to determine the
853 version of modules a specific feature requires in the B<current> version of
854 DBIx::Class. See the L</SYNOPSIS> for a real-world
860 '=item Arguments: $group_name',
861 '=item Return Value: 1|0',
864 Returns true or false depending on whether all modules required by
865 C<$group_name> are present on the system and loadable.
868 '=head2 req_missing_for',
870 '=item Arguments: $group_name',
871 '=item Return Value: $error_message_string',
874 Returns a single line string suitable for inclusion in larger error messages.
875 This method would normally be used by DBIx::Class core-module author, to
876 indicate to the user that he needs to install specific modules before he will
877 be able to use a specific feature.
879 For example if some of the requirements for C<deploy> are not available,
880 the returned string could look like:
882 SQL::Translator >= $sqltver (see $class for details)
884 The author is expected to prepend the necessary text to this message before
885 returning the actual error seen by the user.
888 '=head2 die_unless_req_ok_for',
890 '=item Arguments: $group_name',
893 Checks if L</req_ok_for> passes for the supplied C<$group_name>, and
894 in case of failure throws an exception including the information
895 from L</req_missing_for>.
898 '=head2 req_errorlist_for',
900 '=item Arguments: $group_name',
901 '=item Return Value: \%list_of_loaderrors_per_module',
904 Returns a hashref containing the actual errors that occurred while attempting
905 to load each module in the requirement group.
908 'See L<DBIx::Class/CONTRIBUTORS>.',
910 'You may distribute this code under the same terms as Perl itself',
913 open (my $fh, '>', $podfn) or Carp::croak "Unable to write to $podfn: $!";
914 print $fh join ("\n\n", @chunks);