зеркало из https://github.com/github/msysgit.git
207 строки
3.8 KiB
Perl
Executable File
207 строки
3.8 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
eval 'exec /usr/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 <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;
|