summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2003-02-08 08:45:35 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2003-02-08 08:45:35 +0000
commit5fc0f0f6e90f423ffa278e3f31f7021206604ee9 (patch)
tree5b2e1c273398658ee95394052bd8fd53b1c2f75e /utils
parent9c36735de2bc373cab0c4275429b13fc1c754d20 (diff)
downloadperl-5fc0f0f6e90f423ffa278e3f31f7021206604ee9.tar.gz
Upgrade to CPAN 1.64, from Andreas Koenig.
p4raw-id: //depot/perl@18672
Diffstat (limited to 'utils')
-rw-r--r--utils/cpan203
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;