summaryrefslogtreecommitdiff
path: root/inc/CheckAuthorDeps.pm
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2015-06-06 17:50:16 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2015-06-06 17:50:16 +0000
commit5ac2026f7eed78958d69d051e7a8e993dcf51205 (patch)
tree298c3d2f08bdfe5689998b11892d72a897985be1 /inc/CheckAuthorDeps.pm
downloadMoose-tarball-5ac2026f7eed78958d69d051e7a8e993dcf51205.tar.gz
Diffstat (limited to 'inc/CheckAuthorDeps.pm')
-rw-r--r--inc/CheckAuthorDeps.pm52
1 files changed, 52 insertions, 0 deletions
diff --git a/inc/CheckAuthorDeps.pm b/inc/CheckAuthorDeps.pm
new file mode 100644
index 0000000..69f2dde
--- /dev/null
+++ b/inc/CheckAuthorDeps.pm
@@ -0,0 +1,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;