The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.