summaryrefslogtreecommitdiff
path: root/inc/CheckAuthorDeps.pm
blob: 69f2dde945136aa38f33431ca4b164da1f18c921 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use strict;
use warnings;
package inc::CheckAuthorDeps;

# our goal is to verify that the declared authordeps already reflect
# everything in configure + runtime prerequisites -- otherwise, we won't be
# able to bootstrap our built Moose for the purposes of running
# author/docGenerator.pl

use Moose;
with 'Dist::Zilla::Role::AfterBuild';

sub after_build
{
    my $self = shift;

    # get our authordeps
    require Dist::Zilla::Util::AuthorDeps;
    Dist::Zilla::Util::AuthorDeps->VERSION(5.021);

    require CPAN::Meta::Requirements;
    my $authordeps = CPAN::Meta::Requirements->new;
    $authordeps->add_string_requirement(%$_)
        foreach @{ Dist::Zilla::Util::AuthorDeps::extract_author_deps('.') };

    # get our prereqs
    my $prereqs = $self->zilla->prereqs;

    # merge prereqs into authordeps
    my $merged_prereqs = CPAN::Meta::Requirements->new;
    $merged_prereqs->add_requirements($authordeps);
    $merged_prereqs->add_requirements($prereqs->requirements_for('configure', 'requires'));
    $merged_prereqs->add_requirements($prereqs->requirements_for('runtime', 'requires'));

    # remove some false positives we know we already have fulfilled
    $merged_prereqs->clear_requirement('ExtUtils::MakeMaker');
    $merged_prereqs->clear_requirement('Dist::CheckConflicts');

    # the merged set should not be different than the original authordeps.
    require Test::Deep;
    my ($ok, $stack) = Test::Deep::cmp_details(
        $authordeps->as_string_hash,
        Test::Deep::superhashof($merged_prereqs->as_string_hash),
    );

    return if $ok;

    $self->log_fatal('authordeps does not have all prereqs found in configure, runtime prereqs: '
        . Test::Deep::deep_diag($stack));
}

1;