1 #line 1 "inc/Module/Install/Metadata.pm - /Library/Perl/5.8.1/Module/Install/Metadata.pm"
2 # $File: //depot/cpan/Module-Install/lib/Module/Install/Metadata.pm $ $Author: autrijus $
3 # $Revision: #32 $ $Change: 1885 $ $DateTime: 2004/03/11 05:55:27 $ vim: expandtab shiftwidth=4
5 package Module::Install::Metadata;
6 use Module::Install::Base; @ISA = qw(Module::Install::Base);
11 use vars qw($VERSION);
16 name module_name version abstract author license
17 distribution_type sign perl_version
19 my @tuple_keys = qw(build_requires requires recommends bundles);
21 foreach my $key (@scalar_keys) {
24 return $self->{'values'}{$key} unless @_;
25 $self->{'values'}{$key} = shift;
30 foreach my $key (@tuple_keys) {
33 return $self->{'values'}{$key} unless @_;
36 my $module = shift or last;
37 my $version = shift || 0;
38 if ($module eq 'perl') {
39 $version =~ s{^(\d+)\.(\d+)\.(\d+)}
40 {$1 + $2/1_000 + $3/1_000_000}e;
41 $self->perl_version($version);
44 my $rv = [$module, $version];
45 push @{$self->{'values'}{$key}}, $rv;
54 while (my ($name, $mods) = splice(@_, 0, 2)) {
56 push @{$self->{'values'}{'features'}}, ($name => [
57 map { (++$count % 2 and ref($_) and ($count += $#$_)) ? @$_ : $_ } @$mods
60 return @{$self->{'values'}{'features'}};
66 push @{$self->{'values'}{'no_index'}{$type}}, @_ if $type;
67 return $self->{'values'}{'no_index'};
72 my $package = ref($self->_top);
73 my $version = $self->_top->VERSION;
74 my %values = %{$self->{'values'}};
77 if (my $perl_version = delete $values{perl_version}) {
78 # Always canonical to three-dot version
79 $perl_version =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2), int($3))}e
80 if $perl_version >= 5.006;
82 [perl => $perl_version],
83 @{$values{requires}||[]},
87 warn "No license specified, setting license = 'unknown'\n"
88 unless $values{license};
90 $values{license} ||= 'unknown';
91 $values{distribution_type} ||= 'module';
92 $values{name} ||= do {
93 my $name = $values{module_name};
96 } if $values{module_name};
98 if ($values{name} =~ /::/) {
99 my $name = $values{name};
101 die "Error in name(): '$values{name}' should be '$name'!\n";
105 foreach my $key (@scalar_keys) {
106 $dump .= "$key: $values{$key}\n" if exists $values{$key};
108 foreach my $key (@tuple_keys) {
109 next unless exists $values{$key};
111 foreach (@{$values{$key}}) {
112 $dump .= " $_->[0]: $_->[1]\n";
116 if (my $no_index = $values{no_index}) {
117 push @{$no_index->{'directory'}}, 'inc';
119 local $YAML::UseHeader = 0;
120 $dump .= YAML::Dump({ no_index => $no_index});
130 $dump .= "generated_by: $package version $version\n";
136 $self->include_deps( 'YAML', 0 );
138 my $data = YAML::LoadFile( 'META.yml' );
139 # Call methods explicitly in case user has already set some values.
140 while ( my ($key, $value) = each %$data ) {
141 next unless $self->can( $key );
142 if (ref $value eq 'HASH') {
143 while (my ($module, $version) = each %$value) {
144 $self->$key( $module => $version );
148 $self->$key( $value );
156 return $self unless $self->is_admin;
160 if (open FH, "META.yml") {
162 last META_NOT_OURS if /^generated_by: Module::Install\b/;
164 return $self if -s FH;
168 warn "Writing META.yml\n";
169 open META, "> META.yml" or warn "Cannot write to META.yml: $!";
170 print META $self->_dump;
176 my ($self, $version_from) = @_;
177 require ExtUtils::MM_Unix;
178 $self->version(ExtUtils::MM_Unix->parse_version($version_from));
182 my ($self, $abstract_from) = @_;
183 require ExtUtils::MM_Unix;
185 bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix')
186 ->parse_abstract($abstract_from)