Alien-ROOT
view release on metacpan or search on metacpan
inc/inc_Module-Build/Module/Build/Base.pm view on Meta::CPAN
$version = $version->is_qv ? $version->normal : $version->stringify;
}
elsif ( $version =~ /^[^v][^.]*\.[^.]+\./ ) { # no leading v, multiple dots
# normalize string tuples without "v": "1.2.3" -> "v1.2.3"
$version = "v$version";
}
else {
# leave alone
}
return $version;
}
sub _normalize_prereqs {
my ($self) = @_;
my $p = $self->{properties};
# copy prereq data structures so we can modify them before writing to META
my %prereq_types;
for my $type ( 'configure_requires', @{$self->prereq_action_types} ) {
if (exists $p->{$type}) {
for my $mod ( keys %{ $p->{$type} } ) {
$prereq_types{$type}{$mod} =
$self->normalize_version($p->{$type}{$mod});
}
}
}
return \%prereq_types;
}
# wrapper around old prepare_metadata API;
sub get_metadata {
my ($self, %args) = @_;
my $metadata = {};
$self->prepare_metadata( $metadata, undef, \%args );
return $metadata;
}
# To preserve compatibility with old API, $node *must* be a hashref
# passed in to prepare_metadata. $keys is an arrayref holding a
# list of keys -- it's use is optional and generally no longer needed
# but kept for back compatibility. $args is an optional parameter to
# support the new 'fatal' toggle
sub prepare_metadata {
my ($self, $node, $keys, $args) = @_;
unless ( ref $node eq 'HASH' ) {
croak "prepare_metadata() requires a hashref argument to hold output\n";
}
my $fatal = $args->{fatal} || 0;
my $p = $self->{properties};
$self->auto_config_requires if $args->{auto};
# A little helper sub
my $add_node = sub {
my ($name, $val) = @_;
$node->{$name} = $val;
push @$keys, $name if $keys;
};
# validate required fields
foreach my $f (qw(dist_name dist_version dist_author dist_abstract license)) {
my $field = $self->$f();
unless ( defined $field and length $field ) {
my $err = "ERROR: Missing required field '$f' for metafile\n";
if ( $fatal ) {
die $err;
}
else {
$self->log_warn($err);
}
}
}
# add dist_* fields
foreach my $f (qw(dist_name dist_version dist_author dist_abstract)) {
(my $name = $f) =~ s/^dist_//;
$add_node->($name, $self->$f());
}
# normalize version
$node->{version} = $self->normalize_version($node->{version});
# validate license information
my $license = $self->license;
my ($meta_license, $meta_license_url);
# XXX this is still meta spec version 1 stuff
# if Software::License::* exists, then we can use it to get normalized name
# for META files
if ( my $sl = $self->_software_license_object ) {
$meta_license = $sl->meta_name;
$meta_license_url = $sl->url;
}
elsif ( exists $self->valid_licenses()->{$license} ) {
$meta_license = $license;
$meta_license_url = $self->_license_url( $license );
}
else {
# if we didn't find a license from a Software::License class,
# then treat it as unknown
$self->log_warn( "Can not determine license type for '" . $self->license
. "'\nSetting META license field to 'unknown'.\n");
$meta_license = 'unknown';
}
$node->{license} = $meta_license;
$node->{resources}{license} = $meta_license_url if defined $meta_license_url;
# add prerequisite data
my $prereqs = $self->_normalize_prereqs;
for my $t ( keys %$prereqs ) {
$add_node->($t, $prereqs->{$t});
}
if (exists $p->{dynamic_config}) {
$add_node->('dynamic_config', $p->{dynamic_config});
}
my $pkgs = eval { $self->find_dist_packages };
if ($@) {
$self->log_warn("$@\nWARNING: Possible missing or corrupt 'MANIFEST' file.\n" .
"Nothing to enter for 'provides' field in metafile.\n");
} else {
$node->{provides} = $pkgs if %$pkgs;
}
;
if (exists $p->{no_index}) {
$add_node->('no_index', $p->{no_index});
}
$add_node->('generated_by', "Module::Build version $Module::Build::VERSION");
$add_node->('meta-spec',
{version => '1.4',
url => 'http://module-build.sourceforge.net/META-spec-v1.4.html',
});
while (my($k, $v) = each %{$self->meta_add}) {
$add_node->($k, $v);
}
while (my($k, $v) = each %{$self->meta_merge}) {
( run in 0.581 second using v1.01-cache-2.11-cpan-13bb782fe5a )