Skip to content

Commit

Permalink
Migrate all files into Module::CPANfile for easy inclusion
Browse files Browse the repository at this point in the history
  • Loading branch information
miyagawa committed Apr 12, 2012
1 parent 57ba077 commit 1e44b59
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 117 deletions.
116 changes: 115 additions & 1 deletion lib/Module/CPANfile.pm
Expand Up @@ -2,7 +2,6 @@ package Module::CPANfile;
use strict; use strict;
use warnings; use warnings;
use Cwd; use Cwd;
use Module::CPANfile::Environment;


our $VERSION = '0.9004'; our $VERSION = '0.9004';


Expand Down Expand Up @@ -37,6 +36,121 @@ sub prereq_specs {
$self->{result}{spec}; $self->{result}{spec};
} }


package Module::CPANfile::Environment;
use strict;

my @bindings = qw(
on requires recommends suggests conflicts
osname perl
configure_requires build_requires test_requires author_requires
);

my $file_id = 1;

sub import {
my($class, $result_ref) = @_;
my $pkg = caller;

$$result_ref = Module::CPANfile::Result->new;
for my $binding (@bindings) {
no strict 'refs';
*{"$pkg\::$binding"} = sub { $$result_ref->$binding(@_) };
}
}

sub parse {
my $file = shift;

my $code = do {
open my $fh, "<", $file or die "$file: $!";
join '', <$fh>;
};

my($res, $err);

{
local $@;
$res = eval sprintf <<EVAL, $file_id++;
package Module::CPANfile::Sandbox%d;
no warnings;
my \$_result;
BEGIN { import Module::CPANfile::Environment \\\$_result };
$code;
\$_result;
EVAL
$err = $@;
}

if ($err) { die "Parsing $file failed: $err" };

return $res;
}

package Module::CPANfile::Result;
use strict;

sub new {
bless {
phase => 'runtime', # default phase
spec => {},
}, shift;
}

sub on {
my($self, $phase, $code) = @_;
local $self->{phase} = $phase;
$code->()
}

sub osname { die "TODO" }
sub perl { die "TODO" }

sub requires {
my($self, $module, $requirement) = @_;
$self->{spec}{$self->{phase}}{requires}{$module} = $requirement || 0;
}

sub recommends {
my($self, $module, $requirement) = @_;
$self->{spec}->{$self->{phase}}{recommends}{$module} = $requirement || 0;
}

sub suggests {
my($self, $module, $requirement) = @_;
$self->{spec}->{$self->{phase}}{suggests}{$module} = $requirement || 0;
}

sub conflicts {
my($self, $module, $requirement) = @_;
$self->{spec}->{$self->{phase}}{conflicts}{$module} = $requirement || 0;
}

# Module::Install compatible shortcuts

sub configure_requires {
my($self, @args) = @_;
$self->on(configure => sub { $self->requires(@args) });
}

sub build_requires {
my($self, @args) = @_;
$self->on(build => sub { $self->requires(@args) });
}

sub test_requires {
my($self, @args) = @_;
$self->on(test => sub { $self->requires(@args) });
}

sub author_requires {
my($self, @args) = @_;
$self->on(develop => sub { $self->requires(@args) });
}

package Module::CPANfile;

1; 1;


__END__ __END__
Expand Down
54 changes: 0 additions & 54 deletions lib/Module/CPANfile/Environment.pm

This file was deleted.

62 changes: 0 additions & 62 deletions lib/Module/CPANfile/Result.pm

This file was deleted.

0 comments on commit 1e44b59

Please sign in to comment.