diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2003-02-08 08:45:35 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2003-02-08 08:45:35 +0000 |
commit | 5fc0f0f6e90f423ffa278e3f31f7021206604ee9 (patch) | |
tree | 5b2e1c273398658ee95394052bd8fd53b1c2f75e /utils | |
parent | 9c36735de2bc373cab0c4275429b13fc1c754d20 (diff) | |
download | perl-5fc0f0f6e90f423ffa278e3f31f7021206604ee9.tar.gz |
Upgrade to CPAN 1.64, from Andreas Koenig.
p4raw-id: //depot/perl@18672
Diffstat (limited to 'utils')
-rw-r--r-- | utils/cpan | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/utils/cpan b/utils/cpan new file mode 100644 index 0000000000..38af90526e --- /dev/null +++ b/utils/cpan @@ -0,0 +1,203 @@ +#!/usr/bin/perl +# $Id: cpan,v 1.3 2002/08/30 08:55:15 k Exp $ +use strict; + +=head1 NAME + +cpan - easily interact with CPAN from the command line + +=head1 SYNOPSIS + + # with arguments, installs specified modules + cpan module_name [ module_name ... ] + + # with switches, installs modules with extra behavior + cpan [-cimt] module_name [ module_name ... ] + + # without arguments, starts CPAN shell + cpan + + # without arguments, but some switches + cpan [-ahrv] + +=head1 DESCRIPTION + +This script provides a command interface (not a shell) to CPAN.pm. + +=head2 Meta Options + +These options are mutually exclusive, and the script processes +them in this order: [ahvr]. Once the script finds one, it ignores +the others, and then exits after it finishes the task. The script +ignores any other command line options. + +=over 4 + +=item -a + +Creates the CPAN.pm autobundle with CPAN::Shell->autobundle. + +=item -h + +Prints a help message. + +=item -r + +Recompiles dynamically loaded modules with CPAN::Shell->recompile. + +=item -v + +Print the script version and CPAN.pm version. + +=back + +=head2 Module options + +These options are mutually exclusive, and the script processes +them in alphabetical order. + +=over 4 + +=item c + +Runs a `make clean` in the specified module's directories. + +=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 $Default = 'default'; + +my $META_OPTIONS = 'ahvr'; + +my %CPAN_METHODS = ( + $Default => 'install', + 'c' => 'clean', + 'i' => 'install', + 'm' => 'make', + '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; |