diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-03-26 19:55:20 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-03-26 19:55:20 +0000 |
commit | ce28de53280045efd40d128c35482d809354e666 (patch) | |
tree | 97dd481fe6dd7447573a47ad9bc41566e31afa05 /utils | |
parent | 51d9a56bf5df931c436b7ede535c78bc64655187 (diff) | |
download | perl-ce28de53280045efd40d128c35482d809354e666.tar.gz |
Add a file utils/cpan.PL to generate the "cpan" utility,
also separately maintained on CPAN, and now moved as
lib/CPAN/bin/cpan. Tweak installperl to avoid installing
this last file.
p4raw-id: //depot/perl@19065
Diffstat (limited to 'utils')
-rw-r--r-- | utils/Makefile | 8 | ||||
-rw-r--r-- | utils/cpan | 203 | ||||
-rw-r--r-- | utils/cpan.PL | 48 |
3 files changed, 53 insertions, 206 deletions
diff --git a/utils/Makefile b/utils/Makefile index 3b1294ec47..8b98950a1d 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -5,9 +5,9 @@ REALPERL = ../perl # Files to be built with variable substitution after miniperl is # available. Dependencies handled manually below (for now). -pl = c2ph.PL h2ph.PL h2xs.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL splain.PL perlcc.PL dprofpp.PL libnetcfg.PL piconv.PL enc2xs.PL -plextract = c2ph h2ph h2xs perlbug perldoc perlivp pl2pm splain perlcc dprofpp libnetcfg piconv enc2xs -plextractexe = ./c2ph ./h2ph ./h2xs ./perlbug ./perldoc ./perlivp ./pl2pm ./splain ./perlcc ./dprofpp ./libnetcfg ./piconv ./enc2xs +pl = c2ph.PL cpan.PL h2ph.PL h2xs.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL splain.PL perlcc.PL dprofpp.PL libnetcfg.PL piconv.PL enc2xs.PL +plextract = c2ph cpan h2ph h2xs perlbug perldoc perlivp pl2pm splain perlcc dprofpp libnetcfg piconv enc2xs +plextractexe = ./c2ph ./cpan ./h2ph ./h2xs ./perlbug ./perldoc ./perlivp ./pl2pm ./splain ./perlcc ./dprofpp ./libnetcfg ./piconv ./enc2xs all: $(plextract) @@ -29,6 +29,8 @@ $(plextract): c2ph: c2ph.PL ../config.sh +cpan: cpan.PL ../config.sh + h2ph: h2ph.PL ../config.sh h2xs: h2xs.PL ../config.sh diff --git a/utils/cpan b/utils/cpan deleted file mode 100644 index 38af90526e..0000000000 --- a/utils/cpan +++ /dev/null @@ -1,203 +0,0 @@ -#!/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; diff --git a/utils/cpan.PL b/utils/cpan.PL new file mode 100644 index 0000000000..5e12d78d6f --- /dev/null +++ b/utils/cpan.PL @@ -0,0 +1,48 @@ +#!/usr/local/bin/perl + +use Config; +use File::Basename qw(&basename &dirname); +use Cwd; + +# List explicitly here the variables you want Configure to +# generate. Metaconfig only looks for shell variables, so you +# have to mention them as if they were shell variables, not +# %Config entries. Thus you write +# $startperl +# to ensure Configure will look for $Config{startperl}. + +# This forces PL files to create target in same directory as PL file. +# This is so that make depend always knows where to find PL derivatives. +my $origdir = cwd; +chdir dirname($0); +my $file = basename($0, '.PL'); +$file .= '.com' if $^O eq 'VMS'; + +open OUT,">$file" or die "Can't create $file: $!"; + +print "Extracting $file (with variable substitutions)\n"; + +# In this section, perl variables will be expanded during extraction. +# You can use $Config{...} to use Configure variables. + +print OUT <<"!GROK!THIS!"; +$Config{startperl} + eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}' + if \$running_under_some_shell; +!GROK!THIS! + +use File::Spec; + +my $cpan = File::Spec->catfile(File::Spec->catdir(File::Spec->updir, "lib", "CPAN", "bin"), "cpan"); + +if (open(CPAN, $cpan)) { + print OUT <CPAN>; + close CPAN; +} else { + die "$0: cannot find '$cpan'\n"; +} + +close OUT or die "Can't close $file: $!"; +chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; +exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':'; +chdir $origdir; |