Julian Mehnle wrote:
Jens Porup wrote:Well, I finally got my in-house perl apps packaged correctly, but apt isn't picking up the requires => packages listed in my Build.PL. dpkg-gencontrol: warning: unknown substitution variable ${misc:Depends} How do I make Module::Build make these dependencies forcing and binding?Module::Build can't do that for you, "Automatic generation of miscellaneous dependencies" is a debhelper feature. See the debhelper man-page. (${misc:Depends} is a substitution variable for dependencies caused by using certain debhelper features, not for Perl dependencies.) You may want to look at the dh_perl man-page for automating the main "perl" dependency, but as far as I know there is no automatic way to generate the Debian dependencies for required Perl module packages. You need to add them to the control file manually.
The current CVS[1] of dh-make-perl has decent dependency checking. If you want to do it on your own, you can use a combination of Module::Depends::Intrusive (from libmodule-depends-perl) and apt-file to get the dependencies of your module and find the appropriate Debian packages. You could try something like what dh-make-perl does (see code at bottom). Chris Sacca [1] https://alioth.debian.org/scm/?group_id=30181 use Module::Depends::Intrusive; sub extract_depends { my ($dir) = shift; $dir .= '/' unless $dir =~ m/\/$/; my $mod_dep = Module::Depends::Intrusive->new(); $mod_dep->dist_dir( $dir ); $mod_dep->find_modules(); my %dep_hash = %{$mod_dep->requires}; my @uses; foreach my $module (keys( %dep_hash )) { next if (grep ( /^$module$/, @pragmas, @stdmodules)); push @uses, $module; } my @deps; my @not_debs; if (`which apt-file`) { foreach my $module (@uses) { print "Searching for $module package using apt-file.\n"; $module =~ s|::|/|g; my @search = `apt-file search $module.pm`; # Regex's to search the return of apt-file to find the right pkg my $ls = '(?:lib|share)'; my $ver = '\d+(\.\d+)+'; my $re = "usr/(?:$ls/perl/$ver|$ls/perl5)/$module\\.pm"; for (@search) { # apt-file output # package-name: path/to/perl/module.pm chomp; my ($p, $f) = split / /, $_; chop($p); #Get rid of the ":" if ($f =~ /$re/ && ! grep { $_ eq $p } @deps, "perl", "perl-base", "perl-modules") { push @deps, $p; last; } } unless (@search) { $module =~ s|/|::|g; push @not_debs, $module; } } } print "\n"; print "Needs the following debian packages: " . join (", ", @deps) . "\n" if (@deps); print "Needs the following modules for which there are debian packages availible: " . join (", ", @not_debs) . "\n" if (@not_debs); return join (", ", @deps); } -- Christopher Sacca <csacca@thecsl.org> | http://csacca.thecsl.org Americorps CTC VISTA | http://www.cpcs.umb.edu/vista/ 1024D/AFF87013 - FC21 092C 95C6 0071 6416 E79B CB46 96A4 AFF8 7013
Attachment:
signature.asc
Description: OpenPGP digital signature