NAME

Config::Model::Dpkg::Dependency - Checks Debian dependency declarations

SYNOPSIS

 use Config::Model ;
 use Log::Log4perl qw(:easy) ;
 use Data::Dumper ;
 Log::Log4perl->easy_init($WARN);
 # define configuration tree object
 my $model = Config::Model->new ;
 $model ->create_config_class (
    name => "MyClass",
    element => [
        Depends => {
            'type'       => 'leaf',
            'value_type' => 'uniline',
            class => 'Config::Model::Dpkg::Dependency',
        },
    ],
 ) ;
 my $inst = $model->instance(root_class_name => 'MyClass' );
 my $root = $inst->config_root ;
 $root->load( 'Depends="libc6 ( >= 1.0 )"') ;
 # Connecting to qa.debian.org to check libc6 versions. Please wait ...
 # Warning in 'Depends' value 'libc6 ( >= 1.0 )': unnecessary
 # versioned dependency: >= 1.0. Debian has lenny-security ->
 # 2.7-18lenny6; lenny -> 2.7-18lenny7; squeeze-security ->
 # 2.11.2-6+squeeze1; squeeze -> 2.11.2-10; wheezy -> 2.11.2-10; sid
 # -> 2.11.2-10; sid -> 2.11.2-11;

DESCRIPTION

This class is derived from Config::Model::Value. Its purpose is to check the value of a Debian package dependency for the following:
syntax as described in http://www.debian.org/doc/debian-policy/ch-relationships.html
Whether the version specified with ">" or ">=" is necessary. This module checks with Debian server whether older versions can be found in Debian old-stable or not. If no older version can be found, a warning is issued (unless the package is known or calculated to be virtual)
Whether a Perl library is dual life. In this case the dependency is checked according to Debian Perl policy <http://pkg-perl.alioth.debian.org/policy.html#debian_control_handling>. Because Debian auto-build systems (buildd) will use the first available alternative, the dependency should be in the form :
"perl (>= 5.10.1) | libtest-simple-perl (>= 0.88)" when the required perl version is available in sid. ".
"libcpan-meta-perl | perl (>= 5.13.10)" when the Perl version is not available in sid

Cache

Queries to Debian server are cached in "~/.config_model_depend_cache" for about one month.

BUGS

Dependencies containing variables (e.g. "${foo}") are accepted as-is. No check are performed.
Virtual package names are found scanning local apt cache. Hence an unknown package on your system may be a virtual package on another system.
More advanced checks can probably be implemented. The author is open to new ideas. He's even more open to patches (with tests).

AUTHOR

Dominique Dumont, ddumont [AT] cpan [DOT] org

SEE ALSO

Config::Model, Config::Model::Value, Memoize, Memoize::Expire

Questions & Answers

Helpful answers and articles about Config::Model::Dpkg::Dependency you may found on these sites:
Stack Overflow Server Fault Super User Unix & Linux Ask Ubuntu Network Engineering DevOps Raspberry Pi Webmasters Google Search