348 lines
8.0 KiB
Plaintext
348 lines
8.0 KiB
Plaintext
|
#!/usr/bin/perl
|
||
|
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
|
||
|
if $running_under_some_shell;
|
||
|
#!/usr/local/bin/perl
|
||
|
|
||
|
BEGIN { pop @INC if $INC[-1] eq '.' }
|
||
|
use strict;
|
||
|
use vars qw($VERSION);
|
||
|
|
||
|
use App::Cpan '1.64';
|
||
|
$VERSION = '1.64';
|
||
|
|
||
|
my $rc = App::Cpan->run( @ARGV );
|
||
|
|
||
|
# will this work under Strawberry Perl?
|
||
|
exit( $rc || 0 );
|
||
|
|
||
|
=head1 NAME
|
||
|
|
||
|
cpan - easily interact with CPAN from the command line
|
||
|
|
||
|
=head1 SYNOPSIS
|
||
|
|
||
|
# with arguments and no switches, installs specified modules
|
||
|
cpan module_name [ module_name ... ]
|
||
|
|
||
|
# with switches, installs modules with extra behavior
|
||
|
cpan [-cfFimtTw] module_name [ module_name ... ]
|
||
|
|
||
|
# use local::lib
|
||
|
cpan -I module_name [ module_name ... ]
|
||
|
|
||
|
# one time mirror override for faster mirrors
|
||
|
cpan -p ...
|
||
|
|
||
|
# with just the dot, install from the distribution in the
|
||
|
# current directory
|
||
|
cpan .
|
||
|
|
||
|
# without arguments, starts CPAN.pm shell
|
||
|
cpan
|
||
|
|
||
|
# without arguments, but some switches
|
||
|
cpan [-ahpruvACDLOPX]
|
||
|
|
||
|
=head1 DESCRIPTION
|
||
|
|
||
|
This script provides a command interface (not a shell) to CPAN. At the
|
||
|
moment it uses CPAN.pm to do the work, but it is not a one-shot command
|
||
|
runner for CPAN.pm.
|
||
|
|
||
|
=head2 Options
|
||
|
|
||
|
=over 4
|
||
|
|
||
|
=item -a
|
||
|
|
||
|
Creates a CPAN.pm autobundle with CPAN::Shell->autobundle.
|
||
|
|
||
|
=item -A module [ module ... ]
|
||
|
|
||
|
Shows the primary maintainers for the specified modules.
|
||
|
|
||
|
=item -c module
|
||
|
|
||
|
Runs a `make clean` in the specified module's directories.
|
||
|
|
||
|
=item -C module [ module ... ]
|
||
|
|
||
|
Show the F<Changes> files for the specified modules
|
||
|
|
||
|
=item -D module [ module ... ]
|
||
|
|
||
|
Show the module details. This prints one line for each out-of-date module
|
||
|
(meaning, modules locally installed but have newer versions on CPAN).
|
||
|
Each line has three columns: module name, local version, and CPAN
|
||
|
version.
|
||
|
|
||
|
=item -f
|
||
|
|
||
|
Force the specified action, when it normally would have failed. Use this
|
||
|
to install a module even if its tests fail. When you use this option,
|
||
|
-i is not optional for installing a module when you need to force it:
|
||
|
|
||
|
% cpan -f -i Module::Foo
|
||
|
|
||
|
=item -F
|
||
|
|
||
|
Turn off CPAN.pm's attempts to lock anything. You should be careful with
|
||
|
this since you might end up with multiple scripts trying to muck in the
|
||
|
same directory. This isn't so much of a concern if you're loading a special
|
||
|
config with C<-j>, and that config sets up its own work directories.
|
||
|
|
||
|
=item -g module [ module ... ]
|
||
|
|
||
|
Downloads to the current directory the latest distribution of the module.
|
||
|
|
||
|
=item -G module [ module ... ]
|
||
|
|
||
|
UNIMPLEMENTED
|
||
|
|
||
|
Download to the current directory the latest distribution of the
|
||
|
modules, unpack each distribution, and create a git repository for each
|
||
|
distribution.
|
||
|
|
||
|
If you want this feature, check out Yanick Champoux's C<Git::CPAN::Patch>
|
||
|
distribution.
|
||
|
|
||
|
=item -h
|
||
|
|
||
|
Print a help message and exit. When you specify C<-h>, it ignores all
|
||
|
of the other options and arguments.
|
||
|
|
||
|
=item -i module [ module ... ]
|
||
|
|
||
|
Install the specified modules. With no other switches, this switch
|
||
|
is implied.
|
||
|
|
||
|
=item -I
|
||
|
|
||
|
Load C<local::lib> (think like C<-I> for loading lib paths). Too bad
|
||
|
C<-l> was already taken.
|
||
|
|
||
|
=item -j Config.pm
|
||
|
|
||
|
Load the file that has the CPAN configuration data. This should have the
|
||
|
same format as the standard F<CPAN/Config.pm> file, which defines
|
||
|
C<$CPAN::Config> as an anonymous hash.
|
||
|
|
||
|
=item -J
|
||
|
|
||
|
Dump the configuration in the same format that CPAN.pm uses. This is useful
|
||
|
for checking the configuration as well as using the dump as a starting point
|
||
|
for a new, custom configuration.
|
||
|
|
||
|
=item -l
|
||
|
|
||
|
List all installed modules with their versions
|
||
|
|
||
|
=item -L author [ author ... ]
|
||
|
|
||
|
List the modules by the specified authors.
|
||
|
|
||
|
=item -m
|
||
|
|
||
|
Make the specified modules.
|
||
|
|
||
|
=item -M mirror1,mirror2,...
|
||
|
|
||
|
A comma-separated list of mirrors to use for just this run. The C<-P>
|
||
|
option can find them for you automatically.
|
||
|
|
||
|
=item -n
|
||
|
|
||
|
Do a dry run, but don't actually install anything. (unimplemented)
|
||
|
|
||
|
=item -O
|
||
|
|
||
|
Show the out-of-date modules.
|
||
|
|
||
|
=item -p
|
||
|
|
||
|
Ping the configured mirrors and print a report
|
||
|
|
||
|
=item -P
|
||
|
|
||
|
Find the best mirrors you could be using and use them for the current
|
||
|
session.
|
||
|
|
||
|
=item -r
|
||
|
|
||
|
Recompiles dynamically loaded modules with CPAN::Shell->recompile.
|
||
|
|
||
|
=item -s
|
||
|
|
||
|
Drop in the CPAN.pm shell. This command does this automatically if you don't
|
||
|
specify any arguments.
|
||
|
|
||
|
=item -t module [ module ... ]
|
||
|
|
||
|
Run a `make test` on the specified modules.
|
||
|
|
||
|
=item -T
|
||
|
|
||
|
Do not test modules. Simply install them.
|
||
|
|
||
|
=item -u
|
||
|
|
||
|
Upgrade all installed modules. Blindly doing this can really break things,
|
||
|
so keep a backup.
|
||
|
|
||
|
=item -v
|
||
|
|
||
|
Print the script version and CPAN.pm version then exit.
|
||
|
|
||
|
=item -V
|
||
|
|
||
|
Print detailed information about the cpan client.
|
||
|
|
||
|
=item -w
|
||
|
|
||
|
UNIMPLEMENTED
|
||
|
|
||
|
Turn on cpan warnings. This checks various things, like directory permissions,
|
||
|
and tells you about problems you might have.
|
||
|
|
||
|
=item -x module [ module ... ]
|
||
|
|
||
|
Find close matches to the named modules that you think you might have
|
||
|
mistyped. This requires the optional installation of Text::Levenshtein or
|
||
|
Text::Levenshtein::Damerau.
|
||
|
|
||
|
=item -X
|
||
|
|
||
|
Dump all the namespaces to standard output.
|
||
|
|
||
|
=back
|
||
|
|
||
|
=head2 Examples
|
||
|
|
||
|
# print a help message
|
||
|
cpan -h
|
||
|
|
||
|
# print the version numbers
|
||
|
cpan -v
|
||
|
|
||
|
# create an autobundle
|
||
|
cpan -a
|
||
|
|
||
|
# recompile modules
|
||
|
cpan -r
|
||
|
|
||
|
# upgrade all installed modules
|
||
|
cpan -u
|
||
|
|
||
|
# install modules ( sole -i is optional )
|
||
|
cpan -i Netscape::Booksmarks Business::ISBN
|
||
|
|
||
|
# force install modules ( must use -i )
|
||
|
cpan -fi CGI::Minimal URI
|
||
|
|
||
|
# install modules but without testing them
|
||
|
cpan -Ti CGI::Minimal URI
|
||
|
|
||
|
=head2 Environment variables
|
||
|
|
||
|
There are several components in CPAN.pm that use environment variables.
|
||
|
The build tools, L<ExtUtils::MakeMaker> and L<Module::Build> use some,
|
||
|
while others matter to the levels above them. Some of these are specified
|
||
|
by the Perl Toolchain Gang:
|
||
|
|
||
|
Lancaster Concensus: L<https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md>
|
||
|
|
||
|
Oslo Concensus: L<https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/oslo-consensus.md>
|
||
|
|
||
|
=over 4
|
||
|
|
||
|
=item NONINTERACTIVE_TESTING
|
||
|
|
||
|
Assume no one is paying attention and skips prompts for distributions
|
||
|
that do that correctly. C<cpan(1)> sets this to C<1> unless it already
|
||
|
has a value (even if that value is false).
|
||
|
|
||
|
=item PERL_MM_USE_DEFAULT
|
||
|
|
||
|
Use the default answer for a prompted questions. C<cpan(1)> sets this
|
||
|
to C<1> unless it already has a value (even if that value is false).
|
||
|
|
||
|
=item CPAN_OPTS
|
||
|
|
||
|
As with C<PERL5OPTS>, a string of additional C<cpan(1)> options to
|
||
|
add to those you specify on the command line.
|
||
|
|
||
|
=item CPANSCRIPT_LOGLEVEL
|
||
|
|
||
|
The log level to use, with either the embedded, minimal logger or
|
||
|
L<Log::Log4perl> if it is installed. Possible values are the same as
|
||
|
the C<Log::Log4perl> levels: C<TRACE>, C<DEBUG>, C<INFO>, C<WARN>,
|
||
|
C<ERROR>, and C<FATAL>. The default is C<INFO>.
|
||
|
|
||
|
=item GIT_COMMAND
|
||
|
|
||
|
The path to the C<git> binary to use for the Git features. The default
|
||
|
is C</usr/local/bin/git>.
|
||
|
|
||
|
=back
|
||
|
|
||
|
=head1 EXIT VALUES
|
||
|
|
||
|
The script exits with zero if it thinks that everything worked, or a
|
||
|
positive number if it thinks that something failed. Note, however, that
|
||
|
in some cases it has to divine a failure by the output of things it does
|
||
|
not control. For now, the exit codes are vague:
|
||
|
|
||
|
1 An unknown error
|
||
|
|
||
|
2 The was an external problem
|
||
|
|
||
|
4 There was an internal problem with the script
|
||
|
|
||
|
8 A module failed to install
|
||
|
|
||
|
=head1 TO DO
|
||
|
|
||
|
* one shot configuration values from the command line
|
||
|
|
||
|
=head1 BUGS
|
||
|
|
||
|
* none noted
|
||
|
|
||
|
=head1 SEE ALSO
|
||
|
|
||
|
Most behaviour, including environment variables and configuration,
|
||
|
comes directly from CPAN.pm.
|
||
|
|
||
|
=head1 SOURCE AVAILABILITY
|
||
|
|
||
|
This code is in Github in the CPAN.pm repository:
|
||
|
|
||
|
https://github.com/andk/cpanpm
|
||
|
|
||
|
The source used to be tracked separately in another GitHub repo,
|
||
|
but the canonical source is now in the above repo.
|
||
|
|
||
|
=head1 CREDITS
|
||
|
|
||
|
Japheth Cleaver added the bits to allow a forced install (-f).
|
||
|
|
||
|
Jim Brandt suggest and provided the initial implementation for the
|
||
|
up-to-date and Changes features.
|
||
|
|
||
|
Adam Kennedy pointed out that exit() causes problems on Windows
|
||
|
where this script ends up with a .bat extension
|
||
|
|
||
|
=head1 AUTHOR
|
||
|
|
||
|
brian d foy, C<< <bdfoy@cpan.org> >>
|
||
|
|
||
|
=head1 COPYRIGHT
|
||
|
|
||
|
Copyright (c) 2001-2015, brian d foy, All Rights Reserved.
|
||
|
|
||
|
You may redistribute this under the same terms as Perl itself.
|
||
|
|
||
|
=cut
|
||
|
|
||
|
1;
|