Test::LatestPrereqs::ModuleBuild - Test::LatestPrereqs::ModuleBuild documentation


Test-LatestPrereqs documentation Contained in the Test-LatestPrereqs distribution.

Index


Code Index:

NAME

Top

Test::LatestPrereqs::ModuleBuild

SYNOPSIS

Top

  my @requires = Test::LatestPrereqs::ModuleBuild->parse($build_pl);

DESCRIPTION

Top

This is used internally to parse Build.PL (with Module::Build) to get requirements.

METHODS

Top

parse

parses Build.PL and returns a list of requirements.

AUTHOR

Top

Kenichi Ishigaki, <ishigaki@cpan.org>

COPYRIGHT AND LICENSE

Top


Test-LatestPrereqs documentation Contained in the Test-LatestPrereqs distribution.

package Test::LatestPrereqs::ModuleBuild;

use strict;
use warnings;
use Carp;

sub parse {
  my ($class, $file) = @_;

  my @requires;

  no warnings 'redefine';

  local $INC{'Module/Build.pm'};
  local *Module::Build::new = sub {
    my ($class, %args) = @_;

    foreach my $type (qw(requires build_requires recommends)) {
      foreach my $key (keys %{ $args{$type} || {} }) {
        push @requires, [ $key, $args{$type}->{$key} || 0 ];
      }
    }

    bless {}, 'Test::LatestPrereqs::ModuleBuild::Fake';
  };
  local *Module::Build::subclass = sub { 'Module::Build' };

  eval {
    package main;
    no strict;
    no warnings;

    local *CORE::GLOBAL::exit = sub {};

    require "$file";
  };
  delete $INC{$file};

  if ($@ && $@ !~ /did not return a true value/) {
    croak "Build.PL error: $@";
  }

  return @requires;
}

package #
  Test::LatestPrereqs::ModuleBuild::Fake;
sub DESTROY {}
sub AUTOLOAD { shift }

1;

__END__