NAME

Gentoo::Util::VirtualDepend - Hard-coded replacements for perl-core/ dependencies and dependencies with odd names in Gentoo

VERSION

version 0.001000

SYNOPSIS

use Gentoo::Util::VirtualDepend;

my $v = Gentoo::Util::VirtualDepend->new();

# somewhere in complex dependency resolution

my $cpan_module = spooky_function();
my $gentoo_dependency;

if ( $v->has_module_override( $cpan_module ) ) {
  $gentoo_dependency = $v->get_module_override( $cpan_module );
} else {
  # do it the hard way.
}

If you're trying to be defensive and you're going to map the modules to distributions the hard way ( trust me, the code is really ugly ), then you may instead want

if ( $v->has_dist_override( $cpan_dist ) ) {
  $gentoo_dependency = $v->get_dist_override( $cpan_dist );
} else {
  # fallback to using dev-perl/Foo-Bar
}

Which basically serves as a distribution name translator.

WHY YOU WANT TO DO THAT

Well ...

{ requires => { Foo => 1.0 }}

Foo is in Bar

Foo 1.0 could have been shipped in in Bar-1.0, Bar-0.5, or Bar-2.0 for all you know.

That's the unfortunate reality of CPAN dependencies.

So if you naively map

Foo-1.0 → >=dev-lang/Bar-1.0

You might get breakage if Foo 1.0 didn't ship till Bar-2.0, and the user has Bar-1.0 → Shower of sparks.

DESCRIPTION

This module serves as a low level glue layer for the handful of manual mappings that are needed in Gentoo due to things not strictly tracking upstream.

CPANPLUS::Dist::Gentoo has similar logic to this, but not as simple ( or for that matter, usable without CPANPLUS )

This module is not intended to be used entirely on its own, but as a short-circuit before calling complicated MetaCPAN code.

METHODS

has_module_override

$v->has_module_override( $module )

Returns true if there is a known mapping for $module in Gentoo that is unusual and may require translation.

Will return true for anything that is either a virtual or has an unusual name translation separating it from CPAN.

get_module_override

$v->get_module_override( $module )

Returns a Gentoo dependency atom corresponding to $module if there is a known mapping for $module.

For instance,

$v->get_module_override('ExtUtils::MakeMaker')

Emits:

virtual/perl-ExtUtilsMakeMaker

If ExtUtils::MakeMaker is one day de-cored (Hah!, dreams are free) then has_module_override will return false, and that instructs you to go back to assuming it is in dev-perl/

has_dist_override

$v->has_dist_override( $distname )

Similar to has_module_override but closer to the dependency spec.

Will return true for anything that is either a virtual or has an unusual name translation separating it from CPAN.

get_dist_override

$v->get_dist_override( $distname )

Similar to get_module_override but closer to the dependency spec.

For instance:

$v->get_dist_override('PathTools')

Emits:

virtual/perl-File-Spec

Because Gentoo is quirky like that.

AUTHOR

Kent Fredric <kentnl@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 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.