Dist-Zilla-Plugin-MakeMaker-Awesome

 view release on metacpan or  search on metacpan

lib/Dist/Zilla/Plugin/MakeMaker/Awesome.pm  view on Meta::CPAN

    : '';
}}
my {{ $fallback_prereqs }}

unless ( eval { ExtUtils::MakeMaker->VERSION('6.63_03') } ) {
  delete $WriteMakefileArgs{TEST_REQUIRES};
  delete $WriteMakefileArgs{BUILD_REQUIRES};
  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}

delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
  unless eval { ExtUtils::MakeMaker->VERSION(6.52) };

WriteMakefile(%WriteMakefileArgs);

{{ $share_dir_block[1] }}

{{ $footer }}
TEMPLATE

  return $template;
}

around BUILDARGS => sub
{
    my $orig = shift;
    my $class = shift;

    my $args = $class->$orig(@_);

    my $delimiter = delete $args->{delimiter};
    if (defined $delimiter and length($delimiter))
    {
        foreach my $arg (grep exists $args->{$_}, qw(WriteMakefile_arg_strs header_strs footer_strs))
        {
            s/^\Q$delimiter\E// foreach @{$args->{$arg}};
        }
    }

    return $args;
};

around dump_config => sub
{
    my ($orig, $self) = @_;
    my $config = $self->$orig;

    my $data = {
        blessed($self) ne __PACKAGE__ ? ( version => $VERSION ) : (),
    };
    $config->{+__PACKAGE__} = $data if keys %$data;

    $config->{'Dist::Zilla::Plugin::MakeMaker'}{make_path} ||= $self->make_path;
    $config->{'Dist::Zilla::Plugin::MakeMaker'}{version} ||= Dist::Zilla::Plugin::MakeMaker->VERSION;
    $config->{'Dist::Zilla::Role::TestRunner'}{version} ||= Dist::Zilla::Role::TestRunner->VERSION;

    return $config;
};

has WriteMakefile_arg_strs => (
    is => 'ro', isa => ArrayRef[Str],
    traits => ['Array'],
    lazy => 1,
    default => sub { [] },
    documentation => "Additional arguments passed to ExtUtils::MakeMaker's WriteMakefile()",
);

has WriteMakefile_args => (
    isa           => HashRef,
    traits        => ['Hash'],
    handles       => {
        WriteMakefile_args => 'elements',
        delete_WriteMakefile_arg => 'delete',
        WriteMakefile_arg => 'get',
    },
    lazy          => 1,
    builder       => '_build_WriteMakefile_args',
    documentation => "The arguments passed to ExtUtils::MakeMaker's WriteMakefile()",
);

