The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Dist::Zilla::Plugin::Prereqs::SyncVersions - Homogenize prerequisites so dependency versions are consistent

VERSION

version 0.001000

SYNOPSIS

    ; <bunch of metaprereq providing modules>

    [Prereqs::SyncVersions]

Note: This must come after packages that add their own prerequisites in order to work as intended.

DESCRIPTION

This module exists to pose mostly as a workaround for potential bugs in downstream tool-chains.

Namely, CPAN.pm is confused when it sees:

    runtime.requires : Foo >= 5.0
    test.requires    : Foo >= 6.0

It doesn't know what to do.

This is an easy enough problem to solve if you're using [Prereqs] directly, and [AutoPrereqs] already does the right thing, but it gets messier when you're working with plugins that inject their own prerequisites>

So this plugin will homogenize dependencies to be the same version in all phases which infer the dependency, matching the largest one found, so the above becomes:

    runtime.requires : Foo >= 6.0
    test.requires    : Foo >= 6.0

METHODS

mvp_multivalue_args

The following attributes exist, and may be specified more than once:

    applyto
    applyto_relation
    applyto_phase

register_prereqs

This method is called during Dist::Zilla prerequisite generation, and it injects supplementary prerequisites to make things match up.

ATTRIBUTES

applyto_phase

A multi-value attribute that specifies which phases to iterate and homogenize.

By default, this is:

    applyto_phase = build
    applyto_phase = test
    applyto_phase = runtime
    applyto_phase = configure

However, you could extend it further to include develop if you wanted to.

    applyto_phase = build
    applyto_phase = test
    applyto_phase = runtime
    applyto_phase = configure
    appyyto_phase = develop

applyto_relation

A multi-value attribute that specifies which relations to iterate and homogenize.

By default, this is:

    applyto_relation = requires

However, you could extend it further to include suggests and recommends if you wanted to. You could even add conflicts ... but you really shouldn't.

    applyto_relation = requires
    applyto_relation = suggests
    applyto_relation = recommends
    applyto_relation = conflicts ; Danger will robinson.

applyto

A multi-value attribute that by default composites the values of

applyto_relation and applyto_phase.

This is if you want to be granular about how you specify phase/relations to process.

    applyto = runtime.requires
    applyto = develop.requires
    applyto = test.suggests

AUTHOR

Kent Fredric <kentfredric@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Kent Fredric <kentfredric@gmail.com>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.