Subject: dh-make-perl: Incorrect dependency detection (because Module::Depends is used)

From: Slaven Rezic <[email-masked]>
Date: Fri, 13 Apr 2012 21:02:05 +0200

Package: dh-make-perl
Version: 0.70-1
Severity: normal

When trying to build Tk::Wizard with dh-make-perl using

    dh-make-perl --cpan=Tk::Wizard --build

an obviously wrong dependecy was detected:

- Win32::TieRegistry  not found in any package
   CPAN contains it in Win32-TieRegistry
   substituting package name of libwin32-tieregistry-perl

Problem is very probably that META.yml is used for
dependency detection. This is wrong unless dynamic_config:0 is
set in the META file. If dynamic_config is not defined or
set to 1, then Makefile.PL or Build.PL must be run and
the created Makefile or Build must be inspected for the
correct dependencies (in newer Perls one can use the created
MYMETA* files instead).

META.yml is only meant for statistical analysis, but not for
real dependency resolution.

In the case of Tk::Wizard the Windows-specific module is
optional and only used on Windows systems. Probably the module
author was creating the distribution on a Windows system,
so the generated META.yml had this windows-specific module
in the prerequisites list. Just conincidence.

I can point you to the correct dependency detection code in
CPAN.pm. Maybe using Module::Depends::Intrusive *always*
would also do the right thing.

Regards,
    Slaven

-- System Information:
Debian Release: 6.0.4
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-028stab095.1 (SMP w/1 CPU core)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash

Versions of packages dh-make-perl depends on:
ii  debhelper              8.0.0             helper programs for debian/rules
ii  dpkg-dev               1.15.8.12         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.12         Dpkg perl modules
ii  libemail-date-format-p 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-pe 2.005-2           Easy OO parsing of Debian control-
ii  libparse-debianchangel 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-17squeeze3 Larry Wall's Practical Extraction 
ii  perl-modules [libmodul 5.10.1-17squeeze3 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: Damyan Ivanov <[email-masked]>
Date: Thu, 8 Aug 2013 19:26:51 +0300

Control: -1 tags confirmed

-=| Slaven Rezic, 13.04.2012 21:02:05 +0200 |=-
> correct dependencies (in newer Perls one can use the created

Thanks for the explanation and sorry for replaying more than an year 
later.

> CPAN.pm.

That would be very helpful indeed. Hopefully there is a way to just 
use some CPAN.pm-provided method to obtain this information.

> Maybe using Module::Depends::Intrusive *always* would also do the 
> right thing.

Tried that, but for this package M:D:Intrusive returns an empty hash 
:/

---

From: Slaven Rezic <[email-masked]>
Date: Thu, 08 Aug 2013 22:26:17 +0200

> Tried that, but for this package M:D:Intrusive returns an empty hash 

With Debian now shipping perl 5.14.x, we have now the easier option to
fix the problem. Modern ExtUtils::MakeMaker and Module::Build write a
"MYMETA.yml" (and MYMETA.json) file when executing "perl Makefile.PL"
resp. "perl Build.PL", and this file contains all fields as META.yml,
but dynamically evaluated.

In the case of Tk::Wizard the requires field in MYMETA.yml looks like
this:

requires:
  Carp: 0
  Cwd: 0
  ExtUtils::testlib: 0
  File::Copy: 0
  File::Path: 0
  File::Spec: 0
  FileHandle: 0
  IO::Handle: 0
  LWP::UserAgent: 0
  Scalar::Util: 0
  Test::More: 0
  Tk: 0
  Tk::After: 0
  Tk::DialogBox: 0
  Tk::DirTree: 0
  Tk::ErrorDialog: 0
  Tk::Frame: 0
  Tk::LabFrame: 0
  Tk::MainWindow: 0
  Tk::ProgressBar: 0
  Tk::ROText: 0

That is, the Win32* modules are gone.

So probably the fix is: run Makefile.PL/Build.PL, and if there was a
MYMETA.yml file written, use this, else fallback to META.yml (the
fallback probably should never happen, so is worth a warning).

Regards,
    Slaven

-- 
Slaven Rezic - slaven <at> rezic <dot> de
  BBBike - route planner for cyclists in Berlin
  WWW version:                           http://www.bbbike.de
  Perl/Tk version for Unix and Windows:  http://bbbike.sourceforge.net