sub _build_WriteMakefile_args {
    my ($self) = @_;

    (my $name = $self->zilla->name) =~ s/-/::/g;
    my $test_files = $self->test_files;

    my $perl_prereq = $self->min_perl_version;

    my $prereqs_dump = sub {
        $self->zilla->prereqs->requirements_for(@_)
        ->clone
        ->clear_requirement('perl')
        ->as_string_hash;
    };

    my %require_prereqs = map
        +($_ => $prereqs_dump->($_, 'requires')),
        qw(configure build test runtime);

    # EUMM may soon be able to support this, but until we decide to inject a
    # higher configure-requires version, we should at least warn the user
    # https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/issues/215
    foreach my $phase (qw(configure build test runtime)) {
        if (my @version_ranges = pairgrep { defined $b && !version::is_lax($b) } %{ $require_prereqs{$phase} }
                and $self->eumm_version < '7.1101') {
            $self->log_fatal([
                'found version range in %s prerequisites, which ExtUtils::MakeMaker cannot parse (must specify eumm_version of at least 7.1101): %s %s',
                $phase, $_->[0], $_->[1]
            ]) foreach pairs @version_ranges;
        }
    }

    my @authors = eval { Dist::Zilla->VERSION('7.000') } ? $self->zilla->authors : @{ $self->zilla->authors };
    my $exe_files = $self->exe_files;

    my %WriteMakefile = (
        DISTNAME  => $self->zilla->name,
        NAME      => $name,
        ( AUTHOR  => @authors > 1 && ($self->eumm_version >= 6.5702 || $perl_prereq >= 5.013005)
                     ? \@authors
                     : join(q{, }, @authors) ),

lib/Dist/Zilla/Plugin/MakeMaker/Awesome.pm  view on Meta::CPAN

}

has exe_files => (
    is            => 'ro',
    isa           => ArrayRef[Str],
    lazy          => 1,
    builder       => '_build_exe_files',
    documentation => "The list of filenames given to ExtUtils::MakeMaker's EXE_FILES (in munged form)",
);

sub _build_exe_files {
    my ($self) = @_;

    my @exe_files = map $_->name, @{ $self->zilla->find_files(':ExecFiles') };

    return \@exe_files;
}

has share_dir_block => (
    is            => 'ro',
    isa           => ArrayRef[Str],
    auto_deref    => 1,
    lazy          => 1,
    builder       => '_build_share_dir_block',
    documentation => "The share dir block used in `MakeFile_PL_template'",
);

sub _build_share_dir_block {
    my ($self) = @_;

    my @share_dir_block = (q{}, q{});

    my $share_dir_map = $self->zilla->_share_dir_map;
    if ( keys %$share_dir_map ) {
        # split in two to foil CPANTS prereq_matches_use
        my $preamble = qq{use File::Shar}.qq{eDir::Install;\n};
        $preamble .= qq{\$File::ShareDir::Install::INCLUDE_DOTFILES = 1;\n};
        $preamble .= qq{\$File::ShareDir::Install::INCLUDE_DOTDIRS = 1;\n};
        if ( my $dist_share_dir = $share_dir_map->{dist} ) {
            $dist_share_dir = quotemeta $dist_share_dir;
            $preamble .= qq{install_share dist => "$dist_share_dir";\n};
        }

        if ( my $mod_map = $share_dir_map->{module} ) {
            for my $mod ( keys %$mod_map ) {
                my $mod_share_dir = quotemeta $mod_map->{$mod};
                $preamble .= qq{install_share module => "$mod", "$mod_share_dir";\n};
            }
        }
        @share_dir_block = (
            $preamble,
            qq{\{\npackage\nMY;\nuse File::ShareDir::Install qw(postamble);\n\}\n},

        );
    }

    return \@share_dir_block;
}

has header_strs => (
    is => 'ro', isa => ArrayRef[Str],
    traits => ['Array'],
    lazy => 1,
    default => sub { [] },
    documentation => "Additional code lines to include at the beginning of Makefile.PL",
);

has header_file => (
    is => 'ro', isa => Str,
    documentation => 'Additional header content to include from a file',
);

has header => (
    is            => 'ro',
    isa           => Str,
    lazy          => 1,
    builder       => '_build_header',
    documentation => "A string included at the beginning of Makefile.PL",
);

sub _build_header {
    my $self = shift;
    join "\n",
        @{$self->header_strs},
        ( $self->header_file
            ? do {
                my $abs_file = path($self->zilla->root, $self->header_file);
                $self->log_fatal([ 'header_file %s does not exist!', $self->header_file ])
                    if not $abs_file->exists;
                $abs_file->slurp_utf8
            }
            : () );
}

has footer_strs => (
    is => 'ro', isa => ArrayRef[Str],
    traits => ['Array'],
    lazy => 1,
    default => sub { [] },
    documentation => "Additional code lines to include at the end of Makefile.PL",
);

has footer_file => (
    is => 'ro', isa => Str,
    documentation => 'Additional footer content to include from a file',
);

has footer => (
    is            => 'ro',
    isa           => Str,
    lazy          => 1,
    builder       => '_build_footer',
    documentation => "A string included at the end of Makefile.PL",
);

sub _build_footer {
    my $self = shift;
    join "\n",
        @{$self->footer_strs},
        ( $self->footer_file
            ? do {
                my $abs_file = path($self->zilla->root, $self->footer_file);
                $self->log_fatal([ 'footer_file %s does not exist!', $self->footer_file ])
                    if not $abs_file->exists;
                $abs_file->slurp_utf8
            }
            : () );
}

sub register_prereqs {
    my ($self) = @_;

    $self->zilla->register_prereqs(
        { phase => 'configure' },
        'ExtUtils::MakeMaker' => $self->eumm_version || 0,
    );

    return unless keys %{ $self->zilla->_share_dir_map };

    $self->zilla->register_prereqs(
        { phase => 'configure', type => 'requires' },
        'File::ShareDir::Install' => 0.06,
    );

    return {};
}

sub gather_files
{
    my $self = shift;

    require Dist::Zilla::File::InMemory;
    my $file = Dist::Zilla::File::InMemory->new({
        name    => 'Makefile.PL',
        content => $self->MakeFile_PL_template,     # template evaluated later
    });



( run in 2.395 seconds using v1.01-cache-2.11-cpan-81fc1098f69 )