Package: dh-make-perl Version: 0.70-1 Severity: normal Tags: patch Debian::AptContents fails to find alternative packages if they install the required module to different locations. One such example is Image::Magick which is available from perlmagick and graphicsmagick-libmagick-dev-compat - perlmagick installs Image/Magick.pm to /usr/lib, but graphicsmagick-libmagick-dev-compat installs it to /usr/share. This case is not correctly handled by the read_cache() method from Debian::AptContents, as it overwrites an existing entry for eg. Image/Magick.pm in the apt_contents cache if the 'same' file is found a second time, in another directory. The result is that instead of a dependency to 'graphicsmagick-libmagick-dev-compat | perlmagick', I only get 'graphicsmagick-libmagick-dev-compat'. The same issue arises if different Contents files contain the same module, but in different packages. The attached patch should provide a fix for this problem.
Regards, Manfred -- System Information: Debian Release: 6.0.1 APT prefers stable APT policy: (990, 'stable'), (500, 'stable-updates') Architecture: amd64 (x86_64) Kernel: Linux 2.6.26-2-amd64 (SMP w/2 CPU cores) Locale: LANG=de_CH.utf8, LC_CTYPE=de_CH.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages dh-make-perl depends on: ii debhelper 8.0.0 helper programs for debian/rules ii dpkg-dev 1.15.8.10 Debian package development tools ii fakeroot 1.14.4-1 Gives a fake root environment ii libapt-pkg-perl 0.1.24+b1 Perl interface to libapt-pkg ii libarray-unique-perl 0.08-1 Tie-able array that allows only un ii libclass-accessor-perl 0.34-1 Perl module that automatically gen ii libdpkg-perl 1.15.8.10 Dpkg perl modules ii libemail-date-format-perl 1.002-1 Module to generate RFC-2822-valid ii liblist-moreutils-perl 0.25~02-1 Perl module with additional list f ii libmodule-depends-perl 0.14-3 identify the dependencies of a dis ii libparse-debcontrol-perl 2.005-2 Easy OO parsing of Debian control- ii libparse-debianchangelog-perl 1.1.1-2.1 parse Debian changelogs and output ii libtie-ixhash-perl 1.21-2 ordered associative arrays for Per ii libwww-mechanize-perl 1.64-1 module to automate interaction wit ii libyaml-perl 0.71-1 YAML Ain't Markup Language ii make 3.81-8 An utility for Directing compilati ii perl 5.10.1-17 Larry Wall's Practical Extraction ii perl-modules [libmodule-corel 5.10.1-17 Core Perl modules Versions of packages dh-make-perl recommends: ii apt-file 2.4.0 search for files within Debian pac dh-make-perl suggests no packages. -- no debconf information
>From 9fb611f272e03dc1af3d217428d565b0454cb6ca Mon Sep 17 00:00:00 2001 From: Manfred Stock <manfred.stock+deb...@gmail.com> Date: Thu, 14 Apr 2011 18:28:04 +0200 Subject: [PATCH] Prevent missed alternative dependencies from contents The perlmagick and graphicsmagick-libmagick-dev-compat packages both contain Image::Magick, but perlmagick installs it to /usr/lib while graphicsmagick-libmagick-dev-compat installs it to /usr/share. Unfortunately, the read_cache method from Debian::AptContents overwrote the Image/Magick.pm entry from perlmagick with the one from graphicsmagick-libmagick-dev-compat, which resulted in the missing alternative dependency to perlmagick. Other alternative package combinations might be affected in a similar way. --- lib/Debian/AptContents.pm | 6 ++++-- t/AptContents.t | 13 ++++++++++++- t/contents/test_debian_dists_testing_Contents | 3 +++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/Debian/AptContents.pm b/lib/Debian/AptContents.pm index 360aff8..5616712 100644 --- a/lib/Debian/AptContents.pm +++ b/lib/Debian/AptContents.pm @@ -319,7 +319,9 @@ sub read_cache { | perl/(?:\d[\d.]+)/ # or perl/5.10/ ) }{}x; - $cache->{apt_contents}{$file} = $packages; + $cache->{apt_contents}{$file} = exists $cache->{apt_contents}{$file} + ? $cache->{apt_contents}{$file}.','.$packages + : $packages; # $packages is a comma-separated list of # section/package items. We'll parse it when a file @@ -396,7 +398,7 @@ sub find_file_packages { # otherwise it won't strip enough off Ubuntu's # usr/share/perl5/Config/Any.pm universe/perl/libconfig-any-perl - return @packages; + return uniq @packages; } =item find_perl_module_package( $module, $version ) diff --git a/t/AptContents.t b/t/AptContents.t index 1f52600..3a35ce0 100755 --- a/t/AptContents.t +++ b/t/AptContents.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 23; +use Test::More tests => 25; BEGIN { use_ok 'Debian::AptContents'; @@ -128,4 +128,15 @@ is( $apt_contents->find_perl_module_package('GD') . '', 'Alternative dependency for module found in multiple packages' ); +is_deeply( + [ $apt_contents->find_file_packages('Image/Magick.pm') ], + [ 'perlmagick', 'graphicsmagick-libmagick-dev-compat' ], + "Image/Magick.pm in perlmagick and graphicsmagick-libmagick-dev-compat, but different paths" +); + +is( $apt_contents->find_perl_module_package('Image::Magick') . '', + 'graphicsmagick-libmagick-dev-compat | perlmagick', + 'Alternative dependency for Image::Magick module found in multiple packages' +); + ok( unlink "$Bin/Contents.cache", 'Contents.cache unlnked' ); diff --git a/t/contents/test_debian_dists_testing_Contents b/t/contents/test_debian_dists_testing_Contents index ee318f6..8f9082e 100644 --- a/t/contents/test_debian_dists_testing_Contents +++ b/t/contents/test_debian_dists_testing_Contents @@ -1148,3 +1148,6 @@ usr/share/request-tracker3.6/lib/RT/URI/base.pm misc/request-tracker3.6 usr/share/request-tracker3.6/lib/RT/URI/fsck_com_rt.pm misc/request-tracker3.6 usr/share/request-tracker3.6/lib/RT/URI/fsck_com_rtfm.pm misc/rt3.6-rtfm usr/share/request-tracker3.6/lib/RT/URI/t.pm misc/request-tracker3.6 +usr/lib/perl5/Image/Magick.pm perl/perlmagick +usr/share/perl5/GD/SecurityImage/Magick.pm perl/libgd-securityimage-perl +usr/share/perl5/Image/Magick.pm graphics/graphicsmagick-libmagick-dev-compat -- 1.7.2.5