# $Id: cpan,v 1.3 2002/08/30 08:55:15 k Exp $
use strict;
# with arguments, installs specified modules
# with switches, installs modules with extra behavior
# without arguments, starts CPAN shell
# without arguments, but some switches
=over 4
=item -a
=item -h
=item -r
=item -v
=back
=over 4
=item c
=item i
Installed the specified modules.
=item m
Makes the specified modules.
=item t
Runs a `make test` on the specified modules.
=back
=head2 Examples
# print a help message
cpan -h
# print the version numbers
cpan -v
# create an autobundle
cpan -a
# recompile modules
cpan -r
# install modules
cpan -i Netscape::Booksmarks Business::ISBN
=head1 TO DO
* add options for other CPAN::Shell functions
autobundle, clean, make, recompile, test
=head1 BUGS
* none noted
=head1 SEE ALSO
Most behaviour, including environment variables and configuration,
comes directly from CPAN.pm.
=head1 AUTHOR
brian d foy <bdfoy@cpan.org>
=cut
use CPAN ();
use Getopt::Std;
my $VERSION =
sprintf "%d.%02d", q$Revision: 1.3 $ =~ m/ (\d+) \. (\d+) /xg;
my %CPAN_METHODS = (
't' => 'test',
);
my @cpan_options = grep { $_ ne $Default } sort keys %CPAN_METHODS;
my $arg_count = @ARGV;
my %options;
Getopt::Std::getopts(
join( '', @cpan_options, $META_OPTIONS ), \%options );
if( $options{h} )
{
print STDERR "Printing help message -- ignoring other arguments\n"
if $arg_count > 1;
print STDERR "Use perldoc to read the documentation\n";
exit 0;
}
elsif( $options{v} )
{
print STDERR "Printing version message -- ignoring other arguments\n"
if $arg_count > 1;
my $CPAN_VERSION = CPAN->VERSION;
print STDERR "cpan script version $VERSION\n" .
"CPAN.pm version $CPAN_VERSION\n";
exit 0;
}
elsif( $options{a} )
{
print "Creating autobundle in ", $CPAN::Config->{cpan_home},
"/Bundle\n";
print STDERR "Creating autobundle -- ignoring other arguments\n"
if $arg_count > 1;
CPAN::Shell->autobundle;
exit 0;
}
elsif( $options{r} )
{
print STDERR "Creating autobundle -- ignoring other arguments\n"
if $arg_count > 1;
CPAN::Shell->recompile;
}
else
{
my $switch = '';
foreach my $option ( @cpan_options )
{
next unless $options{$option};
$switch = $option;
last;
}
if( not $switch and @ARGV ) { $switch = $Default; }
elsif( not $switch and not @ARGV ) { CPAN::shell(); exit 0; }
elsif( $switch and not @ARGV )
{ die "Nothing to $CPAN_METHODS{$switch}!\n"; }
my $method = $CPAN_METHODS{$switch};
die "CPAN.pm cannot $method!\n" unless CPAN::Shell->can( $method );
foreach my $arg ( @ARGV )
{
CPAN::Shell->$method( $arg );
}
}
1;