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 )