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>
    <https://github.com/dagolden/Path-Tiny/commit/c620171db96597456a182ea608
    8a24d8de5debf6>

    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.

