You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
perl-DBIx-Class-Schema-Loader/DBIx-Class-Schema-Loader-0....

4005 lines
114 KiB

diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/AutoInstall.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/AutoInstall.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/AutoInstall.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/AutoInstall.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,4 +1,3 @@
-#line 1
package Module::AutoInstall;
use strict;
@@ -18,7 +17,9 @@
# various lexical flags
my ( @Missing, @Existing, %DisabledTests, $UnderCPAN, $HasCPANPLUS );
-my ( $Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly );
+my (
+ $Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps
+);
my ( $PostambleActions, $PostambleUsed );
# See if it's a testing or non-interactive session
@@ -73,6 +74,9 @@
elsif ( $arg =~ /^--test(?:only)?$/ ) {
$TestOnly = 1;
}
+ elsif ( $arg =~ /^--all(?:deps)?$/ ) {
+ $AllDeps = 1;
+ }
}
}
@@ -115,7 +119,12 @@
)[0]
);
- $UnderCPAN = _check_lock(1); # check for $UnderCPAN
+ # We want to know if we're under CPAN early to avoid prompting, but
+ # if we aren't going to try and install anything anyway then skip the
+ # check entirely since we don't want to have to load (and configure)
+ # an old CPAN just for a cosmetic message
+
+ $UnderCPAN = _check_lock(1) unless $SkipInstall;
while ( my ( $feature, $modules ) = splice( @args, 0, 2 ) ) {
my ( @required, @tests, @skiptests );
@@ -165,15 +174,24 @@
}
# XXX: check for conflicts and uninstalls(!) them.
- if (
- defined( my $cur = _version_check( _load($mod), $arg ||= 0 ) ) )
+ my $cur = _load($mod);
+ if (_version_cmp ($cur, $arg) >= 0)
{
print "loaded. ($cur" . ( $arg ? " >= $arg" : '' ) . ")\n";
push @Existing, $mod => $arg;
$DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
}
else {
- print "missing." . ( $arg ? " (would need $arg)" : '' ) . "\n";
+ if (not defined $cur) # indeed missing
+ {
+ print "missing." . ( $arg ? " (would need $arg)" : '' ) . "\n";
+ }
+ else
+ {
+ # no need to check $arg as _version_cmp ($cur, undef) would satisfy >= above
+ print "too old. ($cur < $arg)\n";
+ }
+
push @required, $mod => $arg;
}
}
@@ -187,6 +205,7 @@
and (
$CheckOnly
or ($mandatory and $UnderCPAN)
+ or $AllDeps
or _prompt(
qq{==> Auto-install the }
. ( @required / 2 )
@@ -235,21 +254,38 @@
*{'main::WriteMakefile'} = \&Write if caller(0) eq 'main';
}
+sub _running_under {
+ my $thing = shift;
+ print <<"END_MESSAGE";
+*** Since we're running under ${thing}, I'll just let it take care
+ of the dependency's installation later.
+END_MESSAGE
+ return 1;
+}
+
# Check to see if we are currently running under CPAN.pm and/or CPANPLUS;
# if we are, then we simply let it taking care of our dependencies
sub _check_lock {
return unless @Missing or @_;
+ my $cpan_env = $ENV{PERL5_CPAN_IS_RUNNING};
+
if ($ENV{PERL5_CPANPLUS_IS_RUNNING}) {
- print <<'END_MESSAGE';
+ return _running_under($cpan_env ? 'CPAN' : 'CPANPLUS');
+ }
-*** Since we're running under CPANPLUS, I'll just let it take care
- of the dependency's installation later.
-END_MESSAGE
- return 1;
+ require CPAN;
+
+ if ($CPAN::VERSION > '1.89') {
+ if ($cpan_env) {
+ return _running_under('CPAN');
+ }
+ return; # CPAN.pm new enough, don't need to check further
}
- _load_cpan();
+ # last ditch attempt, this -will- configure CPAN, very sorry
+
+ _load_cpan(1); # force initialize even though it's already loaded
# Find the CPAN lock-file
my $lock = MM->catfile( $CPAN::Config->{cpan_home}, ".lock" );
@@ -285,7 +321,7 @@
while ( my ( $pkg, $ver ) = splice( @_, 0, 2 ) ) {
# grep out those already installed
- if ( defined( _version_check( _load($pkg), $ver ) ) ) {
+ if ( _version_cmp( _load($pkg), $ver ) >= 0 ) {
push @installed, $pkg;
}
else {
@@ -324,7 +360,7 @@
# see if we have successfully installed them
while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) {
- if ( defined( _version_check( _load($pkg), $ver ) ) ) {
+ if ( _version_cmp( _load($pkg), $ver ) >= 0 ) {
push @installed, $pkg;
}
elsif ( $args{do_once} and open( FAILED, '>> .#autoinstall.failed' ) ) {
@@ -379,7 +415,7 @@
my $success;
my $obj = $modtree->{$pkg};
- if ( $obj and defined( _version_check( $obj->{version}, $ver ) ) ) {
+ if ( $obj and _version_cmp( $obj->{version}, $ver ) >= 0 ) {
my $pathname = $pkg;
$pathname =~ s/::/\\W/;
@@ -472,7 +508,7 @@
my $obj = CPAN::Shell->expand( Module => $pkg );
my $success = 0;
- if ( $obj and defined( _version_check( $obj->cpan_version, $ver ) ) ) {
+ if ( $obj and _version_cmp( $obj->cpan_version, $ver ) >= 0 ) {
my $pathname = $pkg;
$pathname =~ s/::/\\W/;
@@ -536,7 +572,7 @@
my $ver = shift;
return
- if defined( _version_check( _load($class), $ver ) ); # no need to upgrade
+ if _version_cmp( _load($class), $ver ) >= 0; # no need to upgrade
if (
_prompt( "==> A newer version of $class ($ver) is required. Install?",
@@ -633,7 +669,7 @@
# Load CPAN.pm and it's configuration
sub _load_cpan {
- return if $CPAN::VERSION;
+ return if $CPAN::VERSION and $CPAN::Config and not @_;
require CPAN;
if ( $CPAN::HandleConfig::VERSION ) {
# Newer versions of CPAN have a HandleConfig module
@@ -645,9 +681,11 @@
}
# compare two versions, either use Sort::Versions or plain comparison
-sub _version_check {
+# return values same as <=>
+sub _version_cmp {
my ( $cur, $min ) = @_;
- return unless defined $cur;
+ return -1 unless defined $cur; # if 0 keep comparing
+ return 1 unless $min;
$cur =~ s/\s+$//;
@@ -658,16 +696,13 @@
) {
# use version.pm if it is installed.
- return (
- ( version->new($cur) >= version->new($min) ) ? $cur : undef );
+ return version->new($cur) <=> version->new($min);
}
elsif ( $Sort::Versions::VERSION or defined( _load('Sort::Versions') ) )
{
# use Sort::Versions as the sorting algorithm for a.b.c versions
- return ( ( Sort::Versions::versioncmp( $cur, $min ) != -1 )
- ? $cur
- : undef );
+ return Sort::Versions::versioncmp( $cur, $min );
}
warn "Cannot reliably compare non-decimal formatted versions.\n"
@@ -676,7 +711,7 @@
# plain comparison
local $^W = 0; # shuts off 'not numeric' bugs
- return ( $cur >= $min ? $cur : undef );
+ return $cur <=> $min;
}
# nothing; this usage is deprecated.
@@ -766,4 +801,256 @@
__END__
-#line 1004
+=pod
+
+=head1 NAME
+
+Module::AutoInstall - Automatic install of dependencies via CPAN
+
+=head1 SYNOPSIS
+
+In F<Makefile.PL>, with L<Module::Install> available on the author's system:
+
+ use inc::Module::Install;
+
+ name 'Joe-Hacker';
+ abstract 'Perl Interface to Joe Hacker';
+ author 'Joe Hacker <joe@hacker.org>';
+ include 'Module::AutoInstall';
+
+ requires 'Module0'; # mandatory modules
+
+ feature 'Feature1',
+ -default => 0,
+ 'Module2' => '0.1';
+
+ feature 'Feature2',
+ -default => 0,
+ 'Module3' => '1.0';
+
+ auto_install(
+ make_args => '--hello', # option(s) for CPAN::Config
+ force => 1, # pseudo-option to force install
+ do_once => 1, # skip previously failed modules
+ );
+
+ WriteAll;
+
+Invoking the resulting F<Makefile.PL>:
+
+ % perl Makefile.PL # interactive behaviour
+ % perl Makefile.PL --defaultdeps # accept default value on prompts
+ % perl Makefile.PL --checkdeps # check only, no Makefile produced
+ % perl Makefile.PL --skipdeps # ignores all dependencies
+ % perl Makefile.PL --testonly # don't write installation targets
+
+Note that the trailing 'deps' of arguments may be omitted, too.
+
+Using C<--defaultdeps> will make F<Makefile.PL> behave similarly to a regular
+Makefile.PL file with C<PREREQ_PM> dependencies.
+
+One can use environment variables (see "ENVIRONMENT") below to set a default
+behavior instead of specifying it in the command line for every invocation
+of F<Makefile.PL>.
+
+Using F<make> (or F<nmake>):
+
+ % make [all|test|install] # install dependencies first
+ % make checkdeps # same as the --checkdeps above
+ % make installdeps # install dependencies only
+
+=head1 DESCRIPTION
+
+B<Module::AutoInstall> lets module writers to specify a more
+sophisticated form of dependency information than the C<PREREQ_PM>
+option offered by B<ExtUtils::MakeMaker>.
+
+This module works best with the B<Module::Install> framework,
+a drop-in replacement for MakeMaker. However, this module also
+supports F<Makefile.PL> files based on MakeMaker; see L</EXAMPLES>
+for instructions.
+
+=head2 Prerequisites and Features
+
+Prerequisites are grouped into B<features>, and the user could choose
+yes/no on each one's dependencies; the module writer may also supply a
+boolean value via C<-default> to specify the default choice.
+
+The B<Core Features> marked by the name C<-core> will double-check with
+the user, if the user chooses not to install the mandatory modules.
+This differs from the pre-0.26 'silent install' behaviour.
+
+Starting from version 0.27, if C<-core> is set to the string C<all>
+(case-insensitive), every feature will be considered mandatory.
+
+The dependencies are expressed as pairs of C<Module> => C<version>
+inside an array reference. If the order does not matter, and there
+are no C<-default>, C<-tests> or C<-skiptests> directives for that
+feature, you may also use a hash reference.
+
+=head2 The Installation Process
+
+Once B<Module::AutoInstall> has determined which module(s) are needed,
+it checks whether it's running under the B<CPAN> shell and should
+therefore let B<CPAN> handle the dependency.
+
+Finally, the C<WriteMakefile()> is overridden to perform some additional
+checks, as well as skips tests associated with disabled features by the
+C<-tests> option.
+
+The actual installation happens at the end of the C<make config> target;
+both C<make test> and C<make install> will trigger the installation of
+required modules.
+
+If it's not running under B<CPAN>, the installer will probe for an
+active connection by trying to resolve the domain C<cpan.org>, and check
+for the user's permission to use B<CPAN>. If all went well, a separate
+ B<CPAN> instance is created to install the required modules.
+
+If you have the B<CPANPLUS> package installed in your system, it is
+preferred by default over B<CPAN>; it also accepts some extra options
+(e.g. C<-target =E<gt> 'skiptest', -skiptest =E<gt> 1> to skip testing).
+
+All modules scheduled to be installed will be deleted from C<%INC>
+first, so B<ExtUtils::MakeMaker> will check the newly installed modules.
+
+Additionally, you could use the C<make installdeps> target to install
+the modules, and the C<make checkdeps> target to check dependencies
+without actually installing them; the C<perl Makefile.PL --checkdeps>
+command has an equivalent effect.
+
+If the F<Makefile.PL> itself needs to use an independent module (e.g.
+B<Acme::KillarApp>, v1.21 or greater), then use something like below:
+
+ BEGIN {
+ require Module::AutoInstall;
+ # the first argument is an arrayref of the -config flags
+ Module::AutoInstall->install([], 'Acme::KillerApp' => 1.21);
+ }
+ use Acme::KillerApp 1.21;
+
+ Module::AutoInstall->import(
+ # ... arguments as usual ...
+ );
+
+Note the version test in the use clause; if you are so close to the
+cutting edge that B<Acme::KillerApp> 1.20 is the latest version on CPAN,
+this will prevent your module from going awry.
+
+=head2 User-Defined Hooks
+
+User-defined I<pre-installation> and I<post-installation> hooks are
+available via C<MY::preinstall> and C<MY::postinstall> subroutines,
+as shown below:
+
+ # pre-install handler; takes $module_name and $version
+ sub MY::preinstall { return 1; } # return false to skip install
+
+ # post-install handler; takes $module_name, $version, $success
+ sub MY::postinstall { return; } # the return value doesn't matter
+
+Note that since B<Module::AutoInstall> performs installation at the
+time of C<use> (i.e. before perl parses the remainder of
+F<Makefile.PL>), you have to declare those two handlers I<before> the
+C<use> statement for them to take effect.
+
+If the user did not choose to install a module or it already exists on
+the system, neither of the handlers is invoked. Both handlers are invoked
+exactly once for each module when installation is attempted.
+
+C<MY::preinstall> takes two arguments, C<$module_name> and C<$version>;
+if it returns a false value, installation for that module will be
+skipped, and C<MY::postinstall> won't be called at all.
+
+C<MY::postinstall> takes three arguments, C<$module_name>, C<$version>
+and C<$success>. The last one denotes whether the installation
+succeeded or not: C<1> means installation completed successfully, C<0>
+means failure during install, and C<undef> means that the installation
+was not attempted at all, possibly due to connection problems, or that
+module does not exist on CPAN at all.
+
+=head2 Customized C<MY::postamble>
+
+Starting from version 0.43, B<Module::AutoInstall> supports modules
+that require a C<MY::postamble> subroutine in their F<Makefile.PL>.
+The user-defined C<MY::postamble>, if present, is responsible for
+calling C<Module::AutoInstall::postamble> and include the output in
+its return value.
+
+For example, the B<DBD::*> (database driver) modules for the Perl DBI
+are required to include the postamble generated by the function
+C<dbd_postamble>, so their F<Makefile.PL> may contain lines like this:
+
+ sub MY::postamble {
+ return &Module::AutoInstall::postamble . &dbd_postamble;
+ }
+
+Note that the B<Module::AutoInstall> module does not export the
+C<postamble> function, so the name should always be fully qualified.
+
+=head1 CAVEATS
+
+B<Module::AutoInstall> will add C<UNINST=1> to your B<make install>
+flags if your effective uid is 0 (root), unless you explicitly disable
+it by setting B<CPAN>'s C<make_install_arg> configuration option (or the
+C<makeflags> option of B<CPANPLUS>) to include C<UNINST=0>. This I<may>
+cause dependency problems if you are using a fine-tuned directory
+structure for your site. Please consult L<CPAN/FAQ> for an explanation
+in detail.
+
+If either B<version> or B<Sort::Versions> is available, they will be
+used to compare the required version with the existing module's version
+and the CPAN module's. Otherwise it silently falls back to use I<cmp>.
+This may cause inconsistent behaviours in pathetic situations.
+
+=head1 ENVIRONMENT
+
+B<Module::AutoInstall> uses a single environment variable,
+C<PERL_AUTOINSTALL>. It is taken as the command line argument
+passed to F<Makefile.PL>; you could set it to C<--alldeps>, C<--defaultdeps>
+or C<--skipdeps> to avoid all interactive behaviour.
+
+C<--alldeps> will install all features, while
+C<--defaultdeps> will only install features for which the default answer is
+'y'.
+
+C<--skipdeps> will refrain from loading L<CPAN> and not install anything, unless
+you're running under L<CPAN> or L<CPANPLUS>, in which case required dependencies
+will be installed.
+
+It also read from the C<PERL_EXTUTILS_AUTOINSTALL> environment variable if
+C<PERL_AUTOINSTALL> is not defined.
+
+=head1 SEE ALSO
+
+L<Module::Install>
+
+L<perlmodlib>, L<ExtUtils::MakeMaker>, L<Sort::Versions>, L<CPAN>,
+L<CPANPLUS>
+
+=head1 AUTHORS
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+Matt S Trout E<lt>mst@shadowcat.co.uE<gt>
+
+=head1 IF THIS BREAKS
+
+Report a ticket to bugs-Module-Install <at> rt.cpan.org and cc Matt
+- I appear to have volunteered as primary maintainer for this stuff so
+if you run into any problems please tell me
+
+=head1 COPYRIGHT
+
+Copyright 2001, 2002, 2003, 2004, 2005, 2006 by Audrey Tang
+
+Some parts copyright 2006 Adam Kennedy
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Bundle.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Bundle.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Bundle.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Bundle.pm 2009-05-27 18:46:14.000000000 +0200
@@ -0,0 +1,73 @@
+package Module::Install::Admin::Bundle;
+
+use strict;
+use Module::Install::Base;
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw{Module::Install::Base};
+}
+
+sub bundle {
+ my $self = shift;
+ my $bundle_dir = $self->_top->{bundle};
+
+ require Cwd;
+ require CPANPLUS::Backend;
+
+ my $cwd = Cwd::getcwd();
+
+ # This code is what we _should_ be doing, but CPANPLUS doesn't
+ # let you have multiple Backends in one program.
+ # my $cp = CPANPLUS::Backend->new;
+ #
+ # Jos Boumans tells us that this is the best way to do what we want
+ # It still scares me.
+ my $cp = CPANPLUS::Internals->_retrieve_id( CPANPLUS::Internals->_last_id )
+ || CPANPLUS::Backend->new;
+ my $conf = $cp->configure_object;
+ my $modtree = $cp->module_tree;
+
+ $conf->set_conf( verbose => 1 );
+ $conf->set_conf( signature => 0 );
+ $conf->set_conf( md5 => 0 );
+
+ mkdir $bundle_dir;
+
+ my %bundles;
+
+ while ( my ( $name, $version ) = splice( @_, 0, 2 ) ) {
+ my $mod = $cp->module_tree($name);
+ next unless $mod;
+ if ( $mod->package_is_perl_core or $self->{already_bundled}{$mod->package} ) {
+ next;
+ }
+
+ my $where = $mod->fetch( fetchdir => $bundle_dir, );
+ next unless ($where);
+ my $file = Cwd::abs_path($where);
+
+ my $extract_result = $mod->extract(
+ files => [ $file ],
+ extractdir => $bundle_dir,
+ );
+
+ unlink $file;
+ next unless ($extract_result);
+ $bundles{$name} = $extract_result;
+ $self->{already_bundled}{ $mod->package }++;
+
+ }
+
+ chdir $cwd;
+
+ local *FH;
+ open FH, ">> $bundle_dir.yml" or die "Cannot write to $bundle_dir.yml: $!";
+ foreach my $name ( sort keys %bundles ) {
+ print FH "$name: '$bundles{$name}'\n";
+ }
+ close FH;
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Compiler.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Compiler.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Compiler.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Compiler.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,27 @@
+package Module::Install::Admin::Compiler;
+
+use strict;
+use Module::Install::Base;
+use File::Remove ();
+use Devel::PPPort ();
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw{Module::Install::Base};
+}
+
+sub ppport {
+ my $self = shift;
+ my $file = shift || 'ppport.h';
+ if ( -f $file ) {
+ # Update the file to a newer version
+ File::Remove::remove($file);
+ }
+
+ # Install the file (and remove on realclean)
+ Devel::PPPort::WriteFile( $file ) or die "Failed to write $file";
+ $self->realclean_files( $file );
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Find.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Find.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Find.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Find.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,77 @@
+package Module::Install::Admin::Find;
+
+use strict;
+use File::Find ();
+use Module::Install::Base ();
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw(Module::Install::Base);
+}
+
+sub find_extensions {
+ my $self = shift;
+ $self->_top->find_extensions(@_);
+}
+
+sub find_in_inc {
+ my ($self, $pkg) = @_;
+
+ unless ($pkg =~ /\.pm$/) {
+ $pkg =~ s!::!/!g;
+ $pkg = "$pkg.pm";
+ }
+
+ my @found;
+ foreach my $inc (@INC) {
+ next if $inc eq $self->_top->{prefix} or ref($inc);
+ push @found, "$inc/$pkg" if -f "$inc/$pkg";
+ }
+
+ wantarray ? @found : $found[0];
+}
+
+sub glob_in_inc {
+ my ($self, $pkg) = @_;
+
+ unless ($pkg =~ /\.pm$/) {
+ $pkg =~ s!::!/!g;
+ $pkg = "$pkg.pm";
+ }
+
+ my @found;
+ foreach my $inc (@INC) {
+ next if $inc eq $self->_top->{prefix} or ref($inc);
+ push @found, [ do {
+ my $p = $_;
+ $p =~ s!^\Q$inc\E/!!;
+ $p =~ s!/!::!g;
+ $p =~ s!\.pm\Z!!gi;
+ $p
+ }, $_ ] for grep -e, glob("$inc/$pkg");
+ }
+
+ wantarray ? @found : $found[0];
+}
+
+sub find_files {
+ my ($self, $file, $path) = @_;
+ $path = '' if not defined $path;
+ $file = "$path/$file" if length($path);
+ if (-f $file) {
+ return ($file);
+ }
+ elsif (-d $file) {
+ my @files = ();
+ local *DIR;
+ opendir(DIR, $file) or die "Can't opendir $file";
+ while (my $new_file = readdir(DIR)) {
+ next if $new_file =~ /^(\.|\.\.)$/;
+ push @files, $self->find_files($new_file, $file);
+ }
+ return @files;
+ }
+ return ();
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Include.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Include.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Include.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Include.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,147 @@
+package Module::Install::Admin::Include;
+
+use strict;
+use Module::Install::Base;
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw{Module::Install::Base};
+}
+
+sub include {
+ my $self = shift;
+ foreach my $rv ( $self->admin->glob_in_inc($_[0]) ) {
+ $self->admin->copy_package(@$rv);
+ }
+}
+
+sub include_deps {
+ my $self = shift;
+ my $deps = $self->admin->scan_dependencies($_[0]) or return;
+ foreach my $key ( sort keys %$deps ) {
+ $self->include($key);
+ }
+}
+
+sub auto_include {
+ my $self = shift;
+ foreach my $module (
+ map { $_->[0] }
+ map { @$_ }
+ grep { $_ }
+ $self->build_requires
+ ) {
+ $self->include($module);
+ }
+}
+
+sub auto_include_deps {
+ my $self = shift;
+ foreach my $module (
+ map { $_->[0] }
+ map { @$_ }
+ grep { $_ }
+ $self->build_requires
+ ) {
+ $self->include_deps($module);
+ }
+}
+
+=pod
+
+=head1 NAME
+
+Module::Install::Admin::Include
+
+=head2 auto_include_dependent_dists
+
+Grabs everything in this module's build_requires and attempts to
+include everything (at the whole distribution level) recursively.
+
+=cut
+
+sub auto_include_dependent_dists {
+ my $self = shift;
+ foreach my $module (
+ map { $_->[0] }
+ map { @$_ }
+ grep { $_ }
+ $self->build_requires
+ ) {
+ $self->include_dependent_dists($module);
+ }
+}
+
+=pod
+
+=head2 include_dependent_dists $package
+
+Given a module package name, recursively include every package that
+module needs.
+
+=cut
+
+sub include_dependent_dists {
+ my $self = shift;
+ my $pkg = shift;
+ return unless $pkg;
+ return if $self->{including_dep_dist}->{ $self->_pkg_to_dist($pkg) }++;
+ $self->include_one_dist($pkg);
+ foreach my $mod ( @{ $self->_dist_to_mods( $self->_pkg_to_dist($pkg) ) } ) {
+ my $deps = $self->admin->scan_dependencies($mod) or return;
+ foreach my $key ( sort grep { $_ } keys %$deps ) {
+ $self->include_dependent_dists($key);
+ }
+ }
+}
+
+=pod
+
+=head2 include_one_dist $module
+
+Given a module name, C<$module>, figures out which modules are in the
+dist containing that module and copies all those files to ./inc. I bet
+there's a way to harness smarter logic from L<PAR>.
+
+=cut
+
+sub include_one_dist {
+ my $self = shift;
+ my @mods = $self->_dist_to_mods( $self->_pkg_to_dist($_[0]) );
+ foreach my $pattern ( grep { $_ } @mods ) {
+ foreach my $rv ( $self->admin->glob_in_inc($pattern) ) {
+ $self->admin->copy_package(@$rv);
+ }
+ }
+}
+
+=pod
+
+=for private _pkg_to_dist $modname
+
+Given a module name, returns the file on CPAN containing
+its latest version.
+
+=cut
+
+sub _pkg_to_dist {
+ require CPAN;
+ my $mod = CPAN::Shell->expand( Module => $_[1] ) or return;
+ $mod->cpan_file;
+}
+
+=pod
+
+=for private _dist_to_mods $distname
+
+Takes the output of CPAN::Module->cpan_file and return all the modules
+that CPAN.pm knows are in that dist. There's probably a beter way using CPANPLUS
+
+=cut
+
+sub _dist_to_mods {
+ CPAN::Shell->expand( Distribution => $_[1] )->containsmods;
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Makefile.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Makefile.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Makefile.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Makefile.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,53 @@
+package Module::Install::Admin::Makefile;
+
+use strict 'vars';
+use Module::Install::Base;
+use ExtUtils::MakeMaker ();
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw{Module::Install::Base};
+}
+
+sub postamble {
+ my ($self, $text) = @_;
+ my $class = ref($self);
+ my $top_class = ref($self->_top);
+ my $admin_class = join('::', @{$self->_top}{qw(name dispatch)});
+
+ $self->{postamble} ||= << "END_MAKEFILE";
+# --- $class section:
+
+realclean purge ::
+\t\$(RM_F) \$(DISTVNAME).tar\$(SUFFIX)
+\t\$(RM_F) MANIFEST.bak _build
+\t\$(PERL) "-Ilib" "-M$admin_class" -e "remove_meta()"
+\t\$(RM_RF) inc
+
+reset :: purge
+
+upload :: test dist
+\tcpan-upload -verbose \$(DISTVNAME).tar\$(SUFFIX)
+
+grok ::
+\tperldoc $top_class
+
+distsign ::
+\tcpansign -s
+
+END_MAKEFILE
+
+ $self->{postamble} .= $text if defined $text;
+ return $self->{postamble};
+}
+
+sub preop {
+ my $self = shift;
+ my ($user_preop) = @_;
+ my $admin_class = join('::', @{$self->_top}{qw(name dispatch)});
+ $user_preop = qq{\$(PERL) -I. "-M$admin_class" -e "dist_preop(q(\$(DISTVNAME)))"} unless $user_preop;
+ return { PREOP => $user_preop };
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Manifest.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Manifest.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Manifest.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Manifest.pm 2009-05-27 18:46:14.000000000 +0200
@@ -0,0 +1,162 @@
+package Module::Install::Admin::Manifest;
+
+use strict;
+use Module::Install::Base;
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw{Module::Install::Base};
+}
+
+use Cwd;
+use File::Spec;
+
+# XXX I really want this method in Module::Install::Admin::Makefile
+# But you can't call across Admin modules. Audrey??
+sub dist_preop {
+ my ($self, $distdir) = @_;
+ return if $self->check_manifest;
+ print <<"END_MESSAGE";
+
+It appears that your MANIFEST does not contain the same components that
+are currently in the 'inc' directory.
+
+Please try running 'make manifest' and then run 'make dist' again.
+
+Remember to use the MANIFEST.SKIP file to control things that should not
+end up in your MANIFEST. See 'perldoc ExtUtils::Manifest' for details.
+
+END_MESSAGE
+ return if $self->prompt(
+ 'Do you *really* want to continue making a distribution?', 'n'
+ ) =~ /^[Yy]/;
+
+ if ( -d $distdir ) {
+ require File::Path;
+ File::Path::rmtree($distdir);
+ }
+
+ exit(1);
+}
+
+# XXX Needs a refactoring.
+sub check_manifest {
+ my $self = shift;
+ my $prefix = $self->_top->{prefix};
+ my ($manifest, $manifest_path, $relative_path) = $self->_read_manifest or return;
+ my $manifest_skip = "$manifest_path.SKIP";
+ my @skip;
+
+ if ( -f "$manifest_path.SKIP" ) {
+ open SKIP, $manifest_skip
+ or die "Can't open $manifest_skip for input:\n$!";
+ @skip = map {chomp; $_} <SKIP>;
+ close SKIP;
+ }
+
+ my %manifest;
+ for ( my $i = 0; $i < @$manifest; $i++ ) {
+ my $path = $manifest->[$i];
+ $path =~ s/\s.*//;
+ $path =~ s/^\.[\\\/]//;
+ $path =~ s/[\\\/]/\//g;
+ next unless $path =~ m/^\Q$prefix\E\b/i;
+ $manifest{$path} = \$manifest->[$i];
+ }
+
+ ADDLOOP:
+ for my $pathname ( sort $self->_find_files($prefix) ) {
+ $pathname = "$relative_path/$pathname" if length($relative_path);
+ $pathname =~ s!//+!/!g;
+ next unless -f $pathname;
+ if ( defined $manifest{$pathname} ) {
+ delete $manifest{$pathname};
+ } else {
+ for ( @skip ) {
+ next ADDLOOP if $pathname =~ /$_/;
+ }
+ return 0;
+ }
+ }
+ if ( keys %manifest ) {
+ foreach ( keys %manifest ) {
+ print "Found extra file $_\n";
+ }
+ return 0;
+ }
+ return 1;
+}
+
+sub _read_manifest {
+ my $manifest = [];
+ my $manifest_path = '';
+ my $relative_path = '';
+ my @relative_dirs = ();
+ my $cwd = Cwd::cwd();
+ my @cwd_dirs = File::Spec->splitdir($cwd);
+ while ( @cwd_dirs ) {
+ last unless -f File::Spec->catfile(@cwd_dirs, 'Makefile.PL');
+ my $path = File::Spec->catfile(@cwd_dirs, 'MANIFEST');
+ if ( -f $path ) {
+ $manifest_path = $path;
+ last;
+ }
+ unshift @relative_dirs, pop(@cwd_dirs);
+ }
+
+ unless ( length($manifest_path) ) {
+ warn "Can't locate the MANIFEST file for '$cwd'\n";
+ return;
+ }
+
+ $relative_path = join '/', @relative_dirs if @relative_dirs;
+
+ local *MANIFEST;
+ open MANIFEST, $manifest_path
+ or die "Can't open $manifest_path for input:\n$!";
+ @$manifest = map { chomp; $_ } <MANIFEST>;
+ close MANIFEST;
+
+ return ($manifest, $manifest_path, $relative_path);
+}
+
+# XXX I copied this from M::I::A::Find because I can't call that one. Please
+# refactor/fix.
+sub _find_files {
+ my ($self, $file, $path) = @_;
+ $path = '' if not defined $path;
+ $file = "$path/$file" if length($path);
+ if ( -f $file ) {
+ return ( $file );
+ } elsif ( -d $file ) {
+ my @files = ();
+ local *DIR;
+ opendir(DIR, $file) or die "Can't opendir $file";
+ while (defined(my $new_file = readdir(DIR))) {
+ next if $new_file =~ /^(\.|\.\.)$/;
+ push @files, $self->_find_files($new_file, $file);
+ }
+ return @files;
+ }
+ return ();
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 COPYRIGHT
+
+Copyright 2003, 2004 by
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>,
+Brian Ingerson E<lt>ingy@cpan.orgE<gt>
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Metadata.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Metadata.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/Metadata.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/Metadata.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,185 @@
+package Module::Install::Admin::Metadata;
+
+use strict;
+use YAML::Tiny ();
+use Module::Install::Base;
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = 'Module::Install::Base';
+}
+
+sub read_meta {
+ (YAML::Tiny::LoadFile('META.yml'))[0];
+}
+
+sub meta_generated_by_us {
+ my $meta = $_[0]->read_meta;
+ my $want = ref($_[0]->_top);
+ if ( defined $_[1] ) {
+ $want .= " version $_[1]";
+ }
+ return $meta->{generated_by} =~ /^\Q$want\E/;
+}
+
+sub remove_meta {
+ my $self = shift;
+ my $ver = $self->_top->VERSION;
+ return unless -f 'META.yml';
+ return unless $self->meta_generated_by_us($ver);
+ unless ( -w 'META.yml' ) {
+ warn "Can't remove META.yml file. Not writable.\n";
+ return;
+ }
+ # warn "Removing auto-generated META.yml\n";
+ unless ( unlink 'META.yml' ) {
+ die "Couldn't unlink META.yml:\n$!";
+ }
+ return;
+}
+
+sub write_meta {
+ my $self = shift;
+ if ( -f "META.yml" ) {
+ return unless $self->meta_generated_by_us();
+ } else {
+ $self->clean_files('META.yml');
+ }
+ print "Writing META.yml\n";
+ Module::Install::_write("META.yml", $self->dump_meta);
+ return;
+}
+
+sub dump_meta {
+ my $self = shift;
+ my $pkg = ref( $self->_top );
+ my $ver = $self->_top->VERSION;
+ my $val = $self->Meta->{values};
+
+ delete $val->{sign};
+
+ my $perl_version = delete $val->{perl_version};
+ if ( $perl_version ) {
+ $val->{requires} ||= [];
+ my $requires = $val->{requires};
+
+ # Issue warnings for unversioned core modules that are
+ # already satisfied by the Perl version dependency.
+ require Module::CoreList;
+ my $corelist = $Module::CoreList::version{$perl_version};
+ if ( $corelist ) {
+ my @bad = grep { exists $corelist->{$_} }
+ map { $_->[0] }
+ grep { ! $_->[1] }
+ @$requires;
+ foreach ( @bad ) {
+ # print "WARNING: Unversioned dependency on '$_' is pointless when Perl minimum version is $perl_version\n";
+ }
+ }
+
+ # Canonicalize to three-dot version after Perl 5.6
+ if ( $perl_version >= 5.006 ) {
+ $perl_version =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e
+ }
+ unshift @$requires, [ perl => $perl_version ];
+ }
+
+ # Set a default 'unknown' license
+ unless ( $val->{license} ) {
+ warn "No license specified, setting license = 'unknown'\n";
+ $val->{license} = 'unknown';
+ }
+
+ # Most distributions are modules
+ $val->{distribution_type} ||= 'module';
+
+ # Check and derive names
+ if ( $val->{name} =~ /::/ ) {
+ my $name = $val->{name};
+ $name =~ s/::/-/g;
+ die "Error in name(): '$val->{name}' should be '$name'!\n";
+ }
+ if ( $val->{module_name} and ! $val->{name} ) {
+ $val->{name} = $val->{module_name};
+ $val->{name} =~ s/::/-/g;
+ }
+
+ # Apply default no_index entries
+ $val->{no_index} ||= {};
+ $val->{no_index}->{directory} ||= [];
+ SCOPE: {
+ my %seen = ();
+ $val->{no_index}->{directory} = [
+ sort
+ grep { not $seen{$_}++ }
+ grep { -d $_ } (
+ @{$val->{no_index}->{directory}},
+ qw{
+ share inc t xt test
+ example examples demo
+ },
+ )
+ ];
+ }
+
+ # Generate the structure we'll be dumping
+ my $meta = {
+ resources => {},
+ license => $val->{license},
+ };
+ foreach my $key ( $self->Meta_ScalarKeys ) {
+ next if $key eq 'installdirs';
+ next if $key eq 'tests';
+ $meta->{$key} = $val->{$key} if exists $val->{$key};
+ }
+ foreach my $key ( $self->Meta_ArrayKeys ) {
+ $meta->{$key} = $val->{$key} if exists $val->{$key};
+ }
+ foreach my $key ( $self->Meta_TupleKeys ) {
+ next unless exists $val->{$key};
+ $meta->{$key} = { map { @$_ } @{ $val->{$key} } };
+ }
+
+ if ( $self->_cmp( $meta->{configure_requires}->{'ExtUtils::MakeMaker'}, '6.36' ) >= 0 ) {
+ # Starting from this version ExtUtils::MakeMaker requires perl 5.6
+ unless ( $perl_version && $self->perl_version($perl_version) >= 5.006 ) {
+ $meta->{requires}->{perl} = '5.006';
+ }
+ }
+
+ $meta->{provides} = $val->{provides} if $val->{provides};
+ $meta->{author} &&= [ $meta->{author} ];
+ $meta->{no_index} = $val->{no_index};
+ $meta->{generated_by} = "$pkg version $ver";
+ $meta->{'meta-spec'} = {
+ version => 1.4,
+ url => 'http://module-build.sourceforge.net/META-spec-v1.4.html',
+ };
+ unless ( scalar keys %{$meta->{resources}} ) {
+ delete $meta->{resources};
+ }
+
+ # Support version.pm versions
+ if ( UNIVERSAL::isa($meta->{version}, 'version') ) {
+ $meta->{version} = $meta->{version}->numify;
+ }
+
+ YAML::Tiny::Dump($meta);
+}
+
+
+
+
+
+######################################################################
+# MYMETA.yml Support
+
+sub WriteMyMeta {
+ my $self = shift;
+ $self->configure_requires( 'YAML::Tiny' => 1.36 );
+ $self->write_mymeta;
+ return 1;
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/ScanDeps.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/ScanDeps.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/ScanDeps.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/ScanDeps.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,80 @@
+package Module::Install::Admin::ScanDeps;
+
+use strict;
+use Module::Install::Base ();
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw(Module::Install::Base);
+}
+
+sub scan_dependencies {
+ my ($self, $pkg, $perl_version) = @_;
+
+ return if $pkg eq 'perl';
+
+ $perl_version ||= $self->perl_version or die <<'END_MESSAGE';
+Please first specify a required perl version, like this:
+ requires( perl => '5.005' );
+END_MESSAGE
+ $perl_version =~ s{^(\d+)\.(\d+)\.(\d+)}{$1 + $2/1_000 + $3/1_000_000}e;
+
+ require Module::ScanDeps;
+ require Module::CoreList;
+
+ die "Module::CoreList has no information on perl $perl_version"
+ unless exists $Module::CoreList::version{$perl_version};
+
+ if (my $min_version = Module::CoreList->first_release($pkg)) {
+ return if $min_version <= $perl_version;
+ }
+
+ my @files = scalar $self->admin->find_in_inc($pkg)
+ or die "Cannot find $pkg in \@INC";
+ my %result = ($pkg => $files[0]);
+
+ while (@files) {
+ my $deps = Module::ScanDeps::scan_deps(
+ files => \@files,
+ recurse => 0,
+ );
+
+ @files = ();
+
+ foreach my $key (keys %$deps) {
+ if ($deps->{$key}{type} eq 'shared') {
+ foreach my $used_by (@{$deps->{$key}{used_by}}) {
+ $used_by =~ s!/!::!g;
+ $used_by =~ s!\.pm\Z!!i or next;
+ next if exists $result{$used_by};
+ $result{$used_by} = undef;
+ my $min_version = Module::CoreList->first_release($used_by);
+ print "skipped $used_by (needs shared library)\n"
+ unless !$min_version || $min_version <= $perl_version;
+ }
+ }
+ }
+
+ foreach my $key (keys %$deps) {
+ my $dep_pkg = $key;
+ $dep_pkg =~ s!/!::!g;
+ $dep_pkg =~ s!\.pm\Z!!i or next;
+
+ if (my $min_version = Module::CoreList->first_release($dep_pkg)) {
+ next if $min_version <= $perl_version;
+ }
+ next if $dep_pkg =~ /^(?:DB|(?:Auto|Dyna|XS)Loader|threads|warnings)\b/i;
+ next if exists $result{$dep_pkg};
+
+ $result{$dep_pkg} = $deps->{$key}{file};
+ push @files, $deps->{$key}{file};
+ }
+ }
+
+ while (my($k,$v) = each %result) {
+ delete $result{$k} unless defined $v;
+ }
+ return \%result;
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/WriteAll.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/WriteAll.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin/WriteAll.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin/WriteAll.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,20 @@
+package Module::Install::Admin::WriteAll;
+
+use strict;
+use Module::Install::Base;
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';;
+ @ISA = qw{Module::Install::Base};
+}
+
+sub WriteAll {
+ my ($self, %args) = @_;
+ $self->load('Makefile');
+ if ( $args{check_nmake} ) {
+ $self->load($_) for qw(Makefile check_nmake can_run get_file);
+ }
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Admin.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Admin.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,294 @@
+package Module::Install::Admin;
+
+use strict 'vars';
+use File::Path ();
+use inc::Module::Install ();
+
+use vars qw{$VERSION @ISA};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install';
+}
+
+=pod
+
+=head1 NAME
+
+Module::Install::Admin - Author-side manager for Module::Install
+
+=head1 SYNOPSIS
+
+In a B<Module::Install> extension module:
+
+ sub extension_method {
+ my $self = shift;
+ $self->admin->some_method(@args);
+ }
+
+As an one-liner:
+
+ % perl "-MModule::Install::Admin" -e'&some_method(@args);'
+
+The two snippets above are really shorthands for
+
+ $some_obj->some_method(@args)
+
+where C<$some_obj> is the singleton object of a class under the
+C<Module::Install::Admin::*> namespace that provides the method
+C<some_method>. See L</METHODS> for a list of built-in methods.
+
+=head1 DESCRIPTION
+
+This module implements the internal mechanism for initializing,
+including and managing extensions, and should only be of interest to
+extension developers; it is I<never> included under a distribution's
+F<inc/> directory, nor are any of the B<Module::Install::Admin::*>
+extensions.
+
+For normal usage of B<Module::Install>, please see L<Module::Install>
+and L<Module::Install/"COOKBOOK / EXAMPLES"> instead.
+
+=head2 Bootstrapping
+
+When someone runs a F<Makefile.PL> that has C<use inc::Module::Install>,
+and there is no F<inc/> in the current directory, B<Module::Install>
+will load this module bootstrap itself, through the steps below:
+
+=over 4
+
+=item *
+
+First, F<Module/Install.pm> is POD-stripped and copied from C<@INC> to
+F<inc/>. This should only happen on the author's side, never on the
+end-user side.
+
+=item *
+
+Reload F<inc/Module/Install.pm> if the current file is somewhere else.
+This ensures that the included version of F<inc/Module/Install.pm> is
+always preferred over the installed version.
+
+=item *
+
+Look at F<inc/Module/Install/*.pm> and load all of them.
+
+=item *
+
+Set up a C<main::AUTOLOAD> function to delegate missing function calls
+to C<Module::Install::Admin::load> -- again, this should only happen
+at the author's side.
+
+=item *
+
+Provide a C<Module::Install::purge_self> function for removing included
+files under F<inc/>.
+
+=back
+
+=head1 METHODS
+
+=cut
+
+sub import {
+ my $class = shift;
+ my $self = $class->new( _top => Module::Install->new, @_ );
+ *{caller(0) . "::AUTOLOAD"} = sub {
+ no strict 'vars';
+ $AUTOLOAD =~ /([^:]+)$/ or die "Cannot load";
+ return if uc($1) eq $1;
+ my $obj = $self->load($1) or return;
+ unshift @_, $obj;
+ goto &{$obj->can($1)};
+ }
+}
+
+sub new {
+ my ($class, %args) = @_;
+ return $class->SUPER::new(
+ %{$args{_top}}, %args,
+ extensions => undef,
+ pathnames => undef,
+ );
+}
+
+sub init {
+ my $self = shift;
+
+ $self->copy($INC{"$self->{path}.pm"} => $self->{file});
+
+ unless ( grep { $_ eq $self->{prefix} } @INC ) {
+ unshift @INC, $self->{prefix};
+ }
+
+ delete $INC{"$self->{path}.pm"};
+ local $^W;
+ do "$self->{path}.pm";
+}
+
+sub copy {
+ my ($self, $from, $to) = @_;
+
+ my @parts = split('/', $to);
+ File::Path::mkpath([ join('/', @parts[ 0 .. $#parts-1 ])]);
+
+ chomp $to;
+
+ local (*FROM, *TO, $_);
+ open FROM, "< $from" or die "Can't open $from for input:\n$!";
+ open TO, "> $to" or die "Can't open $to for output:\n$!";
+ print TO "#line 1\n";
+
+ my $content;
+ my $in_pod;
+
+ while ( <FROM> ) {
+ if ( /^=(?:b(?:egin|ack)|head\d|(?:po|en)d|item|(?:ove|fo)r)/ ) {
+ $in_pod = 1;
+ } elsif ( /^=cut\s*\z/ and $in_pod ) {
+ $in_pod = 0;
+ print TO "#line $.\n";
+ } elsif ( ! $in_pod ) {
+ print TO $_;
+ }
+ }
+
+ close FROM;
+ close TO;
+
+ print "include $to\n";
+}
+
+# scan through our target to find
+sub load_all_extensions {
+ my $self = shift;
+ unless ($self->{extensions}) {
+ $self->{extensions} = [];
+ foreach my $inc (@INC) {
+ next if ref($inc) or $inc eq $self->{prefix};
+ $self->load_extensions("$inc/$self->{path}", $self->{_top});
+ }
+ }
+ return @{$self->{extensions}};
+}
+
+sub load {
+ my ($self, $method, $copy) = @_;
+
+ my @extobj;
+ foreach my $obj ($self->load_all_extensions) {
+ next unless defined &{ref($obj)."::$method"};
+ my $is_admin = (ref($obj) =~ /^\Q$self->{name}::$self->{dispatch}::/);
+ # Don't ever include admin modules, and vice versa.
+ # $copy = 0 if $XXX and $is_admin;
+ push @extobj, $obj if $copy xor $is_admin;
+ }
+ unless ( @extobj ) {
+ die "Cannot find an extension with method '$method'";
+ }
+
+ # XXX - do we need to reload $obj from the new location?
+ my $obj = $self->pick($method, \@extobj);
+ $self->copy_package(ref($obj)) if $copy;
+
+ return $obj;
+}
+
+# Copy a package to inc/, with its @ISA tree. $pathname is optional.
+sub copy_package {
+ my ($self, $pkg, $pathname) = @_;
+ return unless ($pathname ||= $self->{pathnames}{$pkg});
+
+ my $file = $pkg; $file =~ s!::!/!g;
+ $file = "$self->{prefix}/$file.pm";
+ return if -f $file; # prevents infinite recursion
+
+ $self->copy($pathname => $file);
+ foreach my $pkg (@{"$pkg\::ISA"}) {
+ $self->copy_package($pkg);
+ }
+}
+
+sub pick {
+ # determine which name to load
+ my ($self, $method, $objects) = @_;
+
+ # XXX this whole thing needs to be discussed
+ return $objects->[0] unless $#{$objects} > 0 and -t STDIN;
+
+ # sort by last modified time
+ @$objects = map { $_->[0] }
+ sort { $a->[1] <=> $b->[1] }
+ map { [ $_ => -M $self->{pathnames}{ref($_)} ] } @$objects;
+
+ print "Multiple extensions found for method '$method':\n";
+ foreach my $i ( 1 .. @$objects ) {
+ print "\t$i. ", ref($objects->[$i-1]), "\n";
+ }
+
+ while ( 1 ) {
+ print "Please select one [1]: ";
+ chomp(my $choice = <STDIN>);
+ $choice ||= 1;
+ return $objects->[$choice-1] if $choice > 0 and $choice <= @$objects;
+ print "Invalid choice. ";
+ }
+}
+
+sub delete_package {
+ my ($self, $pkg) = @_;
+
+ # expand to full symbol table name if needed
+ unless ( $pkg =~ /^main::.*::$/ ) {
+ $pkg = "main$pkg" if $pkg =~ /^::/;
+ $pkg = "main::$pkg" unless $pkg =~ /^main::/;
+ $pkg .= '::' unless $pkg =~ /::$/;
+ }
+
+ my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
+ my $stem_symtab = *{$stem}{HASH};
+ return unless defined $stem_symtab and exists $stem_symtab->{$leaf};
+
+ # free all the symbols in the package
+ my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH};
+ foreach my $name (keys %$leaf_symtab) {
+ next if $name eq "$self->{dispatch}::";
+ undef *{$pkg . $name};
+ }
+
+ # delete the symbol table
+ foreach my $name (keys %$leaf_symtab) {
+ next if $name eq "$self->{dispatch}::";
+ delete $leaf_symtab->{$name};
+ }
+}
+
+sub AUTOLOAD {
+ goto &{shift->autoload};
+}
+
+sub DESTROY { }
+
+1;
+
+__END__
+
+=pod
+
+=head1 SEE ALSO
+
+L<Module::Install>
+
+=head1 AUTHORS
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2003, 2004 by Audrey Tang E<lt>autrijus@autrijus.orgE<gt>.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/AutoInstall.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/AutoInstall.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/AutoInstall.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/AutoInstall.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,14 +1,13 @@
-#line 1
package Module::Install::AutoInstall;
use strict;
-use Module::Install::Base;
+use Module::Install::Base ();
-use vars qw{$VERSION $ISCORE @ISA};
+use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
- @ISA = qw{Module::Install::Base};
}
sub AutoInstall { $_[0] }
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Base.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Base.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Base.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Base.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,10 +1,9 @@
-#line 1
package Module::Install::Base;
use strict 'vars';
use vars qw{$VERSION};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';
}
# Suspend handler for "redefined" warnings
@@ -13,42 +12,82 @@
$SIG{__WARN__} = sub { $w };
}
-### This is the ONLY module that shouldn't have strict on
-# use strict;
+=pod
-#line 45
+=head1 NAME
-sub new {
- my ($class, %args) = @_;
+Module::Install::Base - Base class for Module::Install extensions
- foreach my $method ( qw(call load) ) {
- next if defined &{"$class\::$method"};
- *{"$class\::$method"} = sub {
- shift()->_top->$method(@_);
- };
- }
+=head1 SYNOPSIS
+
+In a B<Module::Install> extension:
+
+ use Module::Install::Base ();
+ @ISA = qw(Module::Install::Base);
+
+=head1 DESCRIPTION
+
+This module provide essential methods for all B<Module::Install>
+extensions, in particular the common constructor C<new> and method
+dispatcher C<AUTOLOAD>.
+
+=head1 METHODS
+
+=over 4
+
+=item new(%args)
- bless( \%args, $class );
+Constructor -- need to preserve at least _top
+
+=cut
+
+sub new {
+ my $class = shift;
+ unless ( defined &{"${class}::call"} ) {
+ *{"${class}::call"} = sub { shift->_top->call(@_) };
+ }
+ unless ( defined &{"${class}::load"} ) {
+ *{"${class}::load"} = sub { shift->_top->load(@_) };
+ }
+ bless { @_ }, $class;
}
-#line 66
+=pod
+
+=item AUTOLOAD
+
+The main dispatcher - copy extensions if missing
+
+=cut
sub AUTOLOAD {
- my $self = shift;
local $@;
- my $autoload = eval {
- $self->_top->autoload
- } or return;
- goto &$autoload;
+ my $func = eval { shift->_top->autoload } or return;
+ goto &$func;
}
-#line 83
+=pod
+
+=item _top()
+
+Returns the top-level B<Module::Install> object.
+
+=cut
sub _top {
$_[0]->{_top};
}
-#line 98
+=pod
+
+=item admin()
+
+Returns the C<_top> object's associated B<Module::Install::Admin> object
+on the first run (i.e. when there was no F<inc/> when the program
+started); on subsequent (user-side) runs, returns a fake admin object
+with an empty C<AUTOLOAD> method that does nothing at all.
+
+=cut
sub admin {
$_[0]->_top->{admin}
@@ -56,7 +95,15 @@
Module::Install::Base::FakeAdmin->new;
}
-#line 114
+=pod
+
+=item is_admin()
+
+Tells whether this is the first run of the installer (on
+author's side). That is when there was no F<inc/> at
+program start. True if that's the case. False, otherwise.
+
+=cut
sub is_admin {
$_[0]->admin->VERSION;
@@ -83,4 +130,25 @@
1;
-#line 162
+=pod
+
+=back
+
+=head1 SEE ALSO
+
+L<Module::Install>
+
+=head1 AUTHORS
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2003, 2004 by Audrey Tang E<lt>autrijus@autrijus.orgE<gt>.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Bundle.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Bundle.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Bundle.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Bundle.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,195 @@
+package Module::Install::Bundle;
+
+use strict;
+use Cwd ();
+use File::Find ();
+use File::Copy ();
+use File::Basename ();
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+sub auto_bundle {
+ my $self = shift;
+
+ # Flatten array of arrays into a single array
+ my @core = map @$_, map @$_, grep ref, $self->requires;
+
+ $self->bundle(@core);
+}
+
+sub bundle {
+ my $self = shift;
+ $self->admin->bundle(@_) if $self->is_admin;
+
+ my $cwd = Cwd::cwd();
+ my $bundles = $self->read_bundles;
+ my $bundle_dir = $self->_top->{bundle};
+ $bundle_dir =~ s/\W+/\\W+/g;
+
+ while (my ($name, $version) = splice(@_, 0, 2)) {
+ $version ||= 0;
+
+ my $source = $bundles->{$name} or die "Cannot find bundle source for $name";
+ my $target = File::Basename::basename($source);
+ $self->bundles($name, $target);
+
+ next if eval "use $name $version; 1";
+ mkdir $target or die $! unless -d $target;
+
+ # XXX - clean those directories upon "make clean"?
+ File::Find::find({
+ wanted => sub {
+ my $out = $_;
+ $out =~ s/$bundle_dir/./i;
+ mkdir $out if -d;
+ File::Copy::copy($_ => $out) unless -d;
+ },
+ no_chdir => 1,
+ }, $source);
+ }
+
+ chdir $cwd;
+}
+
+sub read_bundles {
+ my $self = shift;
+ my %map;
+
+ local *FH;
+ open FH, $self->_top->{bundle} . ".yml" or return {};
+ while (<FH>) {
+ /^(.*?): (['"])?(.*?)\2$/ or next;
+ $map{$1} = $3;
+ }
+ close FH;
+
+ return \%map;
+}
+
+
+sub auto_bundle_deps {
+ my $self = shift;
+
+ # Flatten array of arrays into a single array
+ my @core = map @$_, map @$_, grep ref, $self->requires;
+ while (my ($name, $version) = splice(@core, 0, 2)) {
+ next unless $name;
+ $self->bundle_deps($name, $version);
+ $self->bundle($name, $version);
+ }
+}
+
+sub bundle_deps {
+ my ($self, $pkg, $version) = @_;
+ my $deps = $self->admin->scan_dependencies($pkg) or return;
+
+ foreach my $key (sort keys %$deps) {
+ $self->bundle($key, ($key eq $pkg) ? $version : 0);
+ }
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Module::Install::Bundle - Bundle distributions along with your distribution
+
+=head1 SYNOPSIS
+
+Have your Makefile.PL read as follows:
+
+ use inc::Module::Install;
+
+ name 'Foo-Bar';
+ all_from 'lib/Foo/Bar.pm';
+ requires 'Baz' => '1.60';
+
+ # one of either:
+ bundle 'Baz' => '1.60';
+ # OR:
+ auto_bundle;
+
+ WriteAll;
+
+=head1 DESCRIPTION
+
+Module::Install::Bundle allows you to bundle a CPAN distribution within your
+distribution. When your end-users install your distribution, the bundled
+distribution will be installed along with yours, unless a newer version of
+the bundled distribution already exists on their local filesystem.
+
+While bundling will increase the size of your distribution, it has several
+benefits:
+
+ Allows installation of bundled distributions when CPAN is unavailable
+ Allows installation of bundled distributions when networking is unavailable
+ Allows everything your distribution needs to be packaged in one place
+
+Bundling differs from auto-installation in that when it comes time to
+install, a bundled distribution will be installed based on the distribution
+bundled with your distribution, whereas with auto-installation the distibution
+to be installed will be acquired from CPAN and then installed.
+
+=head1 METHODS
+
+=over 4
+
+=item * auto_bundle()
+
+Takes no arguments, will bundle every distribution specified by a C<requires()>.
+When you, as a module author, do a C<perl Makefile.PL> the latest versions of
+the distributions to be bundled will be acquired from CPAN and placed in
+F<inc/BUNDLES/>.
+
+=item * bundle($name, $version)
+
+Takes a list of key/value pairs specifying a distribution name and version
+number. When you, as a module author, do a perl Makefile.PL the distributions
+that you specified with C<bundle()> will be acquired from CPAN and placed in
+F<inc/BUNDLES/>.
+
+=item * bundle_deps($name, $version)
+
+Same as C<bundle>, except that all dependencies of the bundled modules are
+also detected and bundled. To use this function, you need to declare the
+minimum supported perl version first, like this:
+
+ requires( perl => 5.005 );
+
+=item * auto_bundle_deps
+
+Same as C<auto_bundle>, except that all dependencies of the bundled
+modules are also detected and bundled. This function has the same constraints as bundle_deps.
+
+=back
+
+=head1 BUGS
+
+Please report any bugs to (patches welcome):
+
+ http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Module-Install
+
+=head1 AUTHORS
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+Documentation by Adam Foxson E<lt>afoxson@pobox.comE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2003, 2004, 2005 by Audrey Tang E<lt>autrijus@autrijus.orgE<gt>.
+
+This program is free software; you can redistribute it and/or modify it under
+the same terms as Perl itself.
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Can.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Can.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Can.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Can.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,17 +1,16 @@
-#line 1
package Module::Install::Can;
use strict;
-use Module::Install::Base;
-use Config ();
-use File::Spec ();
-use ExtUtils::MakeMaker ();
+use Config ();
+use File::Spec ();
+use ExtUtils::MakeMaker ();
+use Module::Install::Base ();
-use vars qw{$VERSION $ISCORE @ISA};
+use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
- @ISA = qw{Module::Install::Base};
}
# check if we can load some module
@@ -78,4 +77,80 @@
__END__
-#line 156
+=pod
+
+=head1 NAME
+
+Module::Install::Can - Utility functions for capability detection
+
+=head1 DESCRIPTION
+
+C<Module::Install::Can> contains a number of functions for authors to use
+when creating customised smarter installers. The functions simplify
+standard tests so that you can express your dependencies and conditions
+much more simply, and make your installer much easier to maintain.
+
+=head1 COMMANDS
+
+=head2 can_use
+
+ can_use('Module::Name');
+ can_use('Module::Name', 1.23);
+
+The C<can_use> function tests the ability to load a specific named
+module. Currently it will also actually load the module in the
+process, although this may change in the future.
+
+Takes an optional second param of a version number. The currently
+installed version of the module will be tested to make sure it is
+equal to or greater than the specified version.
+
+Returns true if the module can be loaded, or false (in both scalar or
+list context) if not.
+
+=head2 can_run
+
+ can_run('cvs');
+
+The C<can_run> function tests the ability to run a named command or
+program on the local system.
+
+Returns true if so, or false (both in scalar and list context) if not.
+
+=head2 can_cc
+
+ can_cc();
+
+The C<can_cc> function test the ability to locate a C compiler on the
+local system. Returns true if the C compiler can be found, or false
+(both in scalar and list context) if not.
+
+=head1 TO DO
+
+Currently, the use of a C<can_foo> command in a single problem domain
+(for example C<can_use>) results in the inclusion of additional
+functionality from different problem domains (for example C<can_run>).
+
+This module should ultimately be broken up, and the individual
+functions redestributed to different domain-specific extensions.
+
+=head1 AUTHORS
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+=head1 SEE ALSO
+
+L<Module::Install>, L<Class::Inspector>
+
+=head1 COPYRIGHT
+
+Copyright 2006 Audrey Tang, Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Compiler.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Compiler.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Compiler.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Compiler.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,123 @@
+package Module::Install::Compiler;
+
+use strict;
+use File::Basename ();
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+sub ppport {
+ my $self = shift;
+ if ( $self->is_admin ) {
+ return $self->admin->ppport(@_);
+ } else {
+ # Fallback to just a check
+ my $file = shift || 'ppport.h';
+ unless ( -f $file ) {
+ die "Packaging error, $file is missing";
+ }
+ }
+}
+
+sub cc_files {
+ require Config;
+ my $self = shift;
+ $self->makemaker_args(
+ OBJECT => join ' ', map { substr($_, 0, -2) . $Config::Config{_o} } @_
+ );
+}
+
+sub cc_inc_paths {
+ my $self = shift;
+ $self->makemaker_args(
+ INC => join ' ', map { "-I$_" } @_
+ );
+}
+
+sub cc_lib_paths {
+ my $self = shift;
+ $self->makemaker_args(
+ LIBS => join ' ', map { "-L$_" } @_
+ );
+}
+
+sub cc_lib_links {
+ my $self = shift;
+ $self->makemaker_args(
+ LIBS => join ' ', $self->makemaker_args->{LIBS}, map { "-l$_" } @_
+ );
+}
+
+sub cc_optimize_flags {
+ my $self = shift;
+ $self->makemaker_args(
+ OPTIMIZE => join ' ', @_
+ );
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Module::Install::Compiler - Commands for interacting with the C compiler
+
+=head1 SYNOPSIS
+
+ To be completed
+
+=head1 DESCRIPTION
+
+Many Perl modules that contains C and XS code have fiendishly complex
+F<Makefile.PL> files, because L<ExtUtils::MakeMaker> doesn't itself provide
+a huge amount of assistance and automation in this area.
+
+B<Module::Install::Compiler> provides a number of commands that take care
+of common utility tasks, and try to take some of intricacy out of creating
+C and XS modules.
+
+=head1 COMMANDS
+
+To be completed
+
+=head1 TO DO
+
+The current implementation is relatively fragile and minimalistic.
+
+It only handles some very basic wrapper around L<ExtUtils::MakeMaker>.
+
+It is currently undergoing extensive refactoring to provide a more
+generic compiler flag generation capability. This may take some time,
+and if anyone who maintains a Perl module that makes use of the compiler
+would like to help out, your assistance would be greatly appreciated.
+
+=head1 SEE ALSO
+
+L<Module::Install>, L<ExtUtils::MakeMaker>
+
+=head1 AUTHORS
+
+Refactored by Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+Mostly by Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+Based on original works by Brian Ingerson E<lt>ingy@cpan.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2002, 2003, 2004, 2006 by Adam Kennedy, Audrey Tang, Brian Ingerson.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Deprecated.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Deprecated.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Deprecated.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Deprecated.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,115 @@
+package Module::Install::Deprecated;
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+
+
+
+
+#####################################################################
+# Previous API for Module::Install::Compoler
+
+sub c_files {
+ warn "c_files has been changed to cc_files to reduce confusion and keep all compiler commands as cc_";
+ shift()->cc_files(@_);
+}
+
+sub inc_paths {
+ warn "inc_paths has been changed to cc_inc_paths due to confusion between Perl and C";
+ shift()->cc_inc_paths(@_);
+}
+
+sub lib_paths {
+ warn "lib_paths has been changed to cc_lib_paths due to confusion between Perl and C";
+ shift()->cc_lib_paths(@_);
+}
+
+sub lib_links {
+ warn "lib_links has been changed to cc_lib_links due to confusion between Perl and C";
+ shift()->cc_lib_links(@_);
+}
+
+sub optimize_flags {
+ warn "optimize_flags has been changed to cc_optimize_flags for consistency reasons";
+ shift()->cc_optimize_flags(@_);
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Module::Install::Deprecated - Warnings and help for deprecated commands
+
+=head1 DESCRIPTION
+
+One of the nicest features of L<Module::Install> is that as it improves,
+there is no need to take into account user compatibility, because users do
+not need to install L<Module::Install> itself.
+
+As a result, the L<Module::Install> API changes at a faster rate than usual,
+and this results in deprecated commands.
+
+C<Module::Install::Deprecated> provides implementations of the deprecated
+commands, so that when an author is upgrading their L<Module::Install> and
+they are using a deprecated command they will be told that the command has
+been deprecated, and what the author should use instead.
+
+This extension should NEVER end up bundled into the distribution tarball.
+
+=head1 COMMANDS
+
+=head2 c_files
+
+The C<c_files> command has been changed to C<cc_files> to reduce confusion
+and keep all compiler commands within a consistent C<ff_foo> naming scheme.
+
+=head2 inc_paths
+
+The C<inc_paths> command has been changed to C<cc_inc_paths> due to
+confusion between Perl and C.
+
+=head2 lib_paths
+
+The C<lib_paths> command has been changed to C<cc_lib_paths> due to confusion
+between Perl and C.
+
+=head2 lib_links
+
+The C<lib_links> command has been changed to C<cc_lib_links> due to confusion
+between Perl and C.
+
+=head2 optimize_flags
+
+The C<optimize_flags> command has been changed to C<cc_optimize_flags> for
+consistency reasons.
+
+=head1 AUTHORS
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+=head1 SEE ALSO
+
+L<Module::Install>
+
+=head1 COPYRIGHT
+
+Copyright 2006 Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/DSL.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/DSL.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/DSL.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/DSL.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,91 @@
+package Module::Install::DSL;
+
+use strict;
+use vars qw{$VERSION $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ $ISCORE = 1;
+ *inc::Module::Install::DSL::VERSION = *VERSION;
+ @inc::Module::Install::DSL::ISA = __PACKAGE__;
+}
+
+sub import {
+ # Read in the rest of the Makefile.PL
+ open 0 or die "Couldn't open $0: $!";
+ my $dsl;
+ SCOPE: {
+ local $/ = undef;
+ $dsl = join "", <0>;
+ }
+
+ # Change inc::Module::Install::DSL to the regular one.
+ # Remove anything before the use inc::... line.
+ $dsl =~ s/.*?^\s*use\s+(?:inc::)?Module::Install::DSL(\b[^;]*);\s*\n//sm;
+
+ # Load inc::Module::Install as we would in a regular Makefile.Pl
+ SCOPE: {
+ package main;
+ require inc::Module::Install;
+ inc::Module::Install->import;
+ }
+
+ # Add the ::DSL plugin to the list of packages in /inc
+ my $admin = $Module::Install::MAIN->{admin};
+ if ( $admin ) {
+ my $from = $INC{"$admin->{path}/DSL.pm"};
+ my $to = "$admin->{base}/$admin->{prefix}/$admin->{path}/DSL.pm";
+ $admin->copy( $from => $to );
+ }
+
+ # Convert the basic syntax to code
+ my $code = "package main;\n\n"
+ . dsl2code($dsl)
+ . "\n\nWriteAll();\n";
+
+ # Execute the script
+ eval $code;
+ print STDERR "Failed to execute the generated code" if $@;
+
+ exit(0);
+}
+
+sub dsl2code {
+ my $dsl = shift;
+
+ # Split into lines and strip blanks
+ my @lines = grep { /\S/ } split /[\012\015]+/, $dsl;
+
+ # Each line represents one command
+ my @code = ();
+ foreach my $line ( @lines ) {
+ # Split the lines into tokens
+ my @tokens = split /\s+/, $line;
+
+ # The first word is the command
+ my $command = shift @tokens;
+ my @params = ();
+ my @suffix = ();
+ while ( @tokens ) {
+ my $token = shift @tokens;
+ if ( $token eq 'if' or $token eq 'unless' ) {
+ # This is the beginning of a suffix
+ push @suffix, $token;
+ push @suffix, @tokens;
+ last;
+ } else {
+ # Convert to a string
+ $token =~ s/([\\\'])/\\$1/g;
+ push @params, "'$token'";
+ }
+ };
+
+ # Merge to create the final line of code
+ @tokens = ( $command, @params ? join( ', ', @params ) : (), @suffix );
+ push @code, join( ' ', @tokens ) . ";\n";
+ }
+
+ # Join into the complete code block
+ return join( '', @code );
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/External.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/External.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/External.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/External.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,138 @@
+package Module::Install::External;
+
+# Provides dependency declarations for external non-Perl things
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION $ISCORE @ISA};
+BEGIN {
+ $VERSION = '0.91';
+ $ISCORE = 1;
+ @ISA = qw{Module::Install::Base};
+}
+
+sub requires_external_cc {
+ my $self = shift;
+
+ # We need a C compiler, use the can_cc method for this
+ unless ( $self->can_cc ) {
+ print "Unresolvable missing external dependency.\n";
+ print "This package requires a C compiler.\n";
+ print STDERR "NA: Unable to build distribution on this platform.\n";
+ exit(0);
+ }
+
+ # Unlike some of the other modules, while we need to specify a
+ # C compiler as a dep, it needs to be a build-time dependency.
+
+ 1;
+}
+
+sub requires_external_bin {
+ my ($self, $bin, $version) = @_;
+ if ( $version ) {
+ die "requires_external_bin does not support versions yet";
+ }
+
+ # Load the package containing can_run early,
+ # to avoid breaking the message below.
+ $self->load('can_run');
+
+ # Locate the bin
+ print "Locating required external dependency bin:$bin...";
+ my $found_bin = $self->can_run( $bin );
+ if ( $found_bin ) {
+ print " found at $found_bin.\n";
+ } else {
+ print " missing.\n";
+ print "Unresolvable missing external dependency.\n";
+ print "Please install '$bin' seperately and try again.\n";
+ print STDERR "NA: Unable to build distribution on this platform.\n";
+ exit(0);
+ }
+
+ # Once we have some way to specify external deps, do it here.
+ # In the mean time, continue as normal.
+
+ 1;
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Module::Install::External - Specify dependencies on external non-Perl things
+
+=head1 DESCRIPTION
+
+C<Module::Install::External> provides command that allow you to
+declaratively specify a dependency on a program or system that is not
+Perl.
+
+The commands it provides are similar to those in L<Module::Install::Can>,
+except that they implement an explicit dependency, in addition to just
+working out if the particular thing is available.
+
+=head1 COMMANDS
+
+=head2 requires_external_cc
+
+ requires_external_cc;
+
+The C<requires_external_cc> command explicitly specifies that a C compiler
+is required in order to build (at F<make>-time) the distribution.
+
+It does not take any params, and aborts the F<Makefile.PL> execution
+in a way that an automated installation or testing system will interpret
+as a C<NA> ("not applicable to this platform") result.
+
+This maybe be changed to an alternative abort result at a later time.
+
+Returns true as a convenience.
+
+=head2 requires_external_bin
+
+ requires_external_bin 'cvs';
+
+The C<requires_external_bin> command takes the name of a system command
+or program, similar to the C<can_run> command, except that
+C<requires_external_bin> checks in a way that is a declarative explicit
+dependency.
+
+The takes a single param of the command/program name, and aborts the
+C<Makefile.PL> execution in a way that an automated installation or
+testing system will interpret as a C<NA> ("not applicable to this
+platform") result.
+
+Returns true as a convenience.
+
+=head1 TO DO
+
+Work out how to save the external dependency metadata, in agreement with
+the larger Perl community.
+
+Implement the agreed external dependency metadata solution.
+
+=head1 AUTHORS
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+=head1 SEE ALSO
+
+L<Module::Install>
+
+=head1 COPYRIGHT
+
+Copyright 2006 Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Fetch.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Fetch.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Fetch.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Fetch.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,14 +1,13 @@
-#line 1
package Module::Install::Fetch;
use strict;
-use Module::Install::Base;
+use Module::Install::Base ();
-use vars qw{$VERSION $ISCORE @ISA};
+use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
- @ISA = qw{Module::Install::Base};
}
sub get_file {
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Include.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Include.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Include.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Include.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,14 +1,13 @@
-#line 1
package Module::Install::Include;
use strict;
-use Module::Install::Base;
+use Module::Install::Base ();
-use vars qw{$VERSION $ISCORE @ISA};
+use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
- @ISA = qw{Module::Install::Base};
}
sub include {
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Inline.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Inline.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Inline.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Inline.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,49 @@
+package Module::Install::Inline;
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+sub Inline { $_[0] }
+
+sub write {
+ my $self = shift;
+ my $name = $self->module_name || $self->name
+ or die "Please set name() before calling &Inline->write\n";
+ $name =~ s/-/::/g;
+ my $object = (split(/::/, $name))[-1] or return;
+ my $version = $self->version
+ or die "Please set version() or version_from() before calling &Inline->write\n";
+
+ $version =~ /^\d\.\d\d$/ or die <<"END_MESSAGE";
+Invalid version '$version' for $name.
+Must be of the form '#.##'. (For instance '1.23')
+END_MESSAGE
+
+ $self->clean_files('_Inline', "$object.inl");
+ $self->build_requires('Inline' => 0.44); # XXX: check for existing? yagni?
+
+ my $class = ref($self);
+ my $prefix = $self->_top->{prefix};
+ $self->postamble(<<"MAKEFILE");
+# --- $class section:
+
+.SUFFIXES: .pm .inl
+
+.pm.inl:
+\t\$(PERL) -I$prefix "-Mblib" "-MInline=NOISY,_INSTALL_" "-M$name" -e1 $version \$(INST_ARCHLIB)
+
+pure_all :: $object.inl
+
+MAKEFILE
+
+ $self->Makefile->write;
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Makefile.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Makefile.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Makefile.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Makefile.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,15 +1,14 @@
-#line 1
package Module::Install::Makefile;
use strict 'vars';
-use Module::Install::Base;
-use ExtUtils::MakeMaker ();
+use ExtUtils::MakeMaker ();
+use Module::Install::Base ();
-use vars qw{$VERSION $ISCORE @ISA};
+use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
- @ISA = qw{Module::Install::Base};
}
sub Makefile { $_[0] }
@@ -265,4 +264,131 @@
__END__
-#line 394
+=pod
+
+=head1 NAME
+
+Module::Install::MakeMaker - Extension Rules for ExtUtils::MakeMaker
+
+=head1 SYNOPSIS
+
+In your F<Makefile.PL>:
+
+ use inc::Module::Install;
+ WriteMakefile();
+
+=head1 DESCRIPTION
+
+This module is a wrapper around B<ExtUtils::MakeMaker>. It exports
+two functions: C<prompt> (an alias for C<ExtUtils::MakeMaker::prompt>)
+and C<WriteMakefile>.
+
+The C<WriteMakefile> function will pass on keyword/value pair functions
+to C<ExtUtils::MakeMaker::WriteMakefile>. The required parameters
+C<NAME> and C<VERSION> (or C<VERSION_FROM>) are not necessary if
+it can find them unambiguously in your code.
+
+=head1 CONFIGURATION OPTIONS
+
+This module also adds some Configuration parameters of its own:
+
+=head2 NAME
+
+The NAME parameter is required by B<ExtUtils::MakeMaker>. If you have a
+single module in your distribution, or if the module name indicated by
+the current directory exists under F<lib/>, this module will use the
+guessed package name as the default.
+
+If this module can't find a default for C<NAME> it will ask you to specify
+it manually.
+
+=head2 VERSION
+
+B<ExtUtils::MakeMaker> requires either the C<VERSION> or C<VERSION_FROM>
+parameter. If this module can guess the package's C<NAME>, it will attempt
+to parse the C<VERSION> from it.
+
+If this module can't find a default for C<VERSION> it will ask you to
+specify it manually.
+
+=head1 MAKE TARGETS
+
+B<ExtUtils::MakeMaker> provides you with many useful C<make> targets. A
+C<make> B<target> is the word you specify after C<make>, like C<test>
+for C<make test>. Some of the more useful targets are:
+
+=over 4
+
+=item * all
+
+This is the default target. When you type C<make> it is the same as
+entering C<make all>. This target builds all of your code and stages it
+in the C<blib> directory.
+
+=item * test
+
+Run your distribution's test suite.
+
+=item * install
+
+Copy the contents of the C<blib> directory into the appropriate
+directories in your Perl installation.
+
+=item * dist
+
+Create a distribution tarball, ready for uploading to CPAN or sharing
+with a friend.
+
+=item * clean distclean purge
+
+Remove the files created by C<perl Makefile.PL> and C<make>.
+
+=item * help
+
+Same as typing C<perldoc ExtUtils::MakeMaker>.
+
+=back
+
+This module modifies the behaviour of some of these targets, depending
+on your requirements, and also adds the following targets to your Makefile:
+
+=over 4
+
+=item * cpurge
+
+Just like purge, except that it also deletes the files originally added
+by this module itself.
+
+=item * chelp
+
+Short cut for typing C<perldoc Module::Install>.
+
+=item * distsign
+
+Short cut for typing C<cpansign -s>, for B<Module::Signature> users to
+sign the distribution before release.
+
+=back
+
+=head1 SEE ALSO
+
+L<Module::Install>, L<CPAN::MakeMaker>, L<CPAN::MakeMaker::Philosophy>
+
+=head1 AUTHORS
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+Brian Ingerson E<lt>INGY@cpan.orgE<gt>
+
+=head1 COPYRIGHT
+
+Some parts copyright 2008 - 2009 Adam Kennedy.
+
+Copyright 2002, 2003, 2004 Audrey Tang and Brian Ingerson.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/MakeMaker.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/MakeMaker.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/MakeMaker.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/MakeMaker.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,49 @@
+package Module::Install::MakeMaker;
+
+use strict;
+use ExtUtils::MakeMaker ();
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+my $makefile;
+
+sub WriteMakefile {
+ my ($self, %args) = @_;
+ $makefile = $self->load('Makefile');
+
+ # mapping between MakeMaker and META.yml keys
+ $args{MODULE_NAME} = $args{NAME};
+ unless ( $args{NAME} = $args{DISTNAME} or ! $args{MODULE_NAME} ) {
+ $args{NAME} = $args{MODULE_NAME};
+ $args{NAME} =~ s/::/-/g;
+ }
+
+ foreach my $key ( qw{name module_name version version_from abstract author installdirs} ) {
+ my $value = delete($args{uc($key)}) or next;
+ $self->$key($value);
+ }
+
+ if (my $prereq = delete($args{PREREQ_PM})) {
+ while (my($k,$v) = each %$prereq) {
+ $self->requires($k,$v);
+ }
+ }
+
+ # put the remaining args to makemaker_args
+ $self->makemaker_args(%args);
+}
+
+END {
+ if ( $makefile ) {
+ $makefile->write;
+ $makefile->Meta->write;
+ }
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Metadata.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Metadata.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Metadata.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Metadata.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,19 +1,17 @@
-#line 1
package Module::Install::Metadata;
use strict 'vars';
-use Module::Install::Base;
+use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
- @ISA = qw{Module::Install::Base};
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
}
my @boolean_keys = qw{
sign
- mymeta
};
my @scalar_keys = qw{
@@ -440,21 +438,21 @@
/ixms ) {
my $license_text = $1;
my @phrases = (
- 'under the same (?:terms|license) as perl itself' => 'perl', 1,
- 'GNU general public license' => 'gpl', 1,
- 'GNU public license' => 'gpl', 1,
- 'GNU lesser general public license' => 'lgpl', 1,
- 'GNU lesser public license' => 'lgpl', 1,
- 'GNU library general public license' => 'lgpl', 1,
- 'GNU library public license' => 'lgpl', 1,
- 'BSD license' => 'bsd', 1,
- 'Artistic license' => 'artistic', 1,
- 'GPL' => 'gpl', 1,
- 'LGPL' => 'lgpl', 1,
- 'BSD' => 'bsd', 1,
- 'Artistic' => 'artistic', 1,
- 'MIT' => 'mit', 1,
- 'proprietary' => 'proprietary', 0,
+ 'under the same (?:terms|license) as (?:perl|the perl programming language) itself' => 'perl', 1,
+ 'GNU general public license' => 'gpl', 1,
+ 'GNU public license' => 'gpl', 1,
+ 'GNU lesser general public license' => 'lgpl', 1,
+ 'GNU lesser public license' => 'lgpl', 1,
+ 'GNU library general public license' => 'lgpl', 1,
+ 'GNU library public license' => 'lgpl', 1,
+ 'BSD license' => 'bsd', 1,
+ 'Artistic license' => 'artistic', 1,
+ 'GPL' => 'gpl', 1,
+ 'LGPL' => 'lgpl', 1,
+ 'BSD' => 'bsd', 1,
+ 'Artistic' => 'artistic', 1,
+ 'MIT' => 'mit', 1,
+ 'proprietary' => 'proprietary', 0,
);
while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) {
$pattern =~ s{\s+}{\\s+}g;
@@ -506,17 +504,29 @@
}
}
+sub test_requires_from {
+ my $self = shift;
+ my $content = Module::Install::_readperl($_[0]);
+ my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg;
+ while ( @requires ) {
+ my $module = shift @requires;
+ my $version = shift @requires;
+ $self->test_requires( $module => $version );
+ }
+}
+
# Convert triple-part versions (eg, 5.6.1 or 5.8.9) to
# numbers (eg, 5.006001 or 5.008009).
# Also, convert double-part versions (eg, 5.8)
sub _perl_version {
my $v = $_[-1];
- $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e;
+ $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e;
$v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e;
$v =~ s/(\.\d\d\d)000$/$1/;
$v =~ s/_.+$//;
if ( ref($v) ) {
- $v = $v + 0; # Numify
+ # Numify
+ $v = $v + 0;
}
return $v;
}
@@ -526,23 +536,58 @@
######################################################################
-# MYMETA.yml Support
+# MYMETA Support
sub WriteMyMeta {
die "WriteMyMeta has been deprecated";
}
-sub write_mymeta {
+sub write_mymeta_yaml {
my $self = shift;
-
- # If there's no existing META.yml there is nothing we can do
- return unless -f 'META.yml';
# We need YAML::Tiny to write the MYMETA.yml file
unless ( eval { require YAML::Tiny; 1; } ) {
return 1;
}
+ # Generate the data
+ my $meta = $self->_write_mymeta_data or return 1;
+
+ # Save as the MYMETA.yml file
+ print "Writing MYMETA.yml\n";
+ YAML::Tiny::DumpFile('MYMETA.yml', $meta);
+}
+
+sub write_mymeta_json {
+ my $self = shift;
+
+ # We need JSON to write the MYMETA.json file
+ unless ( eval { require JSON; 1; } ) {
+ return 1;
+ }
+
+ # Generate the data
+ my $meta = $self->_write_mymeta_data or return 1;
+
+ # Save as the MYMETA.yml file
+ print "Writing MYMETA.json\n";
+ Module::Install::_write(
+ 'MYMETA.json',
+ JSON->new->pretty(1)->canonical->encode($meta),
+ );
+}
+
+sub _write_mymeta_data {
+ my $self = shift;
+
+ # If there's no existing META.yml there is nothing we can do
+ return undef unless -f 'META.yml';
+
+ # We need Parse::CPAN::Meta to load the file
+ unless ( eval { require Parse::CPAN::Meta; 1; } ) {
+ return undef;
+ }
+
# Merge the perl version into the dependencies
my $val = $self->Meta->{values};
my $perl = delete $val->{perl_version};
@@ -558,7 +603,7 @@
}
# Load the advisory META.yml file
- my @yaml = YAML::Tiny::LoadFile('META.yml');
+ my @yaml = Parse::CPAN::Meta::LoadFile('META.yml');
my $meta = $yaml[0];
# Overwrite the non-configure dependency hashs
@@ -572,9 +617,7 @@
$meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } };
}
- # Save as the MYMETA.yml file
- print "Writing MYMETA.yml\n";
- YAML::Tiny::DumpFile('MYMETA.yml', $meta);
+ return $meta;
}
1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/PAR.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/PAR.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/PAR.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/PAR.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,274 @@
+package Module::Install::PAR;
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+=head1 NAME
+
+Module::Install::PAR - Module::Install Support for PAR::Dist packages
+
+=head1 SYNOPSIS
+
+To offer your users the possibility to install binaries if no C
+compiler was found, you could use this simplistic stub:
+
+ use inc::Module::Install;
+
+ name 'Foo';
+ all_from 'lib/Foo.pm';
+
+ # Which CPAN directory do we fetch binaries from?
+ par_base 'SMUELLER';
+
+ unless ( can_cc() ) {
+ my $okay = extract_par( fetch_par );
+ if (not $okay) {
+ die "No compiler and no binary package found. Aborting.\n";
+ }
+ }
+
+ WriteAll;
+
+=head1 DESCRIPTION
+
+This module adds a couple of directives to Module::Install
+related to installing and creating PAR::Dist distributions.
+
+=head2 par_base
+
+This directive sets the CPAN ID from whose CPAN directory to
+fetch binaries from. For example, you can choose to download
+binaries from http://www.cpan.org/authors/id/S/SM/SMUELLER/
+or its ftp counterpart by writing:
+
+ par_base 'SMUELLER';
+
+By default, the name of the file to fetch is generated from
+the distribution name, its version, your platform name and your
+perl version concatenated with dashes.
+
+The directive, however, takes an optional second
+argument which specifies the name of the file to fetch.
+(Though C<par_base> does not fetch files itself, see below.)
+
+ par_base 'SMUELLER', 'foo';
+
+Once C<fetch_par> is called, the file 'foo' will be downloaded
+from SMUELLER's CPAN directory. (It doesn't exist.)
+
+The second argument could be used to fetch platform-agnostic
+binaries:
+
+ par_base 'SMUELLER', "Some-Distribution-0.01.par";
+
+(Documentation TODO: Use the previously defined distribution
+name and version in example.)
+
+=cut
+
+sub par_base {
+ my ($self, $base, $file) = @_;
+ my $class = ref($self);
+ my $inc_class = join('::', @{$self->_top}{qw(prefix name)});
+ my $ftp_base;
+
+ if ( defined $base and length $base ) {
+ if ( $base =~ m!^(([A-Z])[A-Z])[-_A-Z]+\Z! ) {
+ $self->{mailto} = "$base\@cpan.org";
+ $ftp_base = "ftp://ftp.cpan.org/pub/CPAN/authors/id/$2/$1/$base";
+ $base = "http://www.cpan.org/authors/id/$2/$1/$base";
+ } elsif ( $base !~ m!^(\w+)://! ) {
+ die "Cannot recognize path '$base'; please specify an URL or CPAN ID";
+ }
+ $base .= '/' unless $base =~ m!/\Z!;
+ $ftp_base .= '/' unless $ftp_base =~ m!/\Z!;
+ }
+
+ require Config;
+ my $suffix = "$Config::Config{archname}-$Config::Config{version}.par";
+
+ unless ( $file ||= $self->{file} ) {
+ my $name = $self->name or return;
+ my $version = $self->version or return;
+ $name =~ s!::!-!g;
+ $self->{file} = $file = "$name-$version-$suffix";
+ }
+
+ my $perl = $^X;
+ $perl = Win32::GetShortPathName($perl)
+ if $perl =~ / / and defined &Win32::GetShortPathName;
+
+ $self->preamble(<<"END_MAKEFILE") if $base;
+# --- $class section:
+
+all ::
+\t\$(NOECHO) $perl "-M$inc_class" -e "extract_par(q($file))"
+
+END_MAKEFILE
+
+ $self->postamble(<<"END_MAKEFILE");
+# --- $class section:
+
+$file: all test
+\t\$(NOECHO) \$(PERL) "-M$inc_class" -e "make_par(q($file))"
+
+par :: $file
+\t\$(NOECHO) \$(NOOP)
+
+par-upload :: $file
+\tcpan-upload -verbose $file
+
+END_MAKEFILE
+
+ $self->{url} = $base;
+ $self->{ftp_url} = $ftp_base;
+ $self->{suffix} = $suffix;
+
+ return $self;
+}
+
+=head2 fetch_par
+
+Fetches the .par file previously referenced in the documentation
+of the C<par_base> directive.
+
+C<fetch_par> can be used without arguments given the C<par_base>
+directive was used before. It will return the name of the file it
+fetched.
+
+If the first argument is an URL or a CPAN user ID, the file is
+fetched from that directory unless an URL has been previously set.
+(Read that again.)
+
+If the second argument is a file name
+it is used as the name of the file to download.
+
+If the file could not be fetched, a suitable error message
+about no package being available, yada yada yada, is printed.
+You can turn this off by specifying a true third argument.
+
+ # Try to fetch the package (see par_base) but
+ # don't be verbose about failures
+ my $file = fetch_par('', '', undef);
+
+=cut
+
+sub fetch_par {
+ my ($self, $url, $file, $quiet) = @_;
+ $url = '' if not defined $url;
+ $file = '' if not defined $file;
+
+ $url = $self->{url} || $self->par_base($url)->{url};
+ my $ftp_url = $self->{ftp_url};
+ $file ||= $self->{file};
+
+ return $file if -f $file or $self->get_file(
+ url => "$url$file",
+ ftp_url => "$ftp_url$file"
+ );
+
+ require Config;
+ print <<"END_MESSAGE" if $self->{mailto} and ! $quiet;
+*** No installation package available for your architecture.
+However, you may wish to generate one with '$Config::Config{make} par' and send
+it to <$self->{mailto}>, so other people on the same platform
+can benefit from it.
+*** Proceeding with normal installation...
+END_MESSAGE
+ return;
+}
+
+=head2 extract_par
+
+Takes the name of a PAR::Dist archive file as first argument. The 'blib/'
+directory of this archive is extracted and the 'pm_to_blib' is created.
+
+Typical shorthand usage:
+
+ extract_par( fetch_par ) or die "Could not install PAR::Dist archive.";
+
+=cut
+
+sub extract_par {
+ my ($self, $file) = @_;
+ return unless -f $file;
+
+ if ( eval { require Archive::Zip; 1 } ) {
+ my $zip = Archive::Zip->new;
+ return unless $zip->read($file) == Archive::Zip::AZ_OK()
+ and $zip->extractTree('', 'blib/') == Archive::Zip::AZ_OK();
+ } elsif ( $self->can_run('unzip') ) {
+ return if system( unzip => $file, qw(-d blib) );
+ }
+ else {
+ die <<'HERE';
+Could not extract .par archive because neither Archive::Zip nor a
+working 'unzip' binary are available. Please consider installing
+Archive::Zip.
+HERE
+ }
+
+ local *PM_TO_BLIB;
+ open PM_TO_BLIB, '> pm_to_blib' or die $!;
+ close PM_TO_BLIB or die $!;
+
+ return 1;
+}
+
+=head2 make_par
+
+This directive requires PAR::Dist (version 0.03 or up) on your system.
+(And checks that it is available before continuing.)
+
+Creates a PAR::Dist archive from the 'blib/' subdirectory.
+
+First argument must be the name of the PAR::Dist archive to create.
+
+If your Makefile.PL has a C<par_base> directive, the C<make par>
+make target will be available. It uses this C<make_par> directive
+internally, so on your development system, you can do this to create
+a .par binary archive for your platform:
+
+ perl Makefile.PL
+ make
+ make par
+
+=cut
+
+sub make_par {
+ my ($self, $file) = @_;
+ unlink $file if -f $file;
+
+ unless ( eval { require PAR::Dist; PAR::Dist->VERSION >= 0.03 } ) {
+ warn "Please install PAR::Dist 0.03 or above first.";
+ return;
+ }
+
+ return PAR::Dist::blib_to_par( dist => $file );
+}
+
+1;
+
+=head1 AUTHOR
+
+Audrey Tang <cpan@audreyt.org>
+
+With documentation from Steffen Mueller <smueller@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2006. Audrey Tang.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Philosophy.pod DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Philosophy.pod
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Philosophy.pod 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Philosophy.pod 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,187 @@
+=head1 NAME
+
+Module::Install::Philosophy - The concepts behind Module::Install
+
+=head1 SYNOPSIS
+
+This document describes the personal philosophy behind the creation of
+B<CPAN::MakeMaker> (the predecessor of B<Module::Install>). The views
+expressed here belong to Brian Ingerson; if they are not of interest to
+you, you can safely ignore this document.
+
+=head1 I HAVE A DREAM
+
+I say to you today, my friends, that in spite of the difficulties and
+frustrations of the moment, I still have a dream. It is a dream deeply
+rooted in the Perl Module dream.
+
+I have a dream that one day this community will rise up and live out the
+true meaning of its creed: "We hold these truths to be self-evident:
+that all Perl authors are created equal."
+
+I have a dream that one day even the state of the C<CGI::> namespace, a
+desert state, sweltering with the heat of injustice and oppression, will
+be transformed into an oasis of freedom and justice.
+
+I have a dream that my four modules will one day live in an archive
+where they will not be judged by the number of their prerequisites but
+by the content of their source code.
+
+I have a dream today.
+
+=head1 DESCRIPTION
+
+The above is obviously a mutation of the monumental speech by great
+Martin Luther King (L<http://web66.coled.umn.edu/new/MLK/MLK.html>).
+While the contexts are vastly different, I feel that there are some
+serious parallelisms.
+
+The CPAN has become a place that is not free of injustice. This
+situation has arisen not out of directed oppression, but from a failure
+of our community to keep its tools sharp. It is the culmination of many
+small decisions made in the name of practicality. This is a sad state
+for an institution that was created to allow all interested people to
+contribute equally to the best of their ability.
+
+This assertion is rooted in my personal experience as an author. When I
+created my first Perl module, Inline.pm, I knew that I had done
+something important. But how was I to make a dent in vast Perl
+community?
+
+As a complete unknown in the Perl community, my voice did not travel
+far. I repeatedly tried to get even an acknowledgment from the gurus
+familiar with XS. No success. I resorted to sending messages with
+ridiculous subjects to C<modules@perl.org>.
+(L<http://www.xray.mpe.mpg.de/mailing-lists/modules/2000-08/msg00078.html>)
+No response. Through sheer determination and shameless self-promotion I
+eventually got the word out, and I hope the world is a slightly better
+place for it.
+
+Since then, Inline has won awards and I have had the privilege to meet almost
+all of Perl's finest. But I still remember the pain of starting out, and
+want to help invite more people into this wonderful world.
+
+One thing I have learned from experience is that the Perl community (and
+throw in the Python and Ruby people as well) is a small drop in the vast
+ocean of programming. It's a giant pot of Java out there; and a sea of
+C. Perl may not be the biggest fish, but with some care and cunning we
+could become a much bigger school.
+
+These are the current problems that I see with CPAN and the core modules:
+
+=over 4
+
+=item * New Modules don't help Older Perls
+
+If I were to guess what percent of all Perl5 installations were at the
+current release level (5.8.0 in October 2002) I would say 3-5%. That may
+even be generous. I'd say that over 40% of installations might still be
+at 5.005 or earlier.
+
+The biggest problem with adding a module to the core is that it only
+helps a small subset of Perl users for a long long time. Worse yet, a
+good module author will still probably avoid using the core additions as
+prerequisites, because they want their new module to work as well on
+5.005 as on 5.8.
+
+CPAN::MakeMaker should be able to help in this regard. For example,
+instead of putting Inline.pm into the core for 5.9, I can now
+effectively get it into the core for every version of Perl that
+Inline supports.
+
+=item * Author Exclusiveness
+
+Not just anybody can get a module into the core. It seems you have to
+know people in high places. If I were a brilliant new talent with a
+great new module, it would have a harder time getting the ear of the
+pumpking, then if I were, say, Damian Conway. In fact, I probably
+wouldn't even know where to start.
+
+=item * Reduced Competition
+
+One comment I've heard from some very good Perl programmers is
+"Everything important has already been done". Their feeling is that
+even though a module is suboptimal, it would be a waste of time to
+write a competing module. Who would use it instead of the one already
+in the core?
+
+When I write a competing module, I know that I have to make it at least
+twice as good as the existing one to even get noticed. That's not a bad
+thing, but should everybody be forced into that situation?
+
+For example, let's say that you have created a really useful CGI script.
+Let's also say that it makes use of your own B<CGI::Special> module,
+because B<CGI.pm> doesn't meet your needs. Even though your script might be
+generally useful and worth sharing, the fact that it requires a
+non-standard module can only negatively affect its acceptance. Trying to
+get general acceptance for the superior B<CGI::Special> module will be
+harder still.
+
+Core modules are assumed by the general public to be "Best of Breed".
+While this may be true for some modules at some point in time, it keeps
+talented people from attempting to "breed" something better.
+
+=item * Core Bloat
+
+Every time we add a module to the core it gets bigger and bigger. And we
+can't ever remove modules from the core, once they've been added.
+
+If I had my druthers, we'd remove all modules from the core that weren't
+necessary for either running Perl or installing modules. Of course, we'd
+need to set things up so that installing modules was so easy, that it
+could be done on the fly if necessary. Is this easily accomplishable?
+Nope. Is it impossible? Nope. We have the best language in the world to
+help us do it!
+
+=item * Maintenance Bitrot
+
+Believe it or not, Perl authors can sometimes acquire a "Life Beyond
+Perl". They get families or new hobbies or even hit by a bus. (This
+would be a "Death Beyond Perl".) The fact is, that once somebody writes
+a piece of code and shares it with the world, they are expected to
+maintain it for all time.
+
+That is being generous. There are others that think that once their
+module has become popular or made it into the core, they don't need to
+keep fixing and improving it. I have personally been guilty of this sin.
+
+And then there's the Damian Conway Effect. This plagues the exceptional
+authors who are so innovative and prolific they simply don't have time
+to maintain everything they have written.
+
+=back
+
+I initially formalized these opinions at the YAPC (Yet Another Perl
+Conference) in June 2001. Since then I have been trying to think of
+technological solutions to fix these social problems.
+
+One idea was dubbed NAPC. NAPC is CPAN backwards. It is a large system
+of precompiled modules that can be installed on the fly, with the goal
+of reducing the number of modules in the core. NAPC hasn't got started
+yet. I'd still like to do it someday, but it's a big problem with a lot
+of issues.
+
+B<CPAN::MakeMaker> (and now B<Module::Install>) on the other hand, is
+simple and ultimately flexible. It should work with all of the existing
+CPAN processes without requiring any changes from them. And new features
+can be continuously added. Even though it doesn't scratch all of my
+philosophical CPAN itches, it's a good start.
+
+=head1 CONCLUSION
+
+This is all just food for thought. Take it with a pinch of salt.
+
+=head1 AUTHOR
+
+Brian Ingerson E<lt>INGY@cpan.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2002. Brian Ingerson.
+
+This document is free documentation; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Run.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Run.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Run.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Run.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,15 @@
+package Module::Install::Run;
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+# eventually move the ipc::run / open3 stuff here.
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Scripts.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Scripts.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Scripts.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Scripts.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,28 @@
+package Module::Install::Scripts;
+
+use strict 'vars';
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+sub install_script {
+ my $self = shift;
+ my $args = $self->makemaker_args;
+ my $exe = $args->{EXE_FILES} ||= [];
+ foreach ( @_ ) {
+ if ( -f $_ ) {
+ push @$exe, $_;
+ } elsif ( -d 'script' and -f "script/$_" ) {
+ push @$exe, "script/$_";
+ } else {
+ die("Cannot find script '$_'");
+ }
+ }
+}
+
+1;
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Share.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Share.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Share.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Share.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,125 @@
+package Module::Install::Share;
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+sub install_share {
+ my $self = shift;
+ my $dir = @_ ? pop : 'share';
+ my $type = @_ ? shift : 'dist';
+ unless ( defined $type and $type eq 'module' or $type eq 'dist' ) {
+ die "Illegal or invalid share dir type '$type'";
+ }
+ unless ( defined $dir and -d $dir ) {
+ die "Illegal or missing directory install_share param";
+ }
+
+ # Split by type
+ my $S = ($^O eq 'MSWin32') ? "\\" : "\/";
+ if ( $type eq 'dist' ) {
+ die "Too many parameters to install_share" if @_;
+
+ # Set up the install
+ $self->postamble(<<"END_MAKEFILE");
+config ::
+\t\$(NOECHO) \$(MOD_INSTALL) \\
+\t\t"$dir" \$(INST_LIB)${S}auto${S}share${S}dist${S}\$(DISTNAME)
+
+END_MAKEFILE
+ } else {
+ my $module = Module::Install::_CLASS($_[0]);
+ unless ( defined $module ) {
+ die "Missing or invalid module name '$_[0]'";
+ }
+ $module =~ s/::/-/g;
+
+ # Set up the install
+ $self->postamble(<<"END_MAKEFILE");
+config ::
+\t\$(NOECHO) \$(MOD_INSTALL) \\
+\t\t"$dir" \$(INST_LIB)${S}auto${S}share${S}module${S}$module
+
+END_MAKEFILE
+ }
+
+ # The above appears to behave incorrectly when used with old versions
+ # of ExtUtils::Install (known-bad on RHEL 3, with 5.8.0)
+ # So when we need to install a share directory, make sure we add a
+ # dependency on a moderately new version of ExtUtils::MakeMaker.
+ $self->build_requires( 'ExtUtils::MakeMaker' => '6.11' );
+
+ # 99% of the time we don't want to index a shared dir
+ $self->no_index( directory => $dir );
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Module::Install::Share - Install non-code files for use during run-time
+
+=head1 SYNOPSIS
+
+ # Put everything inside ./share/ into the distribution 'auto' path
+ install_share 'share';
+
+ # Same thing as above using the default directory name
+ install_share;
+
+=head1 DESCRIPTION
+
+As well as Perl modules and Perl binary applications, some distributions
+need to install read-only data files to a location on the file system
+for use at run-time.
+
+XML Schemas, L<YAML> data files, and L<SQLite> databases are examples of
+the sort of things distributions might typically need to have available
+after installation.
+
+C<Module::Install::Share> is a L<Module::Install> extension that provides
+commands to allow these files to be installed to the applicable location
+on disk.
+
+To locate the files after installation so they can be used inside your
+module, see this extension's companion module L<File::ShareDir>.
+
+=head1 TO DO
+
+Currently C<install_share> installs not only the files you want, but
+if called by the author will also copy F<.svn> and other source-control
+directories, and other junk.
+
+Enhance this to copy only files under F<share> that are in the
+F<MANIFEST>, or possibly those not in F<MANIFEST.SKIP>.
+
+=head1 AUTHORS
+
+Audrey Tang E<lt>autrijus@autrijus.orgE<gt>
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+=head1 SEE ALSO
+
+L<Module::Install>, L<File::ShareDir>
+
+=head1 COPYRIGHT
+
+Copyright 2006 Audrey Tang, Adam Kennedy.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Win32.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Win32.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/Win32.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/Win32.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,13 +1,12 @@
-#line 1
package Module::Install::Win32;
use strict;
-use Module::Install::Base;
+use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
- @ISA = qw{Module::Install::Base};
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
$ISCORE = 1;
}
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/With.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/With.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/With.pm 1970-01-01 01:00:00.000000000 +0100
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/With.pm 2009-05-27 18:46:13.000000000 +0200
@@ -0,0 +1,159 @@
+package Module::Install::With;
+
+# See POD at end for docs
+
+use strict;
+use Module::Install::Base ();
+
+use vars qw{$VERSION @ISA $ISCORE};
+BEGIN {
+ $VERSION = '0.91';
+ @ISA = 'Module::Install::Base';
+ $ISCORE = 1;
+}
+
+
+
+
+
+#####################################################################
+# Installer Target
+
+# Are we targeting ExtUtils::MakeMaker (running as Makefile.PL)
+sub eumm {
+ !! ($0 =~ /Makefile.PL$/i);
+}
+
+# You should not be using this, but we'll keep the hook anyways
+sub mb {
+ !! ($0 =~ /Build.PL$/i);
+}
+
+
+
+
+
+#####################################################################
+# Testing and Configuration Contexts
+
+=pod
+
+=head2 interactive
+
+The C<interactive> function tests for an install that has a user present
+(or at least, one in which it is reasonable for us to present prompts
+and other similar types of things).
+
+Returns true if in an interactive environment, or false otherwise.
+
+=cut
+
+sub interactive {
+ # Treat things interactively ONLY based on input
+ !! (-t STDIN and ! automated_testing());
+}
+
+=pod
+
+=head2 automated_testing
+
+Are we currently running in an automated testing environment, such as
+CPAN Testers.
+
+This is primarily a cleaner and more human-readable equivalent of
+checking $ENV{AUTOMATED_TESTING} yourself, but may be improved in line
+with best practices at a later date.
+
+=cut
+
+sub automated_testing {
+ !! $ENV{AUTOMATED_TESTING};
+}
+
+=pod
+
+=head2 release_testing
+
+Are we currently running in an release testing environment. That is,
+are we in the process of running in a potential highly-intensive and
+high dependency bloat testing process prior to packaging a module for
+release.
+
+This is primarily a cleaner and more human-readable equivalent of
+checking $ENV{RELEASE_TESTING} yourself, but may be improved in line
+with best practices at a later date.
+
+=cut
+
+sub release_testing {
+ !! $ENV{RELEASE_TESTING};
+}
+
+sub author_context {
+ !! $Module::Install::AUTHOR;
+}
+
+
+
+
+
+#####################################################################
+# Operating System Convenience
+
+=pod
+
+=head2 win32
+
+The C<win32> function tests if the Makefile.PL is currently running in a
+native Microsoft Windows Perl, such as ActivePerl or Strawberry Perl.
+
+This is primarily a cleaner and more human-readable equivalent of
+checking C<$^O eq 'MSWin32'> yourself, but may be improved in line
+with best practices at a later date.
+
+=cut
+
+sub win32 {
+ !! ($^O eq 'MSWin32');
+}
+
+=pod
+
+=head2 winlike
+
+The C<winlike> function tests if the Makefile.PL is currently running
+in a Microsoft Windows Perl, under either cygwin or a native Win32 Perl.
+
+This is primarily a cleaner and more human-readable equivalent of
+checking C<$^O eq 'MSWin32' or $^O eq 'cygwin'>yourself, but may be
+improved in line with best practices at a later date.
+
+=cut
+
+sub winlike {
+ !! ($^O eq 'MSWin32' or $^O eq 'cygwin');
+}
+
+1;
+
+=pod
+
+=head1 SEE ALSO
+
+L<Module::Install>
+
+=head1 AUTHORS
+
+Adam Kennedy E<lt>adamk@cpan.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2007 - 2009 Adam Kennedy.
+
+This program is free software; you can redistribute
+it and/or modify it under the same terms as Perl itself.
+
+The full text of the license can be found in the
+LICENSE file included with this module.
+
+=cut
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/WriteAll.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/WriteAll.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install/WriteAll.pm 2009-05-01 22:10:12.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install/WriteAll.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,12 +1,11 @@
-#line 1
package Module::Install::WriteAll;
use strict;
-use Module::Install::Base;
+use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
- $VERSION = '0.85';
+ $VERSION = '0.91';;
@ISA = qw{Module::Install::Base};
$ISCORE = 1;
}
@@ -41,8 +40,18 @@
# The Makefile write process adds a couple of dependencies,
# so write the META.yml files after the Makefile.
- $self->Meta->write if $args{meta};
- $self->Meta->write_mymeta if $self->mymeta;
+ if ( $args{meta} ) {
+ $self->Meta->write;
+ }
+
+ # Experimental support for MYMETA
+ if ( $ENV{X_MYMETA} ) {
+ if ( $ENV{X_MYMETA} eq 'JSON' ) {
+ $self->Meta->write_mymeta_json;
+ } else {
+ $self->Meta->write_mymeta_yaml;
+ }
+ }
return 1;
}
diff -Naur DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install.pm DBIx-Class-Schema-Loader-0.04006/inc/Module/Install.pm
--- DBIx-Class-Schema-Loader-0.04006.orig/inc/Module/Install.pm 2009-05-01 22:10:11.000000000 +0200
+++ DBIx-Class-Schema-Loader-0.04006/inc/Module/Install.pm 2009-05-27 18:46:13.000000000 +0200
@@ -1,4 +1,3 @@
-#line 1
package Module::Install;
# For any maintainers:
@@ -28,7 +27,7 @@
# This is not enforced yet, but will be some time in the next few
# releases once we can make sure it won't clash with custom
# Module::Install extensions.
- $VERSION = '0.85';
+ $VERSION = '0.91';
# Storage for the pseudo-singleton
$MAIN = undef;
@@ -353,7 +352,7 @@
if ( $] >= 5.006 ) {
open( FH, '<', $_[0] ) or die "open($_[0]): $!";
} else {
- open( FH, "< $_[0]" ) or die "open($_[0]): $!";
+ open( FH, "< $_[0]" ) or die "open($_[0]): $!";
}
my $string = do { local $/; <FH> };
close FH or die "close($_[0]): $!";
@@ -384,7 +383,7 @@
if ( $] >= 5.006 ) {
open( FH, '>', $_[0] ) or die "open($_[0]): $!";
} else {
- open( FH, "> $_[0]" ) or die "open($_[0]): $!";
+ open( FH, "> $_[0]" ) or die "open($_[0]): $!";
}
foreach ( 1 .. $#_ ) {
print FH $_[$_] or die "print($_[0]): $!";