CPAN-Maker

 view release on metacpan or  search on metacpan

lib/CPAN/Maker.pm  view on Meta::CPAN

    if !$buildspec_file;

  die "$buildspec_file exists\n"
    if -e $buildspec_file && !$overwrite;

  open my $fh, '>', $buildspec_file
    or die "could not open $buildspec_file for writing\n";

  print {$fh} Dump($buildspec);

  close $fh;

  return;
}

########################################################################
sub parse_dependencies {
########################################################################
  my ( $self, $dependencies ) = @_;

  if ($dependencies) {
    croak 'malformed buildspec.yml file - dependencies section with no keys?'
      if !keys %{$dependencies};

    $dependencies->{'core-modules'}     //= 'no';
    $dependencies->{'required-modules'} //= 'yes';

    if ( $dependencies->{path} ) {  # deprecated
      $self->set_requires( $dependencies->{path} );
      warn "path is deprecated: use requires\n";
    }

    if ( $dependencies->{requires} ) {
      $self->set_requires( $dependencies->{requires} );
    }

    if ( $dependencies->{'test-requires'} ) {
      $self->set_test_requires( $dependencies->{'test-requires'} );
    }

    if ( $dependencies->{'build-requires'} ) {
      $self->set_build_requires( $dependencies->{'build-requires'} );
    }

    if ( $dependencies->{recommends} ) {
      $self->set_recommends( $dependencies->{recommends} );
    }

    if ( $dependencies->{suggests} ) {
      $self->set_suggests( $dependencies->{suggests} );
    }

    if ( $dependencies->{'core-modules'} eq 'yes' ) {
      $self->set_core_modules($TRUE);
    }

    # NOTE: required-modules and resolver have no corresponding
    # CLI::Simple accessor (not in option_specs, no extra_options
    # declared) -- there is currently nowhere valid to apply these
    # buildspec.yml values. Preserved here as parsed/validated but
    # intentionally not applied; flagging rather than guessing at
    # attribute names that don't exist.
    my $required_modules_requested = $dependencies->{'required-modules'} eq 'no';
    my $resolver                   = $dependencies->{resolver};

    if ( $self->get_requires && $resolver ) {
      croak "use either path or resolver for dependencies, but not both\n";
    }
  }

  return;
}

########################################################################
sub parse_include_version {
########################################################################
  my ( $self, $version ) = @_;

  return
    if !defined $version;

  if ( $version =~ /(no|0|off)/ixsm ) {
    $self->set_require_versions($FALSE);
  }

  return;
}

########################################################################
sub parse_project {
########################################################################
  my ( $self, $project ) = @_;

  return
    if !$project;

  if ( $project->{author} ) {
    my $name   = $project->{author}->{name} // 'anonymouse';
    my $author = $name;

    if ( my $mailto = $project->{author}->{mailto} ) {
      $author .= ' <' . $mailto . '>';
    }

    $self->set_author($author);
  }

  if ( my $description = $project->{description} ) {
    $self->set_abstract($description);
  }

  # NOTE: 'git' has no corresponding CLI::Simple accessor (not in
  # option_specs, no extra_options declared) -- there is currently
  # nowhere valid to apply this buildspec.yml value. Left unapplied
  # rather than guessing at an attribute name that doesn't exist.

  return;
}

########################################################################
sub parse_pm_module {
########################################################################
  my ( $self, $pm_module ) = @_;

  return
    if !$pm_module;

  $self->set_module($pm_module);

  return;
}

########################################################################
sub read_buildspec {
########################################################################
  my ( $self, $file ) = @_;

  croak 'file not found or empty ' . $file . $NL
    if !-s $file;

  local $RS = undef;
  open my $fh, '<', $file or croak "could not open $file: $OS_ERROR\n";
  my $text = <$fh>;
  close $fh;

  my $normalized = (
    $text =~ s/^(\s*)(\w+)(\s*:)/
    my ($pre, $key, $post) = ($1, $2, $3);
    $key =~ s|_|-|g;
    "$pre$key$post"/xsmgre
  );

  if ( $normalized ne $text ) {
    my $current = $file . '.current';
    open my $out, '>', $current or croak "could not write $current: $OS_ERROR\n";
    print {$out} $normalized;
    close $out;
    $self->get_logger->warn("deprecated underscore keys found - normalized buildspec written to $current");
  }

  my $buildspec = eval { Load($normalized) };

  croak 'could not read ' . $file . $NL . $EVAL_ERROR . $NL
    if $EVAL_ERROR || !$buildspec;

  return $buildspec;
}

# this method converts a buildspec into options to be passed to shell script
# which eventually calls this script to create the Makefile.PL
########################################################################
sub parse_buildspec {
########################################################################
  my ($self) = @_;



( run in 1.117 second using v1.01-cache-2.11-cpan-364913b4093 )