Like every CPAN author did probably once, I just released a project with an incomplete PREREQ_PM parameter in Makefile.PL.
I've read brian d foy's journal entries Finding Prerequisites and Finding Prerequisites II, but still produced a very simple script to help write a correct PREREQ_PM
Here it is:
#!/usr/bin/perl -w # $Id: prereq,v 1.1 2002/10/16 13:55:33 book Exp $ use strict; use Module::Info; use Getopt::Long; # configure @INC my @lib; Getopt::Long::Configure("bundling_override"); GetOptions ("I=s" => \@lib); push @INC, @lib; # the list of tested files my %prereq; my $modules = join '|', sort map { s!/!::!g; s/\.pm$//; quotemeta; } @{ [@ARGV] }; # look for simple 'use' strings while (<>) { next if not /^use ([\w:]+)/; my $name = $1; my $module = Module::Info->new_from_module($name); die "$name is not in your \@INC!\n" if not defined $module; $prereq{$name}++ unless $name =~ /$modules/o or $module->is_core; } # print the modules local $\ = $, = $/; print keys %prereq;
It's biggest shortcoming is that it looks for modules with /^use ([\w:]+)/, so it's not very bright.
But it can be called from your working directory, and "use" modules you develop but haven't installed yet, thanks to the -I option (works just like perl's -I).
$ prereq -Iblib/lib HeavensAbove.pm t/*.t LWP::UserAgent HTML::TreeBuilder HTML::Form Test::More
Good enough for my needs (and my coding style).
Re:Dependencies without the regex
BooK on 2002-10-16T17:02:39
Ooh. A coderef in @INC. Nice stuff.
Well, I've just tested it, and it's far too verbose for my needs, since it lists every module that ever gets used. Module::Info could help by filtering out the core modules, but many modules in the same distribution will be listed.
By the way, the script that I posted has a few problems filtering some modules from the list.
...instead have pristine copies (that is, non-installed-upon) of Perls (5.8.0, 5.6.0, 5.6.1, 5.005_03, 5.004_05) available and then just run Makefile.PL and make test with those? That should find assumptions about installed modules pretty quickly and also allow backward compatibility testing.