Created
November 22, 2011 15:00
-
-
Save c9s/1385855 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!perl -w | |
$|++; | |
use strict; | |
eval "use CPAN::FindDependencies;"; | |
if($@) { | |
print STDERR "Couldn't load CPAN::FindDependencies.\n"; | |
} | |
my $showversion; | |
if( $ARGV[0] && $ARGV[0] eq '--showmoduleversions') { | |
$showversion = 1; | |
shift; | |
} | |
my $target = shift; | |
my @deps = CPAN::FindDependencies::finddeps( | |
$target, | |
nowarnings => 1, | |
'02packages' => '/opt/minicpan/modules/02packages.details.txt.gz', | |
@ARGV | |
); | |
foreach my $dep (@deps) { | |
print ' ' x $dep->depth; | |
print $dep->name . ' (' . $dep->distribution . ')' . "\n"; | |
# print '*' if $dep->warning; | |
# print $dep->name().' (dist: '.$dep->distribution; | |
# print ', mod ver: '.$dep->version() if($showversion && $dep->name() ne $target); | |
# print ")\n"; | |
} | |
=head1 NAME | |
cpandeps - show a module on the CPAN's dependency tree. | |
=head1 DESCRIPTION | |
This program is a simple wrapper around CPAN::FindDependencies. | |
=head1 SYNOPSIS | |
cpandeps CPAN::FindDependencies | |
cpandeps CPAN::FindDependencies perl 5.8.8 cachedir ../foo/bar | |
cpandeps --showmoduleversions CPAN::FindDependencies | |
Given a module name, this program will show you the module's | |
dependency tree. It takes exactly the same arguments as the | |
C<finddeps> function of CPAN::FindDependencies, with the exception | |
that C<nowarnings> is turned *on* by default. | |
=over | |
=item nowarnings | |
Warnings about modules where we can't find their META.yml or Makefile.PL, and | |
so can't divine their pre-requisites, will be suppressed; | |
=item fatalerrors | |
Failure to get a module's dependencies will be a fatal error | |
instead of merely emitting a warning; | |
=item perl | |
Use this version of perl to figure out what's in core. If not | |
specified, it defaults to 5.005. Three part version numbers | |
(eg 5.8.8) are supported but discouraged. | |
=item 02packages | |
The location of CPAN.pm's C<02packages.details.txt.gz> file as a | |
local filename, with either a relative or an absolute path. If not | |
specified, it is fetched from a CPAN mirror instead. The file is | |
fetched just once. | |
=item cachedir | |
A directory to use for caching. It defaults to no caching. Even if | |
caching is turned on, this is only for META.yml or Makefile.PL files. | |
02packages is not cached - if you want to read that from a local disk, see the | |
C<02packages> option. | |
=item maxdepth | |
Cuts off the dependency tree at the specified depth. Your specified | |
module is at depth 0, your dependencies at depth 1, their dependencies | |
at depth 2, and so on. | |
=item usemakefilepl | |
If set to true, then for any module that doesn't have a META.yml, | |
try to use its Makefile.PL as well. Note that this involves | |
downloading code from the Internet and running it. This obviously | |
opens you up to all kinds of bad juju, hence why it is disabled | |
by default. | |
=item recommended | |
Adds recommended modules to the list of dependencies, if set to a true value. | |
=back | |
It also takes the following extra parameter, which must be the first one: | |
=over | |
=item --showmoduleversions | |
If present, the required version of each module is also shown | |
=back | |
It shows the module name, its distribution, and if any warnings were | |
raised (such as if a module's dependencies couldn't be fetched) this | |
is indicated with an asterisk before the module's name. | |
=head1 WARNINGS, BUGS and FEEDBACK | |
This script has not been thoroughly tested. | |
I welcome feedback about my code, including constructive criticism. | |
Bug reports should be made using L<http://rt.cpan.org/> or by email. | |
=head1 SEE ALSO | |
L<CPAN::FindDependencies> | |
L<http://deps.cpantesters.org/> | |
=head1 AUTHOR, LICENCE and COPYRIGHT | |
Copyright 2007 - 2009 David Cantrell E<lt>F<david@cantrell.org.uk>E<gt> | |
This software is free-as-in-speech software, and may be used, | |
distributed, and modified under the terms of either the GNU | |
General Public Licence version 2 or the Artistic Licence. It's | |
up to you which one you use. The full text of the licences can | |
be found in the files GPL2.txt and ARTISTIC.txt, respectively. | |
=head1 CONSPIRACY | |
This software is also free-as-in-mason. | |
=cut |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I tried to figure out which packages can be preinstalled on Alpine Linux to simplify installation of
Carton
forcpan
(install less distributions). As a result I wrote a script, which can be used to examine dependencies.