Re: Module dependencies

2003-09-10 Thread Aaron Trevena
On Mon, 8 Sep 2003, Kate L Pugh wrote:
 I want to find a nice, visual, automatic way of looking at my modules'
 dependencies.  I want a script that I can give the name of a module
 and optionally a Perl version, and get a recursive list of its
 dependencies and their dependencies, maybe with highlighting to show
 which modules have never been in core, which modules are core in my
 Perl version, etc.

 Does such a thing or even a start at it exist?  I'm sure I remember
 reading about something like this using Module::CPANTS but I can't
 find it now.

Autodia does most of what you want. (and it now copes with circular
relationships)

Any extras I could probably hack in at some point - looking at makefiles,
etc and distinguishing core perl and required perl would certainly be
useful features.

HTH,

A.

-- 
Aaron J Trevena - Perl Hacker, Kung Fu Geek, Internet Consultant
AutoDia --- Automatic UML and HTML Specifications from Perl, C++
and Any Datasource with a Handler. http://droogs.org/autodia



Re: Module dependencies

2003-09-09 Thread Piers Cawley
Leon Brocard [EMAIL PROTECTED] writes:

 Tony Bowden sent the following bits through the ether:

 Obviously depends on Module::CPANTS being correct, but that's an
 SEP...

 I've given up Module::CPANTS to Thomas Klausner. So it's not my P! ;-)

 May he run with it and do all the things I would do if I didn't have
 seventeen billion and four things to do.

It's always the last four things isn't it?



Re: Module dependencies

2003-09-08 Thread Shevek
On Mon, 8 Sep 2003, Kate L Pugh wrote:

 I want to find a nice, visual, automatic way of looking at my modules'
 dependencies.  I want a script that I can give the name of a module
 and optionally a Perl version, and get a recursive list of its
 dependencies and their dependencies, maybe with highlighting to show
 which modules have never been in core, which modules are core in my
 Perl version, etc.
 
 Does such a thing or even a start at it exist?  I'm sure I remember
 reading about something like this using Module::CPANTS but I can't
 find it now.

Surely identifying the dependencies of any one module is incomputable in 
general, and most likely incomputable in the specific cases of many 
popular modules, especially those with baroque plugin architectures.

Yay, I get to rain on Kake's parade again.

S.

-- 
Shevekhttp://www.anarres.org/
I am the Borg. http://www.gothnicity.org/



Re: Module dependencies

2003-09-08 Thread Rafael Garcia-Suarez
Shevek wrote:
 
 Surely identifying the dependencies of any one module is incomputable in 
 general, and most likely incomputable in the specific cases of many 
 popular modules, especially those with baroque plugin architectures.

Of course that depends on whether you want to compute the dependencies
yourself, or if you rely on metadata such as the Makefile.PLs and
the META.yml files.

-- 
Upward is not *NIX



Re: Module dependencies

2003-09-08 Thread Paul Mison
On 08/09/2003 at 13:15 +0100, Kate L Pugh wrote:
I want to find a nice, visual, automatic way of looking at my modules'
dependencies.  [snip]
I wonder how far a combination of Module::ScanDeps and 
Module::CoreList and a bit of wrapper code would get you?

http://search.cpan.org/perldoc?Module::ScanDeps.pm
http://search.cpan.org/perldoc?Module::CoreList
--
:: paul
:: historic light cone


Re: Module dependencies

2003-09-08 Thread Kate L Pugh
Shevek wrote:
 Surely identifying the dependencies of any one module is incomputable in 
 general, and most likely incomputable in the specific cases of many 
 popular modules, especially those with baroque plugin architectures.

On Mon 08 Sep 2003, Rafael Garcia-Suarez
[EMAIL PROTECTED] wrote:
 Of course that depends on whether you want to compute the dependencies
 yourself, or if you rely on metadata such as the Makefile.PLs and
 the META.yml files.

Well, I was planning to rely on Module::CPANTS.  I'd prefer an extant
imperfect solution to an unimplementable perfect solution, or no solution.

I'd like to be able to look at a relatively small report on a module,
and go aha!  Foo::Bar only has a couple of dependencies, but one of
those has jillions of non-core dependencies, and I'm only using a tiny
part of the Foo::Bar functionality anyway, so let's see if there's a
better way.

I am really, really reluctant to add this to my already-huge to-do
list and then find out someone already did it.

Kake



Re: Module dependencies

2003-09-08 Thread Tony Bowden
On Mon, Sep 08, 2003 at 02:21:33PM +0100, Kate L Pugh wrote:
 Well, I was planning to rely on Module::CPANTS.  I'd prefer an extant
 imperfect solution to an unimplementable perfect solution, or no solution.

I've used this in the past.

Obviously depends on Module::CPANTS being correct, but that's an SEP...

use Module::CPANTS;

my %seen;
my $data = Module::CPANTS-new-data;
print_requires('Class-DBI-0.93.tar.gz', 0);

sub print_requires {
my ($dist, $spc) = @_;
printf %s%s\n,   x $spc, $dist;
print_requires($_, $spc + 2)
foreach grep !$seen{$_}++, @{ $data-{$dist}-{requires} };
}

Tony



Re: Module dependencies

2003-09-08 Thread Paul Johnson

Shevek said:
 On Mon, 8 Sep 2003, Rafael Garcia-Suarez wrote:

 Shevek wrote:
 
  Surely identifying the dependencies of any one module is incomputable
 in
  general, and most likely incomputable in the specific cases of many
  popular modules, especially those with baroque plugin architectures.

 Of course that depends on whether you want to compute the dependencies
 yourself, or if you rely on metadata such as the Makefile.PLs and
 the META.yml files.

 I believe that there is a sufficient proportion of Makefile.PL files which
 compute dependencies rather than using a PREREQ_PM to make this an
 unpleasant task.

I tend to check for the presence of modules in Makefile.PL and if they are
not found give a warning to say that certain functionality is unavailable
until they are installed, then check for those modules at runtime if the
functions which need them are called.

What would be nice would be a way to say here is a list of modules which
are nice to have but not required.  Then, if running CPAN or CPANPLUS
those dependencies could be made into prerequisites or left as nice to
have and handled some other way or something.  This would probably break
any static parser unless there was some convention to follow.

Being a heathen, I have no idea how this would interact with Module::Build
or META.yml.

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net




Re: Module dependencies

2003-09-08 Thread Rafael Garcia-Suarez
Michael Stevens wrote:
 
 Probably you could get most of the data the experimental way - %INC will
 list things loaded with do, require, or use (see perlvar), so you could
 'use' each interesting module on its own and monitor which files get
 loaded, and generate a suitable graph.

I think that Module::Info (by Schwern) uses a slightly more
sophisticated technique. However, whithout a web connection at
the moment, I'm unable to confirm this. So this information is
potientially completely worthless.



Re: Module dependencies

2003-09-08 Thread Shevek
On Mon, 8 Sep 2003, Kate L Pugh wrote:

 Shevek wrote:
  Surely identifying the dependencies of any one module is incomputable in 
  general, and most likely incomputable in the specific cases of many 
  popular modules, especially those with baroque plugin architectures.
 
 On Mon 08 Sep 2003, Rafael Garcia-Suarez
 [EMAIL PROTECTED] wrote:
  Of course that depends on whether you want to compute the dependencies
  yourself, or if you rely on metadata such as the Makefile.PLs and
  the META.yml files.
 
 Well, I was planning to rely on Module::CPANTS.  I'd prefer an extant
 imperfect solution to an unimplementable perfect solution, or no solution.

It is my general impression of CPAN (and much of the open source world) 
that there are a great number of solutions to each and every easy problem, 
and frequently no solution to the harder problems. However...

I like the suggestion later in this thread about having a standard way of
specifying optional modules. I think that such a feature could benefit
from considerable architecture support, and would make Makefile.PL (or
whatever equivalent) more reliable than some of the home-grown efforts
flying around.

S.

-- 
Shevekhttp://www.anarres.org/
I am the Borg. http://www.gothnicity.org/



Re: Module dependencies

2003-09-08 Thread Kate L Pugh
On Mon 08 Sep 2003, Shevek [EMAIL PROTECTED] wrote:
 I like the suggestion later in this thread about having a standard way of
 specifying optional modules. I think that such a feature could benefit
 from considerable architecture support, and would make Makefile.PL (or
 whatever equivalent) more reliable than some of the home-grown efforts
 flying around.

Module::Build has this:

   recommends
   This is just like the requires argument, except
   that modules listed in this section aren't essen-
   tial, just a good idea.  We'll just print a
   friendly warning if one of these modules aren't
   found, but we'll continue running.

So:

 use Module::Build;
 Module::Build-new
   (
module_name = 'Foo::Bar',
requires= {
'Essential::Module' = 0,
   },
recommends  = {
'Useful::Nonessential::Module' = 0,
   },
   )-create_build_script;

Kake



Re: Module dependencies

2003-09-08 Thread Paul Makepeace
Je 2003-09-08 15:29:16 +0100, Shevek skribis:
 I like the suggestion later in this thread about having a standard way of
 specifying optional modules. I think that such a feature could benefit
 from considerable architecture support, and would make Makefile.PL (or
 whatever equivalent) more reliable than some of the home-grown efforts
 flying around.

Without thinking too hard about the consequences perhaps even having
this somehow in the code itself so that in persistent perl
environments a list of pre-loadable modules could easily be generated
(PerlModule ...)

may use Carp;
use Maybe qw(Carp);

(package Maybe; 1; # would it even have to do anything?)

Paul

-- 
Paul Makepeace ... http://paulm.com/

What is snot? Avatars pick my brian.
   -- http://paulm.com/toys/surrealism/



Re: Module dependencies

2003-09-08 Thread Shevek
On Mon, 8 Sep 2003, Paul Makepeace wrote:

 Je 2003-09-08 15:29:16 +0100, Shevek skribis:
  I like the suggestion later in this thread about having a standard way of
  specifying optional modules. I think that such a feature could benefit
  from considerable architecture support, and would make Makefile.PL (or
  whatever equivalent) more reliable than some of the home-grown efforts
  flying around.
 
 Without thinking too hard about the consequences perhaps even having
 this somehow in the code itself so that in persistent perl
 environments a list of pre-loadable modules could easily be generated
 (PerlModule ...)
 
 may use Carp;
 use Maybe qw(Carp);
 
 (package Maybe; 1; # would it even have to do anything?)

It would have to know what symbols Carp exports in order to let our 
current translation unit compile correctly. This is .. err... Turing 
complete, as usual.

It's raining.

Perhaps (roughly):

use Maybe Carp = qw(cluck croak);

package Maybe;

use vars qw(%EXPORT);

sub import {
my ($class, $package, @export) = @_;
$EXPORT{$_} = $package for @export;
*{$caller::$_} = sub { really_import($package, @_) } for @export;
}

sub really_import {
require $EXPORT{shift};
goto something. fuck.
}

S.

-- 
Shevekhttp://www.anarres.org/
I am the Borg. http://www.gothnicity.org/



Re: Module dependencies

2003-09-08 Thread Leon Brocard
Tony Bowden sent the following bits through the ether:

 Obviously depends on Module::CPANTS being correct, but that's an
 SEP...

I've given up Module::CPANTS to Thomas Klausner. So it's not my P! ;-)

May he run with it and do all the things I would do if I didn't have
seventeen billion and four things to do.

Leon
-- 
Leon Brocard.http://www.astray.com/
scribot.http://www.scribot.com/

... Any closet is a walk-in closet if you try hard enough