#!/home/grinnz/projects/perldoc-browser/perls/5.8.8/bin/perl eval 'exec /home/grinnz/projects/perldoc-browser/perls/5.8.8/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; #!/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 =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;