xref: /openbsd/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm (revision 91f110e0)
1# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
2# vim: ts=4 sts=4 sw=4:
3use strict;
4package CPAN;
5$CPAN::VERSION = '2.00';
6$CPAN::VERSION =~ s/_//;
7
8# we need to run chdir all over and we would get at wrong libraries
9# there
10use File::Spec ();
11BEGIN {
12    if (File::Spec->can("rel2abs")) {
13        for my $inc (@INC) {
14            $inc = File::Spec->rel2abs($inc) unless ref $inc;
15        }
16    }
17}
18use CPAN::Author;
19use CPAN::HandleConfig;
20use CPAN::Version;
21use CPAN::Bundle;
22use CPAN::CacheMgr;
23use CPAN::Complete;
24use CPAN::Debug;
25use CPAN::Distribution;
26use CPAN::Distrostatus;
27use CPAN::FTP;
28use CPAN::Index 1.93; # https://rt.cpan.org/Ticket/Display.html?id=43349
29use CPAN::InfoObj;
30use CPAN::Module;
31use CPAN::Prompt;
32use CPAN::URL;
33use CPAN::Queue;
34use CPAN::Tarzip;
35use CPAN::DeferredCode;
36use CPAN::Shell;
37use CPAN::LWP::UserAgent;
38use CPAN::Exception::RecursiveDependency;
39use CPAN::Exception::yaml_not_installed;
40use CPAN::Exception::yaml_process_error;
41
42use Carp ();
43use Config ();
44use Cwd qw(chdir);
45use DirHandle ();
46use Exporter ();
47use ExtUtils::MakeMaker qw(prompt); # for some unknown reason,
48                                    # 5.005_04 does not work without
49                                    # this
50use File::Basename ();
51use File::Copy ();
52use File::Find;
53use File::Path ();
54use FileHandle ();
55use Fcntl qw(:flock);
56use Safe ();
57use Sys::Hostname qw(hostname);
58use Text::ParseWords ();
59use Text::Wrap ();
60
61# protect against "called too early"
62sub find_perl ();
63sub anycwd ();
64sub _uniq;
65
66no lib ".";
67
68require Mac::BuildTools if $^O eq 'MacOS';
69if ($ENV{PERL5_CPAN_IS_RUNNING} && $$ != $ENV{PERL5_CPAN_IS_RUNNING}) {
70    $ENV{PERL5_CPAN_IS_RUNNING_IN_RECURSION} ||= $ENV{PERL5_CPAN_IS_RUNNING};
71    my @rec = _uniq split(/,/, $ENV{PERL5_CPAN_IS_RUNNING_IN_RECURSION}), $$;
72    $ENV{PERL5_CPAN_IS_RUNNING_IN_RECURSION} = join ",", @rec;
73    # warn "# Note: Recursive call of CPAN.pm detected\n";
74    my $w = sprintf "# Note: CPAN.pm is running in process %d now", pop @rec;
75    my %sleep = (
76                 5 => 30,
77                 6 => 60,
78                 7 => 120,
79                );
80    my $sleep = @rec > 7 ? 300 : ($sleep{scalar @rec}||0);
81    my $verbose = @rec >= 4;
82    while (@rec) {
83        $w .= sprintf " which has been called by process %d", pop @rec;
84    }
85    if ($sleep) {
86        $w .= ".\n\n# Sleeping $sleep seconds to protect other processes\n";
87    }
88    if ($verbose) {
89        warn $w;
90    }
91    local $| = 1;
92    while ($sleep > 0) {
93        printf "\r#%5d", --$sleep;
94        sleep 1;
95    }
96    print "\n";
97}
98$ENV{PERL5_CPAN_IS_RUNNING}=$$;
99$ENV{PERL5_CPANPLUS_IS_RUNNING}=$$; # https://rt.cpan.org/Ticket/Display.html?id=23735
100
101END { $CPAN::End++; &cleanup; }
102
103$CPAN::Signal ||= 0;
104$CPAN::Frontend ||= "CPAN::Shell";
105unless (@CPAN::Defaultsites) {
106    @CPAN::Defaultsites = map {
107        CPAN::URL->new(TEXT => $_, FROM => "DEF")
108    }
109        "http://www.perl.org/CPAN/",
110        "ftp://ftp.perl.org/pub/CPAN/";
111}
112# $CPAN::iCwd (i for initial)
113$CPAN::iCwd ||= CPAN::anycwd();
114$CPAN::Perl ||= CPAN::find_perl();
115$CPAN::Defaultdocs ||= "http://search.cpan.org/perldoc?";
116$CPAN::Defaultrecent ||= "http://search.cpan.org/uploads.rdf";
117$CPAN::Defaultrecent ||= "http://cpan.uwinnipeg.ca/htdocs/cpan.xml";
118
119# our globals are getting a mess
120use vars qw(
121            $AUTOLOAD
122            $Be_Silent
123            $CONFIG_DIRTY
124            $Defaultdocs
125            $Echo_readline
126            $Frontend
127            $GOTOSHELL
128            $HAS_USABLE
129            $Have_warned
130            $MAX_RECURSION
131            $META
132            $RUN_DEGRADED
133            $Signal
134            $SQLite
135            $Suppress_readline
136            $VERSION
137            $autoload_recursion
138            $term
139            @Defaultsites
140            @EXPORT
141           );
142
143$MAX_RECURSION = 32;
144
145@CPAN::ISA = qw(CPAN::Debug Exporter);
146
147# note that these functions live in CPAN::Shell and get executed via
148# AUTOLOAD when called directly
149@EXPORT = qw(
150             autobundle
151             bundle
152             clean
153             cvs_import
154             expand
155             force
156             fforce
157             get
158             install
159             install_tested
160             is_tested
161             make
162             mkmyconfig
163             notest
164             perldoc
165             readme
166             recent
167             recompile
168             report
169             shell
170             smoke
171             test
172             upgrade
173            );
174
175sub soft_chdir_with_alternatives ($);
176
177{
178    $autoload_recursion ||= 0;
179
180    #-> sub CPAN::AUTOLOAD ;
181    sub AUTOLOAD { ## no critic
182        $autoload_recursion++;
183        my($l) = $AUTOLOAD;
184        $l =~ s/.*:://;
185        if ($CPAN::Signal) {
186            warn "Refusing to autoload '$l' while signal pending";
187            $autoload_recursion--;
188            return;
189        }
190        if ($autoload_recursion > 1) {
191            my $fullcommand = join " ", map { "'$_'" } $l, @_;
192            warn "Refusing to autoload $fullcommand in recursion\n";
193            $autoload_recursion--;
194            return;
195        }
196        my(%export);
197        @export{@EXPORT} = '';
198        CPAN::HandleConfig->load unless $CPAN::Config_loaded++;
199        if (exists $export{$l}) {
200            CPAN::Shell->$l(@_);
201        } else {
202            die(qq{Unknown CPAN command "$AUTOLOAD". }.
203                qq{Type ? for help.\n});
204        }
205        $autoload_recursion--;
206    }
207}
208
209{
210    my $x = *SAVEOUT; # avoid warning
211    open($x,">&STDOUT") or die "dup failed";
212    my $redir = 0;
213    sub _redirect(@) {
214        #die if $redir;
215        local $_;
216        push(@_,undef);
217        while(defined($_=shift)) {
218            if (s/^\s*>//){
219                my ($m) = s/^>// ? ">" : "";
220                s/\s+//;
221                $_=shift unless length;
222                die "no dest" unless defined;
223                open(STDOUT,">$m$_") or die "open:$_:$!\n";
224                $redir=1;
225            } elsif ( s/^\s*\|\s*// ) {
226                my $pipe="| $_";
227                while(defined($_[0])){
228                    $pipe .= ' ' . shift;
229                }
230                open(STDOUT,$pipe) or die "open:$pipe:$!\n";
231                $redir=1;
232            } else {
233                push(@_,$_);
234            }
235        }
236        return @_;
237    }
238    sub _unredirect {
239        return unless $redir;
240        $redir = 0;
241        ## redirect: unredirect and propagate errors.  explicit close to wait for pipe.
242        close(STDOUT);
243        open(STDOUT,">&SAVEOUT");
244        die "$@" if "$@";
245        ## redirect: done
246    }
247}
248
249sub _uniq {
250    my(@list) = @_;
251    my %seen;
252    return grep { !$seen{$_}++ } @list;
253}
254
255#-> sub CPAN::shell ;
256sub shell {
257    my($self) = @_;
258    $Suppress_readline = ! -t STDIN unless defined $Suppress_readline;
259    CPAN::HandleConfig->load unless $CPAN::Config_loaded++;
260
261    my $oprompt = shift || CPAN::Prompt->new;
262    my $prompt = $oprompt;
263    my $commandline = shift || "";
264    $CPAN::CurrentCommandId ||= 1;
265
266    local($^W) = 1;
267    unless ($Suppress_readline) {
268        require Term::ReadLine;
269        if (! $term
270            or
271            $term->ReadLine eq "Term::ReadLine::Stub"
272           ) {
273            $term = Term::ReadLine->new('CPAN Monitor');
274        }
275        if ($term->ReadLine eq "Term::ReadLine::Gnu") {
276            my $attribs = $term->Attribs;
277            $attribs->{attempted_completion_function} = sub {
278                &CPAN::Complete::gnu_cpl;
279            }
280        } else {
281            $readline::rl_completion_function =
282                $readline::rl_completion_function = 'CPAN::Complete::cpl';
283        }
284        if (my $histfile = $CPAN::Config->{'histfile'}) {{
285            unless ($term->can("AddHistory")) {
286                $CPAN::Frontend->mywarn("Terminal does not support AddHistory.\n");
287                last;
288            }
289            $META->readhist($term,$histfile);
290        }}
291        for ($CPAN::Config->{term_ornaments}) { # alias
292            local $Term::ReadLine::termcap_nowarn = 1;
293            $term->ornaments($_) if defined;
294        }
295        # $term->OUT is autoflushed anyway
296        my $odef = select STDERR;
297        $| = 1;
298        select STDOUT;
299        $| = 1;
300        select $odef;
301    }
302
303    $META->checklock();
304    my @cwd = grep { defined $_ and length $_ }
305        CPAN::anycwd(),
306              File::Spec->can("tmpdir") ? File::Spec->tmpdir() : (),
307                    File::Spec->rootdir();
308    my $try_detect_readline;
309    $try_detect_readline = $term->ReadLine eq "Term::ReadLine::Stub" if $term;
310    unless ($CPAN::Config->{inhibit_startup_message}) {
311        my $rl_avail = $Suppress_readline ? "suppressed" :
312            ($term->ReadLine ne "Term::ReadLine::Stub") ? "enabled" :
313                "available (maybe install Bundle::CPAN or Bundle::CPANxxl?)";
314        $CPAN::Frontend->myprint(
315                                 sprintf qq{
316cpan shell -- CPAN exploration and modules installation (v%s)
317Enter 'h' for help.
318
319},
320                                 $CPAN::VERSION,
321                                 $rl_avail
322                                )
323    }
324    my($continuation) = "";
325    my $last_term_ornaments;
326  SHELLCOMMAND: while () {
327        if ($Suppress_readline) {
328            if ($Echo_readline) {
329                $|=1;
330            }
331            print $prompt;
332            last SHELLCOMMAND unless defined ($_ = <> );
333            if ($Echo_readline) {
334                # backdoor: I could not find a way to record sessions
335                print $_;
336            }
337            chomp;
338        } else {
339            last SHELLCOMMAND unless
340                defined ($_ = $term->readline($prompt, $commandline));
341        }
342        $_ = "$continuation$_" if $continuation;
343        s/^\s+//;
344        next SHELLCOMMAND if /^$/;
345        s/^\s*\?\s*/help /;
346        if (/^(?:q(?:uit)?|bye|exit)\s*$/i) {
347            last SHELLCOMMAND;
348        } elsif (s/\\$//s) {
349            chomp;
350            $continuation = $_;
351            $prompt = "    > ";
352        } elsif (/^\!/) {
353            s/^\!//;
354            my($eval) = $_;
355            package
356                CPAN::Eval; # hide from the indexer
357            use strict;
358            use vars qw($import_done);
359            CPAN->import(':DEFAULT') unless $import_done++;
360            CPAN->debug("eval[$eval]") if $CPAN::DEBUG;
361            eval($eval);
362            warn $@ if $@;
363            $continuation = "";
364            $prompt = $oprompt;
365        } elsif (/./) {
366            my(@line);
367            eval { @line = Text::ParseWords::shellwords($_) };
368            warn($@), next SHELLCOMMAND if $@;
369            warn("Text::Parsewords could not parse the line [$_]"),
370                next SHELLCOMMAND unless @line;
371            $CPAN::META->debug("line[".join("|",@line)."]") if $CPAN::DEBUG;
372            my $command = shift @line;
373            eval {
374                local (*STDOUT)=*STDOUT;
375                @line = _redirect(@line);
376                CPAN::Shell->$command(@line)
377              };
378            my $command_error = $@;
379            _unredirect;
380            my $reported_error;
381            if ($command_error) {
382                my $err = $command_error;
383                if (ref $err and $err->isa('CPAN::Exception::blocked_urllist')) {
384                    $CPAN::Frontend->mywarn("Client not fully configured, please proceed with configuring.$err");
385                    $reported_error = ref $err;
386                } else {
387                    # I'd prefer never to arrive here and make all errors exception objects
388                    if ($err =~ /\S/) {
389                        require Carp;
390                        require Dumpvalue;
391                        my $dv = Dumpvalue->new(tick => '"');
392                        Carp::cluck(sprintf "Catching error: %s", $dv->stringify($err));
393                    }
394                }
395            }
396            if ($command =~ /^(
397                             # classic commands
398                             make
399                             |test
400                             |install
401                             |clean
402
403                             # pragmas for classic commands
404                             |ff?orce
405                             |notest
406
407                             # compounds
408                             |report
409                             |smoke
410                             |upgrade
411                            )$/x) {
412                # only commands that tell us something about failed distros
413                # eval necessary for people without an urllist
414                eval {CPAN::Shell->failed($CPAN::CurrentCommandId,1);};
415                if (my $err = $@) {
416                    unless (ref $err and $reported_error eq ref $err) {
417                        die $@;
418                    }
419                }
420            }
421            soft_chdir_with_alternatives(\@cwd);
422            $CPAN::Frontend->myprint("\n");
423            $continuation = "";
424            $CPAN::CurrentCommandId++;
425            $prompt = $oprompt;
426        }
427    } continue {
428        $commandline = ""; # I do want to be able to pass a default to
429                           # shell, but on the second command I see no
430                           # use in that
431        $Signal=0;
432        CPAN::Queue->nullify_queue;
433        if ($try_detect_readline) {
434            if ($CPAN::META->has_inst("Term::ReadLine::Gnu")
435                ||
436                $CPAN::META->has_inst("Term::ReadLine::Perl")
437            ) {
438                delete $INC{"Term/ReadLine.pm"};
439                my $redef = 0;
440                local($SIG{__WARN__}) = CPAN::Shell::paintdots_onreload(\$redef);
441                require Term::ReadLine;
442                $CPAN::Frontend->myprint("\n$redef subroutines in ".
443                                         "Term::ReadLine redefined\n");
444                $GOTOSHELL = 1;
445            }
446        }
447        if ($term and $term->can("ornaments")) {
448            for ($CPAN::Config->{term_ornaments}) { # alias
449                if (defined $_) {
450                    if (not defined $last_term_ornaments
451                        or $_ != $last_term_ornaments
452                    ) {
453                        local $Term::ReadLine::termcap_nowarn = 1;
454                        $term->ornaments($_);
455                        $last_term_ornaments = $_;
456                    }
457                } else {
458                    undef $last_term_ornaments;
459                }
460            }
461        }
462        for my $class (qw(Module Distribution)) {
463            # again unsafe meta access?
464            for my $dm (keys %{$CPAN::META->{readwrite}{"CPAN::$class"}}) {
465                next unless $CPAN::META->{readwrite}{"CPAN::$class"}{$dm}{incommandcolor};
466                CPAN->debug("BUG: $class '$dm' was in command state, resetting");
467                delete $CPAN::META->{readwrite}{"CPAN::$class"}{$dm}{incommandcolor};
468            }
469        }
470        if ($GOTOSHELL) {
471            $GOTOSHELL = 0; # not too often
472            $META->savehist if $CPAN::term && $CPAN::term->can("GetHistory");
473            @_ = ($oprompt,"");
474            goto &shell;
475        }
476    }
477    soft_chdir_with_alternatives(\@cwd);
478}
479
480#-> CPAN::soft_chdir_with_alternatives ;
481sub soft_chdir_with_alternatives ($) {
482    my($cwd) = @_;
483    unless (@$cwd) {
484        my $root = File::Spec->rootdir();
485        $CPAN::Frontend->mywarn(qq{Warning: no good directory to chdir to!
486Trying '$root' as temporary haven.
487});
488        push @$cwd, $root;
489    }
490    while () {
491        if (chdir $cwd->[0]) {
492            return;
493        } else {
494            if (@$cwd>1) {
495                $CPAN::Frontend->mywarn(qq{Could not chdir to "$cwd->[0]": $!
496Trying to chdir to "$cwd->[1]" instead.
497});
498                shift @$cwd;
499            } else {
500                $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd->[0]": $!});
501            }
502        }
503    }
504}
505
506sub _flock {
507    my($fh,$mode) = @_;
508    if ( $Config::Config{d_flock} || $Config::Config{d_fcntl_can_lock} ) {
509        return flock $fh, $mode;
510    } elsif (!$Have_warned->{"d_flock"}++) {
511        $CPAN::Frontend->mywarn("Your OS does not seem to support locking; continuing and ignoring all locking issues\n");
512        $CPAN::Frontend->mysleep(5);
513        return 1;
514    } else {
515        return 1;
516    }
517}
518
519sub _yaml_module () {
520    my $yaml_module = $CPAN::Config->{yaml_module} || "YAML";
521    if (
522        $yaml_module ne "YAML"
523        &&
524        !$CPAN::META->has_inst($yaml_module)
525       ) {
526        # $CPAN::Frontend->mywarn("'$yaml_module' not installed, falling back to 'YAML'\n");
527        $yaml_module = "YAML";
528    }
529    if ($yaml_module eq "YAML"
530        &&
531        $CPAN::META->has_inst($yaml_module)
532        &&
533        $YAML::VERSION < 0.60
534        &&
535        !$Have_warned->{"YAML"}++
536       ) {
537        $CPAN::Frontend->mywarn("Warning: YAML version '$YAML::VERSION' is too low, please upgrade!\n".
538                                "I'll continue but problems are *very* likely to happen.\n"
539                               );
540        $CPAN::Frontend->mysleep(5);
541    }
542    return $yaml_module;
543}
544
545# CPAN::_yaml_loadfile
546sub _yaml_loadfile {
547    my($self,$local_file) = @_;
548    return +[] unless -s $local_file;
549    my $yaml_module = _yaml_module;
550    if ($CPAN::META->has_inst($yaml_module)) {
551        # temporarily enable yaml code deserialisation
552        no strict 'refs';
553        # 5.6.2 could not do the local() with the reference
554        # so we do it manually instead
555        my $old_loadcode = ${"$yaml_module\::LoadCode"};
556        ${ "$yaml_module\::LoadCode" } = $CPAN::Config->{yaml_load_code} || 0;
557
558        my ($code, @yaml);
559        if ($code = UNIVERSAL::can($yaml_module, "LoadFile")) {
560            eval { @yaml = $code->($local_file); };
561            if ($@) {
562                # this shall not be done by the frontend
563                die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"parse",$@);
564            }
565        } elsif ($code = UNIVERSAL::can($yaml_module, "Load")) {
566            local *FH;
567            open FH, $local_file or die "Could not open '$local_file': $!";
568            local $/;
569            my $ystream = <FH>;
570            eval { @yaml = $code->($ystream); };
571            if ($@) {
572                # this shall not be done by the frontend
573                die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"parse",$@);
574            }
575        }
576        ${"$yaml_module\::LoadCode"} = $old_loadcode;
577        return \@yaml;
578    } else {
579        # this shall not be done by the frontend
580        die CPAN::Exception::yaml_not_installed->new($yaml_module, $local_file, "parse");
581    }
582    return +[];
583}
584
585# CPAN::_yaml_dumpfile
586sub _yaml_dumpfile {
587    my($self,$local_file,@what) = @_;
588    my $yaml_module = _yaml_module;
589    if ($CPAN::META->has_inst($yaml_module)) {
590        my $code;
591        if (UNIVERSAL::isa($local_file, "FileHandle")) {
592            $code = UNIVERSAL::can($yaml_module, "Dump");
593            eval { print $local_file $code->(@what) };
594        } elsif ($code = UNIVERSAL::can($yaml_module, "DumpFile")) {
595            eval { $code->($local_file,@what); };
596        } elsif ($code = UNIVERSAL::can($yaml_module, "Dump")) {
597            local *FH;
598            open FH, ">$local_file" or die "Could not open '$local_file': $!";
599            print FH $code->(@what);
600        }
601        if ($@) {
602            die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"dump",$@);
603        }
604    } else {
605        if (UNIVERSAL::isa($local_file, "FileHandle")) {
606            # I think this case does not justify a warning at all
607        } else {
608            die CPAN::Exception::yaml_not_installed->new($yaml_module, $local_file, "dump");
609        }
610    }
611}
612
613sub _init_sqlite () {
614    unless ($CPAN::META->has_inst("CPAN::SQLite")) {
615        $CPAN::Frontend->mywarn(qq{CPAN::SQLite not installed, trying to work without\n})
616            unless $Have_warned->{"CPAN::SQLite"}++;
617        return;
618    }
619    require CPAN::SQLite::META; # not needed since CVS version of 2006-12-17
620    $CPAN::SQLite ||= CPAN::SQLite::META->new($CPAN::META);
621}
622
623{
624    my $negative_cache = {};
625    sub _sqlite_running {
626        if ($negative_cache->{time} && time < $negative_cache->{time} + 60) {
627            # need to cache the result, otherwise too slow
628            return $negative_cache->{fact};
629        } else {
630            $negative_cache = {}; # reset
631        }
632        my $ret = $CPAN::Config->{use_sqlite} && ($CPAN::SQLite || _init_sqlite());
633        return $ret if $ret; # fast anyway
634        $negative_cache->{time} = time;
635        return $negative_cache->{fact} = $ret;
636    }
637}
638
639$META ||= CPAN->new; # In case we re-eval ourselves we need the ||
640
641# from here on only subs.
642################################################################################
643
644sub _perl_fingerprint {
645    my($self,$other_fingerprint) = @_;
646    my $dll = eval {OS2::DLLname()};
647    my $mtime_dll = 0;
648    if (defined $dll) {
649        $mtime_dll = (-f $dll ? (stat(_))[9] : '-1');
650    }
651    my $mtime_perl = (-f CPAN::find_perl ? (stat(_))[9] : '-1');
652    my $this_fingerprint = {
653                            '$^X' => CPAN::find_perl,
654                            sitearchexp => $Config::Config{sitearchexp},
655                            'mtime_$^X' => $mtime_perl,
656                            'mtime_dll' => $mtime_dll,
657                           };
658    if ($other_fingerprint) {
659        if (exists $other_fingerprint->{'stat($^X)'}) { # repair fp from rev. 1.88_57
660            $other_fingerprint->{'mtime_$^X'} = $other_fingerprint->{'stat($^X)'}[9];
661        }
662        # mandatory keys since 1.88_57
663        for my $key (qw($^X sitearchexp mtime_dll mtime_$^X)) {
664            return unless $other_fingerprint->{$key} eq $this_fingerprint->{$key};
665        }
666        return 1;
667    } else {
668        return $this_fingerprint;
669    }
670}
671
672sub suggest_myconfig () {
673  SUGGEST_MYCONFIG: if(!$INC{'CPAN/MyConfig.pm'}) {
674        $CPAN::Frontend->myprint("You don't seem to have a user ".
675                                 "configuration (MyConfig.pm) yet.\n");
676        my $new = CPAN::Shell::colorable_makemaker_prompt("Do you want to create a ".
677                                              "user configuration now? (Y/n)",
678                                              "yes");
679        if($new =~ m{^y}i) {
680            CPAN::Shell->mkmyconfig();
681            return &checklock;
682        } else {
683            $CPAN::Frontend->mydie("OK, giving up.");
684        }
685    }
686}
687
688#-> sub CPAN::all_objects ;
689sub all_objects {
690    my($mgr,$class) = @_;
691    CPAN::HandleConfig->load unless $CPAN::Config_loaded++;
692    CPAN->debug("mgr[$mgr] class[$class]") if $CPAN::DEBUG;
693    CPAN::Index->reload;
694    values %{ $META->{readwrite}{$class} }; # unsafe meta access, ok
695}
696
697# Called by shell, not in batch mode. In batch mode I see no risk in
698# having many processes updating something as installations are
699# continually checked at runtime. In shell mode I suspect it is
700# unintentional to open more than one shell at a time
701
702#-> sub CPAN::checklock ;
703sub checklock {
704    my($self) = @_;
705    my $lockfile = File::Spec->catfile($CPAN::Config->{cpan_home},".lock");
706    if (-f $lockfile && -M _ > 0) {
707        my $fh = FileHandle->new($lockfile) or
708            $CPAN::Frontend->mydie("Could not open lockfile '$lockfile': $!");
709        my $otherpid  = <$fh>;
710        my $otherhost = <$fh>;
711        $fh->close;
712        if (defined $otherpid && $otherpid) {
713            chomp $otherpid;
714        }
715        if (defined $otherhost && $otherhost) {
716            chomp $otherhost;
717        }
718        my $thishost  = hostname();
719        if (defined $otherhost && defined $thishost &&
720            $otherhost ne '' && $thishost ne '' &&
721            $otherhost ne $thishost) {
722            $CPAN::Frontend->mydie(sprintf("CPAN.pm panic: Lockfile '$lockfile'\n".
723                                           "reports other host $otherhost and other ".
724                                           "process $otherpid.\n".
725                                           "Cannot proceed.\n"));
726        } elsif ($RUN_DEGRADED) {
727            $CPAN::Frontend->mywarn("Running in downgraded mode (experimental)\n");
728        } elsif (defined $otherpid && $otherpid) {
729            return if $$ == $otherpid; # should never happen
730            $CPAN::Frontend->mywarn(
731                                    qq{
732There seems to be running another CPAN process (pid $otherpid).  Contacting...
733});
734            if (kill 0, $otherpid or $!{EPERM}) {
735                $CPAN::Frontend->mywarn(qq{Other job is running.\n});
736                my($ans) =
737                    CPAN::Shell::colorable_makemaker_prompt
738                        (qq{Shall I try to run in downgraded }.
739                        qq{mode? (Y/n)},"y");
740                if ($ans =~ /^y/i) {
741                    $CPAN::Frontend->mywarn("Running in downgraded mode (experimental).
742Please report if something unexpected happens\n");
743                    $RUN_DEGRADED = 1;
744                    for ($CPAN::Config) {
745                        # XXX
746                        # $_->{build_dir_reuse} = 0; # 2006-11-17 akoenig Why was that?
747                        $_->{commandnumber_in_prompt} = 0; # visibility
748                        $_->{histfile}       = "";  # who should win otherwise?
749                        $_->{cache_metadata} = 0;   # better would be a lock?
750                        $_->{use_sqlite}     = 0;   # better would be a write lock!
751                        $_->{auto_commit}    = 0;   # we are violent, do not persist
752                        $_->{test_report}    = 0;   # Oliver Paukstadt had sent wrong reports in degraded mode
753                    }
754                } else {
755                    $CPAN::Frontend->mydie("
756You may want to kill the other job and delete the lockfile. On UNIX try:
757    kill $otherpid
758    rm $lockfile
759");
760                }
761            } elsif (-w $lockfile) {
762                my($ans) =
763                    CPAN::Shell::colorable_makemaker_prompt
764                        (qq{Other job not responding. Shall I overwrite }.
765                        qq{the lockfile '$lockfile'? (Y/n)},"y");
766            $CPAN::Frontend->myexit("Ok, bye\n")
767                unless $ans =~ /^y/i;
768            } else {
769                Carp::croak(
770                    qq{Lockfile '$lockfile' not writable by you. }.
771                    qq{Cannot proceed.\n}.
772                    qq{    On UNIX try:\n}.
773                    qq{    rm '$lockfile'\n}.
774                    qq{  and then rerun us.\n}
775                );
776            }
777        } else {
778            $CPAN::Frontend->mydie(sprintf("CPAN.pm panic: Found invalid lockfile ".
779                                           "'$lockfile', please remove. Cannot proceed.\n"));
780        }
781    }
782    my $dotcpan = $CPAN::Config->{cpan_home};
783    eval { File::Path::mkpath($dotcpan);};
784    if ($@) {
785        # A special case at least for Jarkko.
786        my $firsterror = $@;
787        my $seconderror;
788        my $symlinkcpan;
789        if (-l $dotcpan) {
790            $symlinkcpan = readlink $dotcpan;
791            die "readlink $dotcpan failed: $!" unless defined $symlinkcpan;
792            eval { File::Path::mkpath($symlinkcpan); };
793            if ($@) {
794                $seconderror = $@;
795            } else {
796                $CPAN::Frontend->mywarn(qq{
797Working directory $symlinkcpan created.
798});
799            }
800        }
801        unless (-d $dotcpan) {
802            my $mess = qq{
803Your configuration suggests "$dotcpan" as your
804CPAN.pm working directory. I could not create this directory due
805to this error: $firsterror\n};
806            $mess .= qq{
807As "$dotcpan" is a symlink to "$symlinkcpan",
808I tried to create that, but I failed with this error: $seconderror
809} if $seconderror;
810            $mess .= qq{
811Please make sure the directory exists and is writable.
812};
813            $CPAN::Frontend->mywarn($mess);
814            return suggest_myconfig;
815        }
816    } # $@ after eval mkpath $dotcpan
817    if (0) { # to test what happens when a race condition occurs
818        for (reverse 1..10) {
819            print $_, "\n";
820            sleep 1;
821        }
822    }
823    # locking
824    if (!$RUN_DEGRADED && !$self->{LOCKFH}) {
825        my $fh;
826        unless ($fh = FileHandle->new("+>>$lockfile")) {
827            $CPAN::Frontend->mywarn(qq{
828
829Your configuration suggests that CPAN.pm should use a working
830directory of
831    $CPAN::Config->{cpan_home}
832Unfortunately we could not create the lock file
833    $lockfile
834due to '$!'.
835
836Please make sure that the configuration variable
837    \$CPAN::Config->{cpan_home}
838points to a directory where you can write a .lock file. You can set
839this variable in either a CPAN/MyConfig.pm or a CPAN/Config.pm in your
840\@INC path;
841});
842            return suggest_myconfig;
843        }
844        my $sleep = 1;
845        while (!CPAN::_flock($fh, LOCK_EX|LOCK_NB)) {
846            if ($sleep>10) {
847                $CPAN::Frontend->mydie("Giving up\n");
848            }
849            $CPAN::Frontend->mysleep($sleep++);
850            $CPAN::Frontend->mywarn("Could not lock lockfile with flock: $!; retrying\n");
851        }
852
853        seek $fh, 0, 0;
854        truncate $fh, 0;
855        $fh->autoflush(1);
856        $fh->print($$, "\n");
857        $fh->print(hostname(), "\n");
858        $self->{LOCK} = $lockfile;
859        $self->{LOCKFH} = $fh;
860    }
861    $SIG{TERM} = sub {
862        my $sig = shift;
863        &cleanup;
864        $CPAN::Frontend->mydie("Got SIG$sig, leaving");
865    };
866    $SIG{INT} = sub {
867      # no blocks!!!
868        my $sig = shift;
869        &cleanup if $Signal;
870        die "Got yet another signal" if $Signal > 1;
871        $CPAN::Frontend->mydie("Got another SIG$sig") if $Signal;
872        $CPAN::Frontend->mywarn("Caught SIG$sig, trying to continue\n");
873        $Signal++;
874    };
875
876#       From: Larry Wall <larry@wall.org>
877#       Subject: Re: deprecating SIGDIE
878#       To: perl5-porters@perl.org
879#       Date: Thu, 30 Sep 1999 14:58:40 -0700 (PDT)
880#
881#       The original intent of __DIE__ was only to allow you to substitute one
882#       kind of death for another on an application-wide basis without respect
883#       to whether you were in an eval or not.  As a global backstop, it should
884#       not be used any more lightly (or any more heavily :-) than class
885#       UNIVERSAL.  Any attempt to build a general exception model on it should
886#       be politely squashed.  Any bug that causes every eval {} to have to be
887#       modified should be not so politely squashed.
888#
889#       Those are my current opinions.  It is also my optinion that polite
890#       arguments degenerate to personal arguments far too frequently, and that
891#       when they do, it's because both people wanted it to, or at least didn't
892#       sufficiently want it not to.
893#
894#       Larry
895
896    # global backstop to cleanup if we should really die
897    $SIG{__DIE__} = \&cleanup;
898    $self->debug("Signal handler set.") if $CPAN::DEBUG;
899}
900
901#-> sub CPAN::DESTROY ;
902sub DESTROY {
903    &cleanup; # need an eval?
904}
905
906#-> sub CPAN::anycwd ;
907sub anycwd () {
908    my $getcwd;
909    $getcwd = $CPAN::Config->{'getcwd'} || 'cwd';
910    CPAN->$getcwd();
911}
912
913#-> sub CPAN::cwd ;
914sub cwd {Cwd::cwd();}
915
916#-> sub CPAN::getcwd ;
917sub getcwd {Cwd::getcwd();}
918
919#-> sub CPAN::fastcwd ;
920sub fastcwd {Cwd::fastcwd();}
921
922#-> sub CPAN::backtickcwd ;
923sub backtickcwd {my $cwd = `cwd`; chomp $cwd; $cwd}
924
925# Adapted from Probe::Perl
926#-> sub CPAN::_perl_is_same
927sub _perl_is_same {
928  my ($perl) = @_;
929  return MM->maybe_command($perl)
930    && `$perl -MConfig=myconfig -e print -e myconfig` eq Config->myconfig;
931}
932
933# Adapted in part from Probe::Perl
934#-> sub CPAN::find_perl ;
935sub find_perl () {
936    if ( File::Spec->file_name_is_absolute($^X) ) {
937        return $^X;
938    }
939    else {
940        my $exe = $Config::Config{exe_ext};
941        my @candidates = (
942            File::Spec->catfile($CPAN::iCwd,$^X),
943            $Config::Config{'perlpath'},
944        );
945        for my $perl_name ($^X, 'perl', 'perl5', "perl$]") {
946            for my $path (File::Spec->path(), $Config::Config{'binexp'}) {
947                if ( defined($path) && length $path && -d $path ) {
948                    my $perl = File::Spec->catfile($path,$perl_name);
949                    push @candidates, $perl;
950                    # try with extension if not provided already
951                    if ($^O eq 'VMS') {
952                        # VMS might have a file version at the end
953                        push @candidates, $perl . $exe
954                            unless $perl =~ m/$exe(;\d+)?$/i;
955                    } elsif (defined $exe && length $exe) {
956                        push @candidates, $perl . $exe
957                            unless $perl =~ m/$exe$/i;
958                    }
959                }
960            }
961        }
962        for my $perl ( @candidates ) {
963            if (MM->maybe_command($perl) && _perl_is_same($perl)) {
964                $^X = $perl;
965                return $perl;
966            }
967        }
968    }
969    return $^X; # default fall back
970}
971
972#-> sub CPAN::exists ;
973sub exists {
974    my($mgr,$class,$id) = @_;
975    CPAN::HandleConfig->load unless $CPAN::Config_loaded++;
976    CPAN::Index->reload;
977    ### Carp::croak "exists called without class argument" unless $class;
978    $id ||= "";
979    $id =~ s/:+/::/g if $class eq "CPAN::Module";
980    my $exists;
981    if (CPAN::_sqlite_running) {
982        $exists = (exists $META->{readonly}{$class}{$id} or
983                   $CPAN::SQLite->set($class, $id));
984    } else {
985        $exists =  exists $META->{readonly}{$class}{$id};
986    }
987    $exists ||= exists $META->{readwrite}{$class}{$id}; # unsafe meta access, ok
988}
989
990#-> sub CPAN::delete ;
991sub delete {
992  my($mgr,$class,$id) = @_;
993  delete $META->{readonly}{$class}{$id}; # unsafe meta access, ok
994  delete $META->{readwrite}{$class}{$id}; # unsafe meta access, ok
995}
996
997#-> sub CPAN::has_usable
998# has_inst is sometimes too optimistic, we should replace it with this
999# has_usable whenever a case is given
1000sub has_usable {
1001    my($self,$mod,$message) = @_;
1002    return 1 if $HAS_USABLE->{$mod};
1003    my $has_inst = $self->has_inst($mod,$message);
1004    return unless $has_inst;
1005    my $usable;
1006    $usable = {
1007
1008               #
1009               # these subroutines die if they believe the installed version is unusable;
1010               #
1011               'CPAN::Meta' => [
1012                            sub {
1013                                require CPAN::Meta;
1014                                unless (CPAN::Version->vge(CPAN::Meta->VERSION, 2.110350)) {
1015                                    for ("Will not use CPAN::Meta, need version 2.110350\n") {
1016                                        $CPAN::Frontend->mywarn($_);
1017                                        die $_;
1018                                    }
1019                                }
1020                            },
1021                           ],
1022
1023               LWP => [ # we frequently had "Can't locate object
1024                        # method "new" via package "LWP::UserAgent" at
1025                        # (eval 69) line 2006
1026                       sub {require LWP},
1027                       sub {require LWP::UserAgent},
1028                       sub {require HTTP::Request},
1029                       sub {require URI::URL;
1030                            unless (CPAN::Version->vge(URI::URL::->VERSION,0.08)) {
1031                                for ("Will not use URI::URL, need 0.08\n") {
1032                                    $CPAN::Frontend->mywarn($_);
1033                                    die $_;
1034                                }
1035                            }
1036                       },
1037                      ],
1038               'Net::FTP' => [
1039                            sub {require Net::FTP},
1040                            sub {require Net::Config},
1041                           ],
1042               'HTTP::Tiny' => [
1043                            sub {
1044                                require HTTP::Tiny;
1045                                unless (CPAN::Version->vge(HTTP::Tiny->VERSION, 0.005)) {
1046                                    for ("Will not use HTTP::Tiny, need version 0.005\n") {
1047                                        $CPAN::Frontend->mywarn($_);
1048                                        die $_;
1049                                    }
1050                                }
1051                            },
1052                           ],
1053               'File::HomeDir' => [
1054                                   sub {require File::HomeDir;
1055                                        unless (CPAN::Version->vge(File::HomeDir::->VERSION, 0.52)) {
1056                                            for ("Will not use File::HomeDir, need 0.52\n") {
1057                                                $CPAN::Frontend->mywarn($_);
1058                                                die $_;
1059                                            }
1060                                        }
1061                                    },
1062                                  ],
1063               'Archive::Tar' => [
1064                                  sub {require Archive::Tar;
1065                                       my $demand = "1.50";
1066                                       unless (CPAN::Version->vge(Archive::Tar::->VERSION, $demand)) {
1067                                            my $atv = Archive::Tar->VERSION;
1068                                            for ("You have Archive::Tar $atv, but $demand or later is recommended. Please upgrade.\n") {
1069                                                $CPAN::Frontend->mywarn($_);
1070                                            # don't die, because we may need
1071                                            # Archive::Tar to upgrade
1072                                            }
1073
1074                                       }
1075                                  },
1076                                 ],
1077               'File::Temp' => [
1078                                # XXX we should probably delete from
1079                                # %INC too so we can load after we
1080                                # installed a new enough version --
1081                                # I'm not sure.
1082                                sub {require File::Temp;
1083                                     unless (CPAN::Version->vge(File::Temp::->VERSION,0.16)) {
1084                                         for ("Will not use File::Temp, need 0.16\n") {
1085                                                $CPAN::Frontend->mywarn($_);
1086                                                die $_;
1087                                         }
1088                                     }
1089                                },
1090                               ]
1091              };
1092    if ($usable->{$mod}) {
1093        for my $c (0..$#{$usable->{$mod}}) {
1094            my $code = $usable->{$mod}[$c];
1095            my $ret = eval { &$code() };
1096            $ret = "" unless defined $ret;
1097            if ($@) {
1098                # warn "DEBUG: c[$c]\$\@[$@]ret[$ret]";
1099                return;
1100            }
1101        }
1102    }
1103    return $HAS_USABLE->{$mod} = 1;
1104}
1105
1106#-> sub CPAN::has_inst
1107sub has_inst {
1108    my($self,$mod,$message) = @_;
1109    Carp::croak("CPAN->has_inst() called without an argument")
1110        unless defined $mod;
1111    my %dont = map { $_ => 1 } keys %{$CPAN::META->{dontload_hash}||{}},
1112        keys %{$CPAN::Config->{dontload_hash}||{}},
1113            @{$CPAN::Config->{dontload_list}||[]};
1114    if (defined $message && $message eq "no"  # afair only used by Nox
1115        ||
1116        $dont{$mod}
1117       ) {
1118      $CPAN::META->{dontload_hash}{$mod}||=1; # unsafe meta access, ok
1119      return 0;
1120    }
1121    my $file = $mod;
1122    my $obj;
1123    $file =~ s|::|/|g;
1124    $file .= ".pm";
1125    if ($INC{$file}) {
1126        # checking %INC is wrong, because $INC{LWP} may be true
1127        # although $INC{"URI/URL.pm"} may have failed. But as
1128        # I really want to say "bla loaded OK", I have to somehow
1129        # cache results.
1130        ### warn "$file in %INC"; #debug
1131        return 1;
1132    } elsif (eval { require $file }) {
1133        # eval is good: if we haven't yet read the database it's
1134        # perfect and if we have installed the module in the meantime,
1135        # it tries again. The second require is only a NOOP returning
1136        # 1 if we had success, otherwise it's retrying
1137
1138        my $mtime = (stat $INC{$file})[9];
1139        # privileged files loaded by has_inst; Note: we use $mtime
1140        # as a proxy for a checksum.
1141        $CPAN::Shell::reload->{$file} = $mtime;
1142        my $v = eval "\$$mod\::VERSION";
1143        $v = $v ? " (v$v)" : "";
1144        CPAN::Shell->optprint("load_module","CPAN: $mod loaded ok$v\n");
1145        if ($mod eq "CPAN::WAIT") {
1146            push @CPAN::Shell::ISA, 'CPAN::WAIT';
1147        }
1148        return 1;
1149    } elsif ($mod eq "Net::FTP") {
1150        $CPAN::Frontend->mywarn(qq{
1151  Please, install Net::FTP as soon as possible. CPAN.pm installs it for you
1152  if you just type
1153      install Bundle::libnet
1154
1155}) unless $Have_warned->{"Net::FTP"}++;
1156        $CPAN::Frontend->mysleep(3);
1157    } elsif ($mod eq "Digest::SHA") {
1158        if ($Have_warned->{"Digest::SHA"}++) {
1159            $CPAN::Frontend->mywarn(qq{CPAN: checksum security checks disabled }.
1160                                     qq{because Digest::SHA not installed.\n});
1161        } else {
1162            $CPAN::Frontend->mywarn(qq{
1163  CPAN: checksum security checks disabled because Digest::SHA not installed.
1164  Please consider installing the Digest::SHA module.
1165
1166});
1167            $CPAN::Frontend->mysleep(2);
1168        }
1169    } elsif ($mod eq "Module::Signature") {
1170        # NOT prefs_lookup, we are not a distro
1171        my $check_sigs = $CPAN::Config->{check_sigs};
1172        if (not $check_sigs) {
1173            # they do not want us:-(
1174        } elsif (not $Have_warned->{"Module::Signature"}++) {
1175            # No point in complaining unless the user can
1176            # reasonably install and use it.
1177            if (eval { require Crypt::OpenPGP; 1 } ||
1178                (
1179                 defined $CPAN::Config->{'gpg'}
1180                 &&
1181                 $CPAN::Config->{'gpg'} =~ /\S/
1182                )
1183               ) {
1184                $CPAN::Frontend->mywarn(qq{
1185  CPAN: Module::Signature security checks disabled because Module::Signature
1186  not installed.  Please consider installing the Module::Signature module.
1187  You may also need to be able to connect over the Internet to the public
1188  key servers like pool.sks-keyservers.net or pgp.mit.edu.
1189
1190});
1191                $CPAN::Frontend->mysleep(2);
1192            }
1193        }
1194    } else {
1195        delete $INC{$file}; # if it inc'd LWP but failed during, say, URI
1196    }
1197    return 0;
1198}
1199
1200#-> sub CPAN::instance ;
1201sub instance {
1202    my($mgr,$class,$id) = @_;
1203    CPAN::Index->reload;
1204    $id ||= "";
1205    # unsafe meta access, ok?
1206    return $META->{readwrite}{$class}{$id} if exists $META->{readwrite}{$class}{$id};
1207    $META->{readwrite}{$class}{$id} ||= $class->new(ID => $id);
1208}
1209
1210#-> sub CPAN::new ;
1211sub new {
1212    bless {}, shift;
1213}
1214
1215#-> sub CPAN::_exit_messages ;
1216sub _exit_messages {
1217    my ($self) = @_;
1218    $self->{exit_messages} ||= [];
1219}
1220
1221#-> sub CPAN::cleanup ;
1222sub cleanup {
1223  # warn "cleanup called with arg[@_] End[$CPAN::End] Signal[$Signal]";
1224  local $SIG{__DIE__} = '';
1225  my($message) = @_;
1226  my $i = 0;
1227  my $ineval = 0;
1228  my($subroutine);
1229  while ((undef,undef,undef,$subroutine) = caller(++$i)) {
1230      $ineval = 1, last if
1231        $subroutine eq '(eval)';
1232  }
1233  return if $ineval && !$CPAN::End;
1234  return unless defined $META->{LOCK};
1235  return unless -f $META->{LOCK};
1236  $META->savehist;
1237  $META->{cachemgr} ||= CPAN::CacheMgr->new('atexit');
1238  close $META->{LOCKFH};
1239  unlink $META->{LOCK};
1240  # require Carp;
1241  # Carp::cluck("DEBUGGING");
1242  if ( $CPAN::CONFIG_DIRTY ) {
1243      $CPAN::Frontend->mywarn("Warning: Configuration not saved.\n");
1244  }
1245  $CPAN::Frontend->myprint("Lockfile removed.\n");
1246  for my $msg ( @{ $META->_exit_messages } ) {
1247      $CPAN::Frontend->myprint($msg);
1248  }
1249}
1250
1251#-> sub CPAN::readhist
1252sub readhist {
1253    my($self,$term,$histfile) = @_;
1254    my $histsize = $CPAN::Config->{'histsize'} || 100;
1255    $term->Attribs->{'MaxHistorySize'} = $histsize if (defined($term->Attribs->{'MaxHistorySize'}));
1256    my($fh) = FileHandle->new;
1257    open $fh, "<$histfile" or return;
1258    local $/ = "\n";
1259    while (<$fh>) {
1260        chomp;
1261        $term->AddHistory($_);
1262    }
1263    close $fh;
1264}
1265
1266#-> sub CPAN::savehist
1267sub savehist {
1268    my($self) = @_;
1269    my($histfile,$histsize);
1270    unless ($histfile = $CPAN::Config->{'histfile'}) {
1271        $CPAN::Frontend->mywarn("No history written (no histfile specified).\n");
1272        return;
1273    }
1274    $histsize = $CPAN::Config->{'histsize'} || 100;
1275    if ($CPAN::term) {
1276        unless ($CPAN::term->can("GetHistory")) {
1277            $CPAN::Frontend->mywarn("Terminal does not support GetHistory.\n");
1278            return;
1279        }
1280    } else {
1281        return;
1282    }
1283    my @h = $CPAN::term->GetHistory;
1284    splice @h, 0, @h-$histsize if @h>$histsize;
1285    my($fh) = FileHandle->new;
1286    open $fh, ">$histfile" or $CPAN::Frontend->mydie("Couldn't open >$histfile: $!");
1287    local $\ = local $, = "\n";
1288    print $fh @h;
1289    close $fh;
1290}
1291
1292#-> sub CPAN::is_tested
1293sub is_tested {
1294    my($self,$what,$when) = @_;
1295    unless ($what) {
1296        Carp::cluck("DEBUG: empty what");
1297        return;
1298    }
1299    $self->{is_tested}{$what} = $when;
1300}
1301
1302#-> sub CPAN::reset_tested
1303# forget all distributions tested -- resets what gets included in PERL5LIB
1304sub reset_tested {
1305    my ($self) = @_;
1306    $self->{is_tested} = {};
1307}
1308
1309#-> sub CPAN::is_installed
1310# unsets the is_tested flag: as soon as the thing is installed, it is
1311# not needed in set_perl5lib anymore
1312sub is_installed {
1313    my($self,$what) = @_;
1314    delete $self->{is_tested}{$what};
1315}
1316
1317sub _list_sorted_descending_is_tested {
1318    my($self) = @_;
1319    my $foul = 0;
1320    my @sorted = sort
1321        { ($self->{is_tested}{$b}||0) <=> ($self->{is_tested}{$a}||0) }
1322            grep
1323                { if ($foul){ 0 } elsif (-e) { 1 } else { $foul = $_; 0 } }
1324                    keys %{$self->{is_tested}};
1325    if ($foul) {
1326        $CPAN::Frontend->mywarn("Lost build_dir detected ($foul), giving up all cached test results of currently running session.\n");
1327        for my $dbd (keys %{$self->{is_tested}}) { # distro-build-dir
1328        SEARCH: for my $d ($CPAN::META->all_objects("CPAN::Distribution")) {
1329                if ($d->{build_dir} && $d->{build_dir} eq $dbd) {
1330                    $CPAN::Frontend->mywarn(sprintf "Flushing cache for %s\n", $d->pretty_id);
1331                    $d->fforce("");
1332                    last SEARCH;
1333                }
1334            }
1335            delete $self->{is_tested}{$dbd};
1336        }
1337        return ();
1338    } else {
1339        return @sorted;
1340    }
1341}
1342
1343#-> sub CPAN::set_perl5lib
1344# Notes on max environment variable length:
1345#   - Win32 : XP or later, 8191; Win2000 or NT4, 2047
1346{
1347my $fh;
1348sub set_perl5lib {
1349    my($self,$for) = @_;
1350    unless ($for) {
1351        (undef,undef,undef,$for) = caller(1);
1352        $for =~ s/.*://;
1353    }
1354    $self->{is_tested} ||= {};
1355    return unless %{$self->{is_tested}};
1356    my $env = $ENV{PERL5LIB};
1357    $env = $ENV{PERLLIB} unless defined $env;
1358    my @env;
1359    push @env, split /\Q$Config::Config{path_sep}\E/, $env if defined $env and length $env;
1360    #my @dirs = map {("$_/blib/arch", "$_/blib/lib")} keys %{$self->{is_tested}};
1361    #$CPAN::Frontend->myprint("Prepending @dirs to PERL5LIB.\n");
1362
1363    my @dirs = map {("$_/blib/arch", "$_/blib/lib")} $self->_list_sorted_descending_is_tested;
1364    return if !@dirs;
1365
1366    if (@dirs < 12) {
1367        $CPAN::Frontend->optprint('perl5lib', "Prepending @dirs to PERL5LIB for '$for'\n");
1368        $ENV{PERL5LIB} = join $Config::Config{path_sep}, @dirs, @env;
1369    } elsif (@dirs < 24 ) {
1370        my @d = map {my $cp = $_;
1371                     $cp =~ s/^\Q$CPAN::Config->{build_dir}\E/%BUILDDIR%/;
1372                     $cp
1373                 } @dirs;
1374        $CPAN::Frontend->optprint('perl5lib', "Prepending @d to PERL5LIB; ".
1375                                 "%BUILDDIR%=$CPAN::Config->{build_dir} ".
1376                                 "for '$for'\n"
1377                                );
1378        $ENV{PERL5LIB} = join $Config::Config{path_sep}, @dirs, @env;
1379    } else {
1380        my $cnt = keys %{$self->{is_tested}};
1381        $CPAN::Frontend->optprint('perl5lib', "Prepending blib/arch and blib/lib of ".
1382                                 "$cnt build dirs to PERL5LIB; ".
1383                                 "for '$for'\n"
1384                                );
1385        $ENV{PERL5LIB} = join $Config::Config{path_sep}, @dirs, @env;
1386    }
1387}}
1388
1389
13901;
1391
1392
1393__END__
1394
1395=head1 NAME
1396
1397CPAN - query, download and build perl modules from CPAN sites
1398
1399=head1 SYNOPSIS
1400
1401Interactive mode:
1402
1403  perl -MCPAN -e shell
1404
1405--or--
1406
1407  cpan
1408
1409Basic commands:
1410
1411  # Modules:
1412
1413  cpan> install Acme::Meta                       # in the shell
1414
1415  CPAN::Shell->install("Acme::Meta");            # in perl
1416
1417  # Distributions:
1418
1419  cpan> install NWCLARK/Acme-Meta-0.02.tar.gz    # in the shell
1420
1421  CPAN::Shell->
1422    install("NWCLARK/Acme-Meta-0.02.tar.gz");    # in perl
1423
1424  # module objects:
1425
1426  $mo = CPAN::Shell->expandany($mod);
1427  $mo = CPAN::Shell->expand("Module",$mod);      # same thing
1428
1429  # distribution objects:
1430
1431  $do = CPAN::Shell->expand("Module",$mod)->distribution;
1432  $do = CPAN::Shell->expandany($distro);         # same thing
1433  $do = CPAN::Shell->expand("Distribution",
1434                            $distro);            # same thing
1435
1436=head1 DESCRIPTION
1437
1438The CPAN module automates or at least simplifies the make and install
1439of perl modules and extensions. It includes some primitive searching
1440capabilities and knows how to use LWP, HTTP::Tiny, Net::FTP and certain
1441external download clients to fetch distributions from the net.
1442
1443These are fetched from one or more mirrored CPAN (Comprehensive
1444Perl Archive Network) sites and unpacked in a dedicated directory.
1445
1446The CPAN module also supports named and versioned
1447I<bundles> of modules. Bundles simplify handling of sets of
1448related modules. See Bundles below.
1449
1450The package contains a session manager and a cache manager. The
1451session manager keeps track of what has been fetched, built, and
1452installed in the current session. The cache manager keeps track of the
1453disk space occupied by the make processes and deletes excess space
1454using a simple FIFO mechanism.
1455
1456All methods provided are accessible in a programmer style and in an
1457interactive shell style.
1458
1459=head2 CPAN::shell([$prompt, $command]) Starting Interactive Mode
1460
1461Enter interactive mode by running
1462
1463    perl -MCPAN -e shell
1464
1465or
1466
1467    cpan
1468
1469which puts you into a readline interface. If C<Term::ReadKey> and
1470either of C<Term::ReadLine::Perl> or C<Term::ReadLine::Gnu> are installed,
1471history and command completion are supported.
1472
1473Once at the command line, type C<h> for one-page help
1474screen; the rest should be self-explanatory.
1475
1476The function call C<shell> takes two optional arguments: one the
1477prompt, the second the default initial command line (the latter
1478only works if a real ReadLine interface module is installed).
1479
1480The most common uses of the interactive modes are
1481
1482=over 2
1483
1484=item Searching for authors, bundles, distribution files and modules
1485
1486There are corresponding one-letter commands C<a>, C<b>, C<d>, and C<m>
1487for each of the four categories and another, C<i> for any of the
1488mentioned four. Each of the four entities is implemented as a class
1489with slightly differing methods for displaying an object.
1490
1491Arguments to these commands are either strings exactly matching
1492the identification string of an object, or regular expressions
1493matched case-insensitively against various attributes of the
1494objects. The parser only recognizes a regular expression when you
1495enclose it with slashes.
1496
1497The principle is that the number of objects found influences how an
1498item is displayed. If the search finds one item, the result is
1499displayed with the rather verbose method C<as_string>, but if
1500more than one is found, each object is displayed with the terse method
1501C<as_glimpse>.
1502
1503Examples:
1504
1505  cpan> m Acme::MetaSyntactic
1506  Module id = Acme::MetaSyntactic
1507      CPAN_USERID  BOOK (Philippe Bruhat (BooK) <[...]>)
1508      CPAN_VERSION 0.99
1509      CPAN_FILE    B/BO/BOOK/Acme-MetaSyntactic-0.99.tar.gz
1510      UPLOAD_DATE  2006-11-06
1511      MANPAGE      Acme::MetaSyntactic - Themed metasyntactic variables names
1512      INST_FILE    /usr/local/lib/perl/5.10.0/Acme/MetaSyntactic.pm
1513      INST_VERSION 0.99
1514  cpan> a BOOK
1515  Author id = BOOK
1516      EMAIL        [...]
1517      FULLNAME     Philippe Bruhat (BooK)
1518  cpan> d BOOK/Acme-MetaSyntactic-0.99.tar.gz
1519  Distribution id = B/BO/BOOK/Acme-MetaSyntactic-0.99.tar.gz
1520      CPAN_USERID  BOOK (Philippe Bruhat (BooK) <[...]>)
1521      CONTAINSMODS Acme::MetaSyntactic Acme::MetaSyntactic::Alias [...]
1522      UPLOAD_DATE  2006-11-06
1523  cpan> m /lorem/
1524  Module  = Acme::MetaSyntactic::loremipsum (BOOK/Acme-MetaSyntactic-0.99.tar.gz)
1525  Module    Text::Lorem            (ADEOLA/Text-Lorem-0.3.tar.gz)
1526  Module    Text::Lorem::More      (RKRIMEN/Text-Lorem-More-0.12.tar.gz)
1527  Module    Text::Lorem::More::Source (RKRIMEN/Text-Lorem-More-0.12.tar.gz)
1528  cpan> i /berlin/
1529  Distribution    BEATNIK/Filter-NumberLines-0.02.tar.gz
1530  Module  = DateTime::TimeZone::Europe::Berlin (DROLSKY/DateTime-TimeZone-0.7904.tar.gz)
1531  Module    Filter::NumberLines    (BEATNIK/Filter-NumberLines-0.02.tar.gz)
1532  Author          [...]
1533
1534The examples illustrate several aspects: the first three queries
1535target modules, authors, or distros directly and yield exactly one
1536result. The last two use regular expressions and yield several
1537results. The last one targets all of bundles, modules, authors, and
1538distros simultaneously. When more than one result is available, they
1539are printed in one-line format.
1540
1541=item C<get>, C<make>, C<test>, C<install>, C<clean> modules or distributions
1542
1543These commands take any number of arguments and investigate what is
1544necessary to perform the action. Argument processing is as follows:
1545
1546  known module name in format Foo/Bar.pm   module
1547  other embedded slash                     distribution
1548    - with trailing slash dot              directory
1549  enclosing slashes                        regexp
1550  known module name in format Foo::Bar     module
1551
1552If the argument is a distribution file name (recognized by embedded
1553slashes), it is processed. If it is a module, CPAN determines the
1554distribution file in which this module is included and processes that,
1555following any dependencies named in the module's META.yml or
1556Makefile.PL (this behavior is controlled by the configuration
1557parameter C<prerequisites_policy>). If an argument is enclosed in
1558slashes it is treated as a regular expression: it is expanded and if
1559the result is a single object (distribution, bundle or module), this
1560object is processed.
1561
1562Example:
1563
1564    install Dummy::Perl                   # installs the module
1565    install AUXXX/Dummy-Perl-3.14.tar.gz  # installs that distribution
1566    install /Dummy-Perl-3.14/             # same if the regexp is unambiguous
1567
1568C<get> downloads a distribution file and untars or unzips it, C<make>
1569builds it, C<test> runs the test suite, and C<install> installs it.
1570
1571Any C<make> or C<test> is run unconditionally. An
1572
1573  install <distribution_file>
1574
1575is also run unconditionally. But for
1576
1577  install <module>
1578
1579CPAN checks whether an install is needed and prints
1580I<module up to date> if the distribution file containing
1581the module doesn't need updating.
1582
1583CPAN also keeps track of what it has done within the current session
1584and doesn't try to build a package a second time regardless of whether it
1585succeeded or not. It does not repeat a test run if the test
1586has been run successfully before. Same for install runs.
1587
1588The C<force> pragma may precede another command (currently: C<get>,
1589C<make>, C<test>, or C<install>) to execute the command from scratch
1590and attempt to continue past certain errors. See the section below on
1591the C<force> and the C<fforce> pragma.
1592
1593The C<notest> pragma skips the test part in the build
1594process.
1595
1596Example:
1597
1598    cpan> notest install Tk
1599
1600A C<clean> command results in a
1601
1602  make clean
1603
1604being executed within the distribution file's working directory.
1605
1606=item C<readme>, C<perldoc>, C<look> module or distribution
1607
1608C<readme> displays the README file of the associated distribution.
1609C<Look> gets and untars (if not yet done) the distribution file,
1610changes to the appropriate directory and opens a subshell process in
1611that directory. C<perldoc> displays the module's pod documentation
1612in html or plain text format.
1613
1614=item C<ls> author
1615
1616=item C<ls> globbing_expression
1617
1618The first form lists all distribution files in and below an author's
1619CPAN directory as stored in the CHECKUMS files distributed on
1620CPAN. The listing recurses into subdirectories.
1621
1622The second form limits or expands the output with shell
1623globbing as in the following examples:
1624
1625      ls JV/make*
1626      ls GSAR/*make*
1627      ls */*make*
1628
1629The last example is very slow and outputs extra progress indicators
1630that break the alignment of the result.
1631
1632Note that globbing only lists directories explicitly asked for, for
1633example FOO/* will not list FOO/bar/Acme-Sthg-n.nn.tar.gz. This may be
1634regarded as a bug that may be changed in some future version.
1635
1636=item C<failed>
1637
1638The C<failed> command reports all distributions that failed on one of
1639C<make>, C<test> or C<install> for some reason in the currently
1640running shell session.
1641
1642=item Persistence between sessions
1643
1644If the C<YAML> or the C<YAML::Syck> module is installed a record of
1645the internal state of all modules is written to disk after each step.
1646The files contain a signature of the currently running perl version
1647for later perusal.
1648
1649If the configurations variable C<build_dir_reuse> is set to a true
1650value, then CPAN.pm reads the collected YAML files. If the stored
1651signature matches the currently running perl, the stored state is
1652loaded into memory such that persistence between sessions
1653is effectively established.
1654
1655=item The C<force> and the C<fforce> pragma
1656
1657To speed things up in complex installation scenarios, CPAN.pm keeps
1658track of what it has already done and refuses to do some things a
1659second time. A C<get>, a C<make>, and an C<install> are not repeated.
1660A C<test> is repeated only if the previous test was unsuccessful. The
1661diagnostic message when CPAN.pm refuses to do something a second time
1662is one of I<Has already been >C<unwrapped|made|tested successfully> or
1663something similar. Another situation where CPAN refuses to act is an
1664C<install> if the corresponding C<test> was not successful.
1665
1666In all these cases, the user can override this stubborn behaviour by
1667prepending the command with the word force, for example:
1668
1669  cpan> force get Foo
1670  cpan> force make AUTHOR/Bar-3.14.tar.gz
1671  cpan> force test Baz
1672  cpan> force install Acme::Meta
1673
1674Each I<forced> command is executed with the corresponding part of its
1675memory erased.
1676
1677The C<fforce> pragma is a variant that emulates a C<force get> which
1678erases the entire memory followed by the action specified, effectively
1679restarting the whole get/make/test/install procedure from scratch.
1680
1681=item Lockfile
1682
1683Interactive sessions maintain a lockfile, by default C<~/.cpan/.lock>.
1684Batch jobs can run without a lockfile and not disturb each other.
1685
1686The shell offers to run in I<downgraded mode> when another process is
1687holding the lockfile. This is an experimental feature that is not yet
1688tested very well. This second shell then does not write the history
1689file, does not use the metadata file, and has a different prompt.
1690
1691=item Signals
1692
1693CPAN.pm installs signal handlers for SIGINT and SIGTERM. While you are
1694in the cpan-shell, it is intended that you can press C<^C> anytime and
1695return to the cpan-shell prompt. A SIGTERM will cause the cpan-shell
1696to clean up and leave the shell loop. You can emulate the effect of a
1697SIGTERM by sending two consecutive SIGINTs, which usually means by
1698pressing C<^C> twice.
1699
1700CPAN.pm ignores SIGPIPE. If the user sets C<inactivity_timeout>, a
1701SIGALRM is used during the run of the C<perl Makefile.PL> or C<perl
1702Build.PL> subprocess. A SIGALRM is also used during module version
1703parsing, and is controlled by C<version_timeout>.
1704
1705=back
1706
1707=head2 CPAN::Shell
1708
1709The commands available in the shell interface are methods in
1710the package CPAN::Shell. If you enter the shell command, your
1711input is split by the Text::ParseWords::shellwords() routine, which
1712acts like most shells do. The first word is interpreted as the
1713method to be invoked, and the rest of the words are treated as the method's arguments.
1714Continuation lines are supported by ending a line with a
1715literal backslash.
1716
1717=head2 autobundle
1718
1719C<autobundle> writes a bundle file into the
1720C<$CPAN::Config-E<gt>{cpan_home}/Bundle> directory. The file contains
1721a list of all modules that are both available from CPAN and currently
1722installed within @INC. Duplicates of each distribution are suppressed.
1723The name of the bundle file is based on the current date and a
1724counter, e.g. F<Bundle/Snapshot_2012_05_21_00.pm>. This is installed
1725again by running C<cpan Bundle::Snapshot_2012_05_21_00>, or installing
1726C<Bundle::Snapshot_2012_05_21_00> from the CPAN shell.
1727
1728Return value: path to the written file.
1729
1730=head2 hosts
1731
1732Note: this feature is still in alpha state and may change in future
1733versions of CPAN.pm
1734
1735This commands provides a statistical overview over recent download
1736activities. The data for this is collected in the YAML file
1737C<FTPstats.yml> in your C<cpan_home> directory. If no YAML module is
1738configured or YAML not installed, no stats are provided.
1739
1740=over
1741
1742=item install_tested
1743
1744Install all distributions that have been tested successfully but have
1745not yet been installed. See also C<is_tested>.
1746
1747=item is_tested
1748
1749List all buid directories of distributions that have been tested
1750successfully but have not yet been installed. See also
1751C<install_tested>.
1752
1753=back
1754
1755=head2 mkmyconfig
1756
1757mkmyconfig() writes your own CPAN::MyConfig file into your C<~/.cpan/>
1758directory so that you can save your own preferences instead of the
1759system-wide ones.
1760
1761=head2 r [Module|/Regexp/]...
1762
1763scans current perl installation for modules that have a newer version
1764available on CPAN and provides a list of them. If called without
1765argument, all potential upgrades are listed; if called with arguments
1766the list is filtered to the modules and regexps given as arguments.
1767
1768The listing looks something like this:
1769
1770  Package namespace         installed    latest  in CPAN file
1771  CPAN                        1.94_64    1.9600  ANDK/CPAN-1.9600.tar.gz
1772  CPAN::Reporter               1.1801    1.1902  DAGOLDEN/CPAN-Reporter-1.1902.tar.gz
1773  YAML                           0.70      0.73  INGY/YAML-0.73.tar.gz
1774  YAML::Syck                     1.14      1.17  AVAR/YAML-Syck-1.17.tar.gz
1775  YAML::Tiny                     1.44      1.50  ADAMK/YAML-Tiny-1.50.tar.gz
1776  CGI                            3.43      3.55  MARKSTOS/CGI.pm-3.55.tar.gz
1777  Module::Build::YAML            1.40      1.41  DAGOLDEN/Module-Build-0.3800.tar.gz
1778  TAP::Parser::Result::YAML      3.22      3.23  ANDYA/Test-Harness-3.23.tar.gz
1779  YAML::XS                       0.34      0.35  INGY/YAML-LibYAML-0.35.tar.gz
1780
1781It suppresses duplicates in the column C<in CPAN file> such that
1782distributions with many upgradeable modules are listed only once.
1783
1784Note that the list is not sorted.
1785
1786=head2 recent ***EXPERIMENTAL COMMAND***
1787
1788The C<recent> command downloads a list of recent uploads to CPAN and
1789displays them I<slowly>. While the command is running, a $SIG{INT}
1790exits the loop after displaying the current item.
1791
1792B<Note>: This command requires XML::LibXML installed.
1793
1794B<Note>: This whole command currently is just a hack and will
1795probably change in future versions of CPAN.pm, but the general
1796approach will likely remain.
1797
1798B<Note>: See also L<smoke>
1799
1800=head2 recompile
1801
1802recompile() is a special command that takes no argument and
1803runs the make/test/install cycle with brute force over all installed
1804dynamically loadable extensions (a.k.a. XS modules) with 'force' in
1805effect. The primary purpose of this command is to finish a network
1806installation. Imagine you have a common source tree for two different
1807architectures. You decide to do a completely independent fresh
1808installation. You start on one architecture with the help of a Bundle
1809file produced earlier. CPAN installs the whole Bundle for you, but
1810when you try to repeat the job on the second architecture, CPAN
1811responds with a C<"Foo up to date"> message for all modules. So you
1812invoke CPAN's recompile on the second architecture and you're done.
1813
1814Another popular use for C<recompile> is to act as a rescue in case your
1815perl breaks binary compatibility. If one of the modules that CPAN uses
1816is in turn depending on binary compatibility (so you cannot run CPAN
1817commands), then you should try the CPAN::Nox module for recovery.
1818
1819=head2 report Bundle|Distribution|Module
1820
1821The C<report> command temporarily turns on the C<test_report> config
1822variable, then runs the C<force test> command with the given
1823arguments. The C<force> pragma reruns the tests and repeats
1824every step that might have failed before.
1825
1826=head2 smoke ***EXPERIMENTAL COMMAND***
1827
1828B<*** WARNING: this command downloads and executes software from CPAN to
1829your computer of completely unknown status. You should never do
1830this with your normal account and better have a dedicated well
1831separated and secured machine to do this. ***>
1832
1833The C<smoke> command takes the list of recent uploads to CPAN as
1834provided by the C<recent> command and tests them all. While the
1835command is running $SIG{INT} is defined to mean that the current item
1836shall be skipped.
1837
1838B<Note>: This whole command currently is just a hack and will
1839probably change in future versions of CPAN.pm, but the general
1840approach will likely remain.
1841
1842B<Note>: See also L<recent>
1843
1844=head2 upgrade [Module|/Regexp/]...
1845
1846The C<upgrade> command first runs an C<r> command with the given
1847arguments and then installs the newest versions of all modules that
1848were listed by that.
1849
1850=head2 The four C<CPAN::*> Classes: Author, Bundle, Module, Distribution
1851
1852Although it may be considered internal, the class hierarchy does matter
1853for both users and programmer. CPAN.pm deals with the four
1854classes mentioned above, and those classes all share a set of methods. Classical
1855single polymorphism is in effect. A metaclass object registers all
1856objects of all kinds and indexes them with a string. The strings
1857referencing objects have a separated namespace (well, not completely
1858separated):
1859
1860         Namespace                         Class
1861
1862   words containing a "/" (slash)      Distribution
1863    words starting with Bundle::          Bundle
1864          everything else            Module or Author
1865
1866Modules know their associated Distribution objects. They always refer
1867to the most recent official release. Developers may mark their releases
1868as unstable development versions (by inserting an underbar into the
1869module version number which will also be reflected in the distribution
1870name when you run 'make dist'), so the really hottest and newest
1871distribution is not always the default.  If a module Foo circulates
1872on CPAN in both version 1.23 and 1.23_90, CPAN.pm offers a convenient
1873way to install version 1.23 by saying
1874
1875    install Foo
1876
1877This would install the complete distribution file (say
1878BAR/Foo-1.23.tar.gz) with all accompanying material. But if you would
1879like to install version 1.23_90, you need to know where the
1880distribution file resides on CPAN relative to the authors/id/
1881directory. If the author is BAR, this might be BAR/Foo-1.23_90.tar.gz;
1882so you would have to say
1883
1884    install BAR/Foo-1.23_90.tar.gz
1885
1886The first example will be driven by an object of the class
1887CPAN::Module, the second by an object of class CPAN::Distribution.
1888
1889=head2 Integrating local directories
1890
1891Note: this feature is still in alpha state and may change in future
1892versions of CPAN.pm
1893
1894Distribution objects are normally distributions from the CPAN, but
1895there is a slightly degenerate case for Distribution objects, too, of
1896projects held on the local disk. These distribution objects have the
1897same name as the local directory and end with a dot. A dot by itself
1898is also allowed for the current directory at the time CPAN.pm was
1899used. All actions such as C<make>, C<test>, and C<install> are applied
1900directly to that directory. This gives the command C<cpan .> an
1901interesting touch: while the normal mantra of installing a CPAN module
1902without CPAN.pm is one of
1903
1904    perl Makefile.PL                 perl Build.PL
1905           ( go and get prerequisites )
1906    make                             ./Build
1907    make test                        ./Build test
1908    make install                     ./Build install
1909
1910the command C<cpan .> does all of this at once. It figures out which
1911of the two mantras is appropriate, fetches and installs all
1912prerequisites, takes care of them recursively, and finally finishes the
1913installation of the module in the current directory, be it a CPAN
1914module or not.
1915
1916The typical usage case is for private modules or working copies of
1917projects from remote repositories on the local disk.
1918
1919=head2 Redirection
1920
1921The usual shell redirection symbols C< | > and C<< > >> are recognized
1922by the cpan shell B<only when surrounded by whitespace>. So piping to
1923pager or redirecting output into a file works somewhat as in a normal
1924shell, with the stipulation that you must type extra spaces.
1925
1926=head1 CONFIGURATION
1927
1928When the CPAN module is used for the first time, a configuration
1929dialogue tries to determine a couple of site specific options. The
1930result of the dialog is stored in a hash reference C< $CPAN::Config >
1931in a file CPAN/Config.pm.
1932
1933Default values defined in the CPAN/Config.pm file can be
1934overridden in a user specific file: CPAN/MyConfig.pm. Such a file is
1935best placed in C<$HOME/.cpan/CPAN/MyConfig.pm>, because C<$HOME/.cpan> is
1936added to the search path of the CPAN module before the use() or
1937require() statements. The mkmyconfig command writes this file for you.
1938
1939The C<o conf> command has various bells and whistles:
1940
1941=over
1942
1943=item completion support
1944
1945If you have a ReadLine module installed, you can hit TAB at any point
1946of the commandline and C<o conf> will offer you completion for the
1947built-in subcommands and/or config variable names.
1948
1949=item displaying some help: o conf help
1950
1951Displays a short help
1952
1953=item displaying current values: o conf [KEY]
1954
1955Displays the current value(s) for this config variable. Without KEY,
1956displays all subcommands and config variables.
1957
1958Example:
1959
1960  o conf shell
1961
1962If KEY starts and ends with a slash, the string in between is
1963treated as a regular expression and only keys matching this regexp
1964are displayed
1965
1966Example:
1967
1968  o conf /color/
1969
1970=item changing of scalar values: o conf KEY VALUE
1971
1972Sets the config variable KEY to VALUE. The empty string can be
1973specified as usual in shells, with C<''> or C<"">
1974
1975Example:
1976
1977  o conf wget /usr/bin/wget
1978
1979=item changing of list values: o conf KEY SHIFT|UNSHIFT|PUSH|POP|SPLICE|LIST
1980
1981If a config variable name ends with C<list>, it is a list. C<o conf
1982KEY shift> removes the first element of the list, C<o conf KEY pop>
1983removes the last element of the list. C<o conf KEYS unshift LIST>
1984prepends a list of values to the list, C<o conf KEYS push LIST>
1985appends a list of valued to the list.
1986
1987Likewise, C<o conf KEY splice LIST> passes the LIST to the corresponding
1988splice command.
1989
1990Finally, any other list of arguments is taken as a new list value for
1991the KEY variable discarding the previous value.
1992
1993Examples:
1994
1995  o conf urllist unshift http://cpan.dev.local/CPAN
1996  o conf urllist splice 3 1
1997  o conf urllist http://cpan1.local http://cpan2.local ftp://ftp.perl.org
1998
1999=item reverting to saved: o conf defaults
2000
2001Reverts all config variables to the state in the saved config file.
2002
2003=item saving the config: o conf commit
2004
2005Saves all config variables to the current config file (CPAN/Config.pm
2006or CPAN/MyConfig.pm that was loaded at start).
2007
2008=back
2009
2010The configuration dialog can be started any time later again by
2011issuing the command C< o conf init > in the CPAN shell. A subset of
2012the configuration dialog can be run by issuing C<o conf init WORD>
2013where WORD is any valid config variable or a regular expression.
2014
2015=head2 Config Variables
2016
2017The following keys in the hash reference $CPAN::Config are
2018currently defined:
2019
2020  applypatch         path to external prg
2021  auto_commit        commit all changes to config variables to disk
2022  build_cache        size of cache for directories to build modules
2023  build_dir          locally accessible directory to build modules
2024  build_dir_reuse    boolean if distros in build_dir are persistent
2025  build_requires_install_policy
2026                     to install or not to install when a module is
2027                     only needed for building. yes|no|ask/yes|ask/no
2028  bzip2              path to external prg
2029  cache_metadata     use serializer to cache metadata
2030  check_sigs         if signatures should be verified
2031  colorize_debug     Term::ANSIColor attributes for debugging output
2032  colorize_output    boolean if Term::ANSIColor should colorize output
2033  colorize_print     Term::ANSIColor attributes for normal output
2034  colorize_warn      Term::ANSIColor attributes for warnings
2035  commandnumber_in_prompt
2036                     boolean if you want to see current command number
2037  commands_quote     preferred character to use for quoting external
2038                     commands when running them. Defaults to double
2039                     quote on Windows, single tick everywhere else;
2040                     can be set to space to disable quoting
2041  connect_to_internet_ok
2042                     whether to ask if opening a connection is ok before
2043                     urllist is specified
2044  cpan_home          local directory reserved for this package
2045  curl               path to external prg
2046  dontload_hash      DEPRECATED
2047  dontload_list      arrayref: modules in the list will not be
2048                     loaded by the CPAN::has_inst() routine
2049  ftp                path to external prg
2050  ftp_passive        if set, the environment variable FTP_PASSIVE is set
2051                     for downloads
2052  ftp_proxy          proxy host for ftp requests
2053  ftpstats_period    max number of days to keep download statistics
2054  ftpstats_size      max number of items to keep in the download statistics
2055  getcwd             see below
2056  gpg                path to external prg
2057  gzip               location of external program gzip
2058  halt_on_failure    stop processing after the first failure of queued
2059                     items or dependencies
2060  histfile           file to maintain history between sessions
2061  histsize           maximum number of lines to keep in histfile
2062  http_proxy         proxy host for http requests
2063  inactivity_timeout breaks interactive Makefile.PLs or Build.PLs
2064                     after this many seconds inactivity. Set to 0 to
2065                     disable timeouts.
2066  index_expire       refetch index files after this many days
2067  inhibit_startup_message
2068                     if true, suppress the startup message
2069  keep_source_where  directory in which to keep the source (if we do)
2070  load_module_verbosity
2071                     report loading of optional modules used by CPAN.pm
2072  lynx               path to external prg
2073  make               location of external make program
2074  make_arg           arguments that should always be passed to 'make'
2075  make_install_make_command
2076                     the make command for running 'make install', for
2077                     example 'sudo make'
2078  make_install_arg   same as make_arg for 'make install'
2079  makepl_arg         arguments passed to 'perl Makefile.PL'
2080  mbuild_arg         arguments passed to './Build'
2081  mbuild_install_arg arguments passed to './Build install'
2082  mbuild_install_build_command
2083                     command to use instead of './Build' when we are
2084                     in the install stage, for example 'sudo ./Build'
2085  mbuildpl_arg       arguments passed to 'perl Build.PL'
2086  ncftp              path to external prg
2087  ncftpget           path to external prg
2088  no_proxy           don't proxy to these hosts/domains (comma separated list)
2089  pager              location of external program more (or any pager)
2090  password           your password if you CPAN server wants one
2091  patch              path to external prg
2092  patches_dir        local directory containing patch files
2093  perl5lib_verbosity verbosity level for PERL5LIB additions
2094  prefer_external_tar
2095                     per default all untar operations are done with
2096                     Archive::Tar; by setting this variable to true
2097                     the external tar command is used if available
2098  prefer_installer   legal values are MB and EUMM: if a module comes
2099                     with both a Makefile.PL and a Build.PL, use the
2100                     former (EUMM) or the latter (MB); if the module
2101                     comes with only one of the two, that one will be
2102                     used no matter the setting
2103  prerequisites_policy
2104                     what to do if you are missing module prerequisites
2105                     ('follow' automatically, 'ask' me, or 'ignore')
2106                     For 'follow', also sets PERL_AUTOINSTALL and
2107                     PERL_EXTUTILS_AUTOINSTALL for "--defaultdeps" if
2108                     not already set
2109  prefs_dir          local directory to store per-distro build options
2110  proxy_user         username for accessing an authenticating proxy
2111  proxy_pass         password for accessing an authenticating proxy
2112  randomize_urllist  add some randomness to the sequence of the urllist
2113  scan_cache         controls scanning of cache ('atstart', 'atexit' or 'never')
2114  shell              your favorite shell
2115  show_unparsable_versions
2116                     boolean if r command tells which modules are versionless
2117  show_upload_date   boolean if commands should try to determine upload date
2118  show_zero_versions boolean if r command tells for which modules $version==0
2119  tar                location of external program tar
2120  tar_verbosity      verbosity level for the tar command
2121  term_is_latin      deprecated: if true Unicode is translated to ISO-8859-1
2122                     (and nonsense for characters outside latin range)
2123  term_ornaments     boolean to turn ReadLine ornamenting on/off
2124  test_report        email test reports (if CPAN::Reporter is installed)
2125  trust_test_report_history
2126                     skip testing when previously tested ok (according to
2127                     CPAN::Reporter history)
2128  unzip              location of external program unzip
2129  urllist            arrayref to nearby CPAN sites (or equivalent locations)
2130  use_sqlite         use CPAN::SQLite for metadata storage (fast and lean)
2131  username           your username if you CPAN server wants one
2132  version_timeout    stops version parsing after this many seconds.
2133                     Default is 15 secs. Set to 0 to disable.
2134  wait_list          arrayref to a wait server to try (See CPAN::WAIT)
2135  wget               path to external prg
2136  yaml_load_code     enable YAML code deserialisation via CPAN::DeferredCode
2137  yaml_module        which module to use to read/write YAML files
2138
2139You can set and query each of these options interactively in the cpan
2140shell with the C<o conf> or the C<o conf init> command as specified below.
2141
2142=over 2
2143
2144=item C<o conf E<lt>scalar optionE<gt>>
2145
2146prints the current value of the I<scalar option>
2147
2148=item C<o conf E<lt>scalar optionE<gt> E<lt>valueE<gt>>
2149
2150Sets the value of the I<scalar option> to I<value>
2151
2152=item C<o conf E<lt>list optionE<gt>>
2153
2154prints the current value of the I<list option> in MakeMaker's
2155neatvalue format.
2156
2157=item C<o conf E<lt>list optionE<gt> [shift|pop]>
2158
2159shifts or pops the array in the I<list option> variable
2160
2161=item C<o conf E<lt>list optionE<gt> [unshift|push|splice] E<lt>listE<gt>>
2162
2163works like the corresponding perl commands.
2164
2165=item interactive editing: o conf init [MATCH|LIST]
2166
2167Runs an interactive configuration dialog for matching variables.
2168Without argument runs the dialog over all supported config variables.
2169To specify a MATCH the argument must be enclosed by slashes.
2170
2171Examples:
2172
2173  o conf init ftp_passive ftp_proxy
2174  o conf init /color/
2175
2176Note: this method of setting config variables often provides more
2177explanation about the functioning of a variable than the manpage.
2178
2179=back
2180
2181=head2 CPAN::anycwd($path): Note on config variable getcwd
2182
2183CPAN.pm changes the current working directory often and needs to
2184determine its own current working directory. By default it uses
2185Cwd::cwd, but if for some reason this doesn't work on your system,
2186configure alternatives according to the following table:
2187
2188=over 4
2189
2190=item cwd
2191
2192Calls Cwd::cwd
2193
2194=item getcwd
2195
2196Calls Cwd::getcwd
2197
2198=item fastcwd
2199
2200Calls Cwd::fastcwd
2201
2202=item backtickcwd
2203
2204Calls the external command cwd.
2205
2206=back
2207
2208=head2 Note on the format of the urllist parameter
2209
2210urllist parameters are URLs according to RFC 1738. We do a little
2211guessing if your URL is not compliant, but if you have problems with
2212C<file> URLs, please try the correct format. Either:
2213
2214    file://localhost/whatever/ftp/pub/CPAN/
2215
2216or
2217
2218    file:///home/ftp/pub/CPAN/
2219
2220=head2 The urllist parameter has CD-ROM support
2221
2222The C<urllist> parameter of the configuration table contains a list of
2223URLs used for downloading. If the list contains any
2224C<file> URLs, CPAN always tries there first. This
2225feature is disabled for index files. So the recommendation for the
2226owner of a CD-ROM with CPAN contents is: include your local, possibly
2227outdated CD-ROM as a C<file> URL at the end of urllist, e.g.
2228
2229  o conf urllist push file://localhost/CDROM/CPAN
2230
2231CPAN.pm will then fetch the index files from one of the CPAN sites
2232that come at the beginning of urllist. It will later check for each
2233module to see whether there is a local copy of the most recent version.
2234
2235Another peculiarity of urllist is that the site that we could
2236successfully fetch the last file from automatically gets a preference
2237token and is tried as the first site for the next request. So if you
2238add a new site at runtime it may happen that the previously preferred
2239site will be tried another time. This means that if you want to disallow
2240a site for the next transfer, it must be explicitly removed from
2241urllist.
2242
2243=head2 Maintaining the urllist parameter
2244
2245If you have YAML.pm (or some other YAML module configured in
2246C<yaml_module>) installed, CPAN.pm collects a few statistical data
2247about recent downloads. You can view the statistics with the C<hosts>
2248command or inspect them directly by looking into the C<FTPstats.yml>
2249file in your C<cpan_home> directory.
2250
2251To get some interesting statistics, it is recommended that
2252C<randomize_urllist> be set; this introduces some amount of
2253randomness into the URL selection.
2254
2255=head2 The C<requires> and C<build_requires> dependency declarations
2256
2257Since CPAN.pm version 1.88_51 modules declared as C<build_requires> by
2258a distribution are treated differently depending on the config
2259variable C<build_requires_install_policy>. By setting
2260C<build_requires_install_policy> to C<no>, such a module is not
2261installed. It is only built and tested, and then kept in the list of
2262tested but uninstalled modules. As such, it is available during the
2263build of the dependent module by integrating the path to the
2264C<blib/arch> and C<blib/lib> directories in the environment variable
2265PERL5LIB. If C<build_requires_install_policy> is set ti C<yes>, then
2266both modules declared as C<requires> and those declared as
2267C<build_requires> are treated alike. By setting to C<ask/yes> or
2268C<ask/no>, CPAN.pm asks the user and sets the default accordingly.
2269
2270=head2 Configuration for individual distributions (I<Distroprefs>)
2271
2272(B<Note:> This feature has been introduced in CPAN.pm 1.8854 and is
2273still considered beta quality)
2274
2275Distributions on CPAN usually behave according to what we call the
2276CPAN mantra. Or since the advent of Module::Build we should talk about
2277two mantras:
2278
2279    perl Makefile.PL     perl Build.PL
2280    make                 ./Build
2281    make test            ./Build test
2282    make install         ./Build install
2283
2284But some modules cannot be built with this mantra. They try to get
2285some extra data from the user via the environment, extra arguments, or
2286interactively--thus disturbing the installation of large bundles like
2287Phalanx100 or modules with many dependencies like Plagger.
2288
2289The distroprefs system of C<CPAN.pm> addresses this problem by
2290allowing the user to specify extra informations and recipes in YAML
2291files to either
2292
2293=over
2294
2295=item
2296
2297pass additional arguments to one of the four commands,
2298
2299=item
2300
2301set environment variables
2302
2303=item
2304
2305instantiate an Expect object that reads from the console, waits for
2306some regular expressions and enters some answers
2307
2308=item
2309
2310temporarily override assorted C<CPAN.pm> configuration variables
2311
2312=item
2313
2314specify dependencies the original maintainer forgot
2315
2316=item
2317
2318disable the installation of an object altogether
2319
2320=back
2321
2322See the YAML and Data::Dumper files that come with the C<CPAN.pm>
2323distribution in the C<distroprefs/> directory for examples.
2324
2325=head2 Filenames
2326
2327The YAML files themselves must have the C<.yml> extension; all other
2328files are ignored (for two exceptions see I<Fallback Data::Dumper and
2329Storable> below). The containing directory can be specified in
2330C<CPAN.pm> in the C<prefs_dir> config variable. Try C<o conf init
2331prefs_dir> in the CPAN shell to set and activate the distroprefs
2332system.
2333
2334Every YAML file may contain arbitrary documents according to the YAML
2335specification, and every document is treated as an entity that
2336can specify the treatment of a single distribution.
2337
2338Filenames can be picked arbitrarily; C<CPAN.pm> always reads
2339all files (in alphabetical order) and takes the key C<match> (see
2340below in I<Language Specs>) as a hashref containing match criteria
2341that determine if the current distribution matches the YAML document
2342or not.
2343
2344=head2 Fallback Data::Dumper and Storable
2345
2346If neither your configured C<yaml_module> nor YAML.pm is installed,
2347CPAN.pm falls back to using Data::Dumper and Storable and looks for
2348files with the extensions C<.dd> or C<.st> in the C<prefs_dir>
2349directory. These files are expected to contain one or more hashrefs.
2350For Data::Dumper generated files, this is expected to be done with by
2351defining C<$VAR1>, C<$VAR2>, etc. The YAML shell would produce these
2352with the command
2353
2354    ysh < somefile.yml > somefile.dd
2355
2356For Storable files the rule is that they must be constructed such that
2357C<Storable::retrieve(file)> returns an array reference and the array
2358elements represent one distropref object each. The conversion from
2359YAML would look like so:
2360
2361    perl -MYAML=LoadFile -MStorable=nstore -e '
2362        @y=LoadFile(shift);
2363        nstore(\@y, shift)' somefile.yml somefile.st
2364
2365In bootstrapping situations it is usually sufficient to translate only
2366a few YAML files to Data::Dumper for crucial modules like
2367C<YAML::Syck>, C<YAML.pm> and C<Expect.pm>. If you prefer Storable
2368over Data::Dumper, remember to pull out a Storable version that writes
2369an older format than all the other Storable versions that will need to
2370read them.
2371
2372=head2 Blueprint
2373
2374The following example contains all supported keywords and structures
2375with the exception of C<eexpect> which can be used instead of
2376C<expect>.
2377
2378  ---
2379  comment: "Demo"
2380  match:
2381    module: "Dancing::Queen"
2382    distribution: "^CHACHACHA/Dancing-"
2383    not_distribution: "\.zip$"
2384    perl: "/usr/local/cariba-perl/bin/perl"
2385    perlconfig:
2386      archname: "freebsd"
2387      not_cc: "gcc"
2388    env:
2389      DANCING_FLOOR: "Shubiduh"
2390  disabled: 1
2391  cpanconfig:
2392    make: gmake
2393  pl:
2394    args:
2395      - "--somearg=specialcase"
2396
2397    env: {}
2398
2399    expect:
2400      - "Which is your favorite fruit"
2401      - "apple\n"
2402
2403  make:
2404    args:
2405      - all
2406      - extra-all
2407
2408    env: {}
2409
2410    expect: []
2411
2412    commandline: "echo SKIPPING make"
2413
2414  test:
2415    args: []
2416
2417    env: {}
2418
2419    expect: []
2420
2421  install:
2422    args: []
2423
2424    env:
2425      WANT_TO_INSTALL: YES
2426
2427    expect:
2428      - "Do you really want to install"
2429      - "y\n"
2430
2431  patches:
2432    - "ABCDE/Fedcba-3.14-ABCDE-01.patch"
2433
2434  depends:
2435    configure_requires:
2436      LWP: 5.8
2437    build_requires:
2438      Test::Exception: 0.25
2439    requires:
2440      Spiffy: 0.30
2441
2442
2443=head2 Language Specs
2444
2445Every YAML document represents a single hash reference. The valid keys
2446in this hash are as follows:
2447
2448=over
2449
2450=item comment [scalar]
2451
2452A comment
2453
2454=item cpanconfig [hash]
2455
2456Temporarily override assorted C<CPAN.pm> configuration variables.
2457
2458Supported are: C<build_requires_install_policy>, C<check_sigs>,
2459C<make>, C<make_install_make_command>, C<prefer_installer>,
2460C<test_report>. Please report as a bug when you need another one
2461supported.
2462
2463=item depends [hash] *** EXPERIMENTAL FEATURE ***
2464
2465All three types, namely C<configure_requires>, C<build_requires>, and
2466C<requires> are supported in the way specified in the META.yml
2467specification. The current implementation I<merges> the specified
2468dependencies with those declared by the package maintainer. In a
2469future implementation this may be changed to override the original
2470declaration.
2471
2472=item disabled [boolean]
2473
2474Specifies that this distribution shall not be processed at all.
2475
2476=item features [array] *** EXPERIMENTAL FEATURE ***
2477
2478Experimental implementation to deal with optional_features from
2479META.yml. Still needs coordination with installer software and
2480currently works only for META.yml declaring C<dynamic_config=0>. Use
2481with caution.
2482
2483=item goto [string]
2484
2485The canonical name of a delegate distribution to install
2486instead. Useful when a new version, although it tests OK itself,
2487breaks something else or a developer release or a fork is already
2488uploaded that is better than the last released version.
2489
2490=item install [hash]
2491
2492Processing instructions for the C<make install> or C<./Build install>
2493phase of the CPAN mantra. See below under I<Processing Instructions>.
2494
2495=item make [hash]
2496
2497Processing instructions for the C<make> or C<./Build> phase of the
2498CPAN mantra. See below under I<Processing Instructions>.
2499
2500=item match [hash]
2501
2502A hashref with one or more of the keys C<distribution>, C<module>,
2503C<perl>, C<perlconfig>, and C<env> that specify whether a document is
2504targeted at a specific CPAN distribution or installation.
2505Keys prefixed with C<not_> negates the corresponding match.
2506
2507The corresponding values are interpreted as regular expressions. The
2508C<distribution> related one will be matched against the canonical
2509distribution name, e.g. "AUTHOR/Foo-Bar-3.14.tar.gz".
2510
2511The C<module> related one will be matched against I<all> modules
2512contained in the distribution until one module matches.
2513
2514The C<perl> related one will be matched against C<$^X> (but with the
2515absolute path).
2516
2517The value associated with C<perlconfig> is itself a hashref that is
2518matched against corresponding values in the C<%Config::Config> hash
2519living in the C<Config.pm> module.
2520Keys prefixed with C<not_> negates the corresponding match.
2521
2522The value associated with C<env> is itself a hashref that is
2523matched against corresponding values in the C<%ENV> hash.
2524Keys prefixed with C<not_> negates the corresponding match.
2525
2526If more than one restriction of C<module>, C<distribution>, etc. is
2527specified, the results of the separately computed match values must
2528all match. If so, the hashref represented by the
2529YAML document is returned as the preference structure for the current
2530distribution.
2531
2532=item patches [array]
2533
2534An array of patches on CPAN or on the local disk to be applied in
2535order via an external patch program. If the value for the C<-p>
2536parameter is C<0> or C<1> is determined by reading the patch
2537beforehand. The path to each patch is either an absolute path on the
2538local filesystem or relative to a patch directory specified in the
2539C<patches_dir> configuration variable or in the format of a canonical
2540distro name. For examples please consult the distroprefs/ directory in
2541the CPAN.pm distribution (these examples are not installed by
2542default).
2543
2544Note: if the C<applypatch> program is installed and C<CPAN::Config>
2545knows about it B<and> a patch is written by the C<makepatch> program,
2546then C<CPAN.pm> lets C<applypatch> apply the patch. Both C<makepatch>
2547and C<applypatch> are available from CPAN in the C<JV/makepatch-*>
2548distribution.
2549
2550=item pl [hash]
2551
2552Processing instructions for the C<perl Makefile.PL> or C<perl
2553Build.PL> phase of the CPAN mantra. See below under I<Processing
2554Instructions>.
2555
2556=item test [hash]
2557
2558Processing instructions for the C<make test> or C<./Build test> phase
2559of the CPAN mantra. See below under I<Processing Instructions>.
2560
2561=back
2562
2563=head2 Processing Instructions
2564
2565=over
2566
2567=item args [array]
2568
2569Arguments to be added to the command line
2570
2571=item commandline
2572
2573A full commandline to run via C<system()>.
2574During execution, the environment variable PERL is set
2575to $^X (but with an absolute path). If C<commandline> is specified,
2576C<args> is not used.
2577
2578=item eexpect [hash]
2579
2580Extended C<expect>. This is a hash reference with four allowed keys,
2581C<mode>, C<timeout>, C<reuse>, and C<talk>.
2582
2583You must install the C<Expect> module to use C<eexpect>. CPAN.pm
2584does not install it for you.
2585
2586C<mode> may have the values C<deterministic> for the case where all
2587questions come in the order written down and C<anyorder> for the case
2588where the questions may come in any order. The default mode is
2589C<deterministic>.
2590
2591C<timeout> denotes a timeout in seconds. Floating-point timeouts are
2592OK. With C<mode=deterministic>, the timeout denotes the
2593timeout per question; with C<mode=anyorder> it denotes the
2594timeout per byte received from the stream or questions.
2595
2596C<talk> is a reference to an array that contains alternating questions
2597and answers. Questions are regular expressions and answers are literal
2598strings. The Expect module watches the stream from the
2599execution of the external program (C<perl Makefile.PL>, C<perl
2600Build.PL>, C<make>, etc.).
2601
2602For C<mode=deterministic>, the CPAN.pm injects the
2603corresponding answer as soon as the stream matches the regular expression.
2604
2605For C<mode=anyorder> CPAN.pm answers a question as soon
2606as the timeout is reached for the next byte in the input stream. In
2607this mode you can use the C<reuse> parameter to decide what will
2608happen with a question-answer pair after it has been used. In the
2609default case (reuse=0) it is removed from the array, avoiding being
2610used again accidentally. If you want to answer the
2611question C<Do you really want to do that> several times, then it must
2612be included in the array at least as often as you want this answer to
2613be given. Setting the parameter C<reuse> to 1 makes this repetition
2614unnecessary.
2615
2616=item env [hash]
2617
2618Environment variables to be set during the command
2619
2620=item expect [array]
2621
2622You must install the C<Expect> module to use C<expect>. CPAN.pm
2623does not install it for you.
2624
2625C<< expect: <array> >> is a short notation for this C<eexpect>:
2626
2627	eexpect:
2628		mode: deterministic
2629		timeout: 15
2630		talk: <array>
2631
2632=back
2633
2634=head2 Schema verification with C<Kwalify>
2635
2636If you have the C<Kwalify> module installed (which is part of the
2637Bundle::CPANxxl), then all your distroprefs files are checked for
2638syntactic correctness.
2639
2640=head2 Example Distroprefs Files
2641
2642C<CPAN.pm> comes with a collection of example YAML files. Note that these
2643are really just examples and should not be used without care because
2644they cannot fit everybody's purpose. After all, the authors of the
2645packages that ask questions had a need to ask, so you should watch
2646their questions and adjust the examples to your environment and your
2647needs. You have been warned:-)
2648
2649=head1 PROGRAMMER'S INTERFACE
2650
2651If you do not enter the shell, shell commands are
2652available both as methods (C<CPAN::Shell-E<gt>install(...)>) and as
2653functions in the calling package (C<install(...)>).  Before calling low-level
2654commands, it makes sense to initialize components of CPAN you need, e.g.:
2655
2656  CPAN::HandleConfig->load;
2657  CPAN::Shell::setup_output;
2658  CPAN::Index->reload;
2659
2660High-level commands do such initializations automatically.
2661
2662There's currently only one class that has a stable interface -
2663CPAN::Shell. All commands that are available in the CPAN shell are
2664methods of the class CPAN::Shell. The arguments on the commandline are
2665passed as arguments to the method.
2666
2667So if you take for example the shell command
2668
2669  notest install A B C
2670
2671the actually executed command is
2672
2673  CPAN::Shell->notest("install","A","B","C");
2674
2675Each of the commands that produce listings of modules (C<r>,
2676C<autobundle>, C<u>) also return a list of the IDs of all modules
2677within the list.
2678
2679=over 2
2680
2681=item expand($type,@things)
2682
2683The IDs of all objects available within a program are strings that can
2684be expanded to the corresponding real objects with the
2685C<CPAN::Shell-E<gt>expand("Module",@things)> method. Expand returns a
2686list of CPAN::Module objects according to the C<@things> arguments
2687given. In scalar context, it returns only the first element of the
2688list.
2689
2690=item expandany(@things)
2691
2692Like expand, but returns objects of the appropriate type, i.e.
2693CPAN::Bundle objects for bundles, CPAN::Module objects for modules, and
2694CPAN::Distribution objects for distributions. Note: it does not expand
2695to CPAN::Author objects.
2696
2697=item Programming Examples
2698
2699This enables the programmer to do operations that combine
2700functionalities that are available in the shell.
2701
2702    # install everything that is outdated on my disk:
2703    perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
2704
2705    # install my favorite programs if necessary:
2706    for $mod (qw(Net::FTP Digest::SHA Data::Dumper)) {
2707        CPAN::Shell->install($mod);
2708    }
2709
2710    # list all modules on my disk that have no VERSION number
2711    for $mod (CPAN::Shell->expand("Module","/./")) {
2712        next unless $mod->inst_file;
2713        # MakeMaker convention for undefined $VERSION:
2714        next unless $mod->inst_version eq "undef";
2715        print "No VERSION in ", $mod->id, "\n";
2716    }
2717
2718    # find out which distribution on CPAN contains a module:
2719    print CPAN::Shell->expand("Module","Apache::Constants")->cpan_file
2720
2721Or if you want to schedule a I<cron> job to watch CPAN, you could list
2722all modules that need updating. First a quick and dirty way:
2723
2724    perl -e 'use CPAN; CPAN::Shell->r;'
2725
2726If you don't want any output should all modules be
2727up to date, parse the output of above command for the regular
2728expression C</modules are up to date/> and decide to mail the output
2729only if it doesn't match.
2730
2731If you prefer to do it more in a programmerish style in one single
2732process, something like this may better suit you:
2733
2734  # list all modules on my disk that have newer versions on CPAN
2735  for $mod (CPAN::Shell->expand("Module","/./")) {
2736    next unless $mod->inst_file;
2737    next if $mod->uptodate;
2738    printf "Module %s is installed as %s, could be updated to %s from CPAN\n",
2739        $mod->id, $mod->inst_version, $mod->cpan_version;
2740  }
2741
2742If that gives too much output every day, you may want to
2743watch only for three modules. You can write
2744
2745  for $mod (CPAN::Shell->expand("Module","/Apache|LWP|CGI/")) {
2746
2747as the first line instead. Or you can combine some of the above
2748tricks:
2749
2750  # watch only for a new mod_perl module
2751  $mod = CPAN::Shell->expand("Module","mod_perl");
2752  exit if $mod->uptodate;
2753  # new mod_perl arrived, let me know all update recommendations
2754  CPAN::Shell->r;
2755
2756=back
2757
2758=head2 Methods in the other Classes
2759
2760=over 4
2761
2762=item CPAN::Author::as_glimpse()
2763
2764Returns a one-line description of the author
2765
2766=item CPAN::Author::as_string()
2767
2768Returns a multi-line description of the author
2769
2770=item CPAN::Author::email()
2771
2772Returns the author's email address
2773
2774=item CPAN::Author::fullname()
2775
2776Returns the author's name
2777
2778=item CPAN::Author::name()
2779
2780An alias for fullname
2781
2782=item CPAN::Bundle::as_glimpse()
2783
2784Returns a one-line description of the bundle
2785
2786=item CPAN::Bundle::as_string()
2787
2788Returns a multi-line description of the bundle
2789
2790=item CPAN::Bundle::clean()
2791
2792Recursively runs the C<clean> method on all items contained in the bundle.
2793
2794=item CPAN::Bundle::contains()
2795
2796Returns a list of objects' IDs contained in a bundle. The associated
2797objects may be bundles, modules or distributions.
2798
2799=item CPAN::Bundle::force($method,@args)
2800
2801Forces CPAN to perform a task that it normally would have refused to
2802do. Force takes as arguments a method name to be called and any number
2803of additional arguments that should be passed to the called method.
2804The internals of the object get the needed changes so that CPAN.pm
2805does not refuse to take the action. The C<force> is passed recursively
2806to all contained objects. See also the section above on the C<force>
2807and the C<fforce> pragma.
2808
2809=item CPAN::Bundle::get()
2810
2811Recursively runs the C<get> method on all items contained in the bundle
2812
2813=item CPAN::Bundle::inst_file()
2814
2815Returns the highest installed version of the bundle in either @INC or
2816C<< $CPAN::Config->{cpan_home} >>. Note that this is different from
2817CPAN::Module::inst_file.
2818
2819=item CPAN::Bundle::inst_version()
2820
2821Like CPAN::Bundle::inst_file, but returns the $VERSION
2822
2823=item CPAN::Bundle::uptodate()
2824
2825Returns 1 if the bundle itself and all its members are up-to-date.
2826
2827=item CPAN::Bundle::install()
2828
2829Recursively runs the C<install> method on all items contained in the bundle
2830
2831=item CPAN::Bundle::make()
2832
2833Recursively runs the C<make> method on all items contained in the bundle
2834
2835=item CPAN::Bundle::readme()
2836
2837Recursively runs the C<readme> method on all items contained in the bundle
2838
2839=item CPAN::Bundle::test()
2840
2841Recursively runs the C<test> method on all items contained in the bundle
2842
2843=item CPAN::Distribution::as_glimpse()
2844
2845Returns a one-line description of the distribution
2846
2847=item CPAN::Distribution::as_string()
2848
2849Returns a multi-line description of the distribution
2850
2851=item CPAN::Distribution::author
2852
2853Returns the CPAN::Author object of the maintainer who uploaded this
2854distribution
2855
2856=item CPAN::Distribution::pretty_id()
2857
2858Returns a string of the form "AUTHORID/TARBALL", where AUTHORID is the
2859author's PAUSE ID and TARBALL is the distribution filename.
2860
2861=item CPAN::Distribution::base_id()
2862
2863Returns the distribution filename without any archive suffix.  E.g
2864"Foo-Bar-0.01"
2865
2866=item CPAN::Distribution::clean()
2867
2868Changes to the directory where the distribution has been unpacked and
2869runs C<make clean> there.
2870
2871=item CPAN::Distribution::containsmods()
2872
2873Returns a list of IDs of modules contained in a distribution file.
2874Works only for distributions listed in the 02packages.details.txt.gz
2875file. This typically means that just most recent version of a
2876distribution is covered.
2877
2878=item CPAN::Distribution::cvs_import()
2879
2880Changes to the directory where the distribution has been unpacked and
2881runs something like
2882
2883    cvs -d $cvs_root import -m $cvs_log $cvs_dir $userid v$version
2884
2885there.
2886
2887=item CPAN::Distribution::dir()
2888
2889Returns the directory into which this distribution has been unpacked.
2890
2891=item CPAN::Distribution::force($method,@args)
2892
2893Forces CPAN to perform a task that it normally would have refused to
2894do. Force takes as arguments a method name to be called and any number
2895of additional arguments that should be passed to the called method.
2896The internals of the object get the needed changes so that CPAN.pm
2897does not refuse to take the action. See also the section above on the
2898C<force> and the C<fforce> pragma.
2899
2900=item CPAN::Distribution::get()
2901
2902Downloads the distribution from CPAN and unpacks it. Does nothing if
2903the distribution has already been downloaded and unpacked within the
2904current session.
2905
2906=item CPAN::Distribution::install()
2907
2908Changes to the directory where the distribution has been unpacked and
2909runs the external command C<make install> there. If C<make> has not
2910yet been run, it will be run first. A C<make test> is issued in
2911any case and if this fails, the install is cancelled. The
2912cancellation can be avoided by letting C<force> run the C<install> for
2913you.
2914
2915This install method only has the power to install the distribution if
2916there are no dependencies in the way. To install an object along with all
2917its dependencies, use CPAN::Shell->install.
2918
2919Note that install() gives no meaningful return value. See uptodate().
2920
2921=item CPAN::Distribution::isa_perl()
2922
2923Returns 1 if this distribution file seems to be a perl distribution.
2924Normally this is derived from the file name only, but the index from
2925CPAN can contain a hint to achieve a return value of true for other
2926filenames too.
2927
2928=item CPAN::Distribution::look()
2929
2930Changes to the directory where the distribution has been unpacked and
2931opens a subshell there. Exiting the subshell returns.
2932
2933=item CPAN::Distribution::make()
2934
2935First runs the C<get> method to make sure the distribution is
2936downloaded and unpacked. Changes to the directory where the
2937distribution has been unpacked and runs the external commands C<perl
2938Makefile.PL> or C<perl Build.PL> and C<make> there.
2939
2940=item CPAN::Distribution::perldoc()
2941
2942Downloads the pod documentation of the file associated with a
2943distribution (in HTML format) and runs it through the external
2944command I<lynx> specified in C<< $CPAN::Config->{lynx} >>. If I<lynx>
2945isn't available, it converts it to plain text with the external
2946command I<html2text> and runs it through the pager specified
2947in C<< $CPAN::Config->{pager} >>.
2948
2949=item CPAN::Distribution::prefs()
2950
2951Returns the hash reference from the first matching YAML file that the
2952user has deposited in the C<prefs_dir/> directory. The first
2953succeeding match wins. The files in the C<prefs_dir/> are processed
2954alphabetically, and the canonical distro name (e.g.
2955AUTHOR/Foo-Bar-3.14.tar.gz) is matched against the regular expressions
2956stored in the $root->{match}{distribution} attribute value.
2957Additionally all module names contained in a distribution are matched
2958against the regular expressions in the $root->{match}{module} attribute
2959value. The two match values are ANDed together. Each of the two
2960attributes are optional.
2961
2962=item CPAN::Distribution::prereq_pm()
2963
2964Returns the hash reference that has been announced by a distribution
2965as the C<requires> and C<build_requires> elements. These can be
2966declared either by the C<META.yml> (if authoritative) or can be
2967deposited after the run of C<Build.PL> in the file C<./_build/prereqs>
2968or after the run of C<Makfile.PL> written as the C<PREREQ_PM> hash in
2969a comment in the produced C<Makefile>. I<Note>: this method only works
2970after an attempt has been made to C<make> the distribution. Returns
2971undef otherwise.
2972
2973=item CPAN::Distribution::readme()
2974
2975Downloads the README file associated with a distribution and runs it
2976through the pager specified in C<< $CPAN::Config->{pager} >>.
2977
2978=item CPAN::Distribution::reports()
2979
2980Downloads report data for this distribution from www.cpantesters.org
2981and displays a subset of them.
2982
2983=item CPAN::Distribution::read_yaml()
2984
2985Returns the content of the META.yml of this distro as a hashref. Note:
2986works only after an attempt has been made to C<make> the distribution.
2987Returns undef otherwise. Also returns undef if the content of META.yml
2988is not authoritative. (The rules about what exactly makes the content
2989authoritative are still in flux.)
2990
2991=item CPAN::Distribution::test()
2992
2993Changes to the directory where the distribution has been unpacked and
2994runs C<make test> there.
2995
2996=item CPAN::Distribution::uptodate()
2997
2998Returns 1 if all the modules contained in the distribution are
2999up-to-date. Relies on containsmods.
3000
3001=item CPAN::Index::force_reload()
3002
3003Forces a reload of all indices.
3004
3005=item CPAN::Index::reload()
3006
3007Reloads all indices if they have not been read for more than
3008C<< $CPAN::Config->{index_expire} >> days.
3009
3010=item CPAN::InfoObj::dump()
3011
3012CPAN::Author, CPAN::Bundle, CPAN::Module, and CPAN::Distribution
3013inherit this method. It prints the data structure associated with an
3014object. Useful for debugging. Note: the data structure is considered
3015internal and thus subject to change without notice.
3016
3017=item CPAN::Module::as_glimpse()
3018
3019Returns a one-line description of the module in four columns: The
3020first column contains the word C<Module>, the second column consists
3021of one character: an equals sign if this module is already installed
3022and up-to-date, a less-than sign if this module is installed but can be
3023upgraded, and a space if the module is not installed. The third column
3024is the name of the module and the fourth column gives maintainer or
3025distribution information.
3026
3027=item CPAN::Module::as_string()
3028
3029Returns a multi-line description of the module
3030
3031=item CPAN::Module::clean()
3032
3033Runs a clean on the distribution associated with this module.
3034
3035=item CPAN::Module::cpan_file()
3036
3037Returns the filename on CPAN that is associated with the module.
3038
3039=item CPAN::Module::cpan_version()
3040
3041Returns the latest version of this module available on CPAN.
3042
3043=item CPAN::Module::cvs_import()
3044
3045Runs a cvs_import on the distribution associated with this module.
3046
3047=item CPAN::Module::description()
3048
3049Returns a 44 character description of this module. Only available for
3050modules listed in The Module List (CPAN/modules/00modlist.long.html
3051or 00modlist.long.txt.gz)
3052
3053=item CPAN::Module::distribution()
3054
3055Returns the CPAN::Distribution object that contains the current
3056version of this module.
3057
3058=item CPAN::Module::dslip_status()
3059
3060Returns a hash reference. The keys of the hash are the letters C<D>,
3061C<S>, C<L>, C<I>, and <P>, for development status, support level,
3062language, interface and public licence respectively. The data for the
3063DSLIP status are collected by pause.perl.org when authors register
3064their namespaces. The values of the 5 hash elements are one-character
3065words whose meaning is described in the table below. There are also 5
3066hash elements C<DV>, C<SV>, C<LV>, C<IV>, and <PV> that carry a more
3067verbose value of the 5 status variables.
3068
3069Where the 'DSLIP' characters have the following meanings:
3070
3071  D - Development Stage  (Note: *NO IMPLIED TIMESCALES*):
3072    i   - Idea, listed to gain consensus or as a placeholder
3073    c   - under construction but pre-alpha (not yet released)
3074    a/b - Alpha/Beta testing
3075    R   - Released
3076    M   - Mature (no rigorous definition)
3077    S   - Standard, supplied with Perl 5
3078
3079  S - Support Level:
3080    m   - Mailing-list
3081    d   - Developer
3082    u   - Usenet newsgroup comp.lang.perl.modules
3083    n   - None known, try comp.lang.perl.modules
3084    a   - abandoned; volunteers welcome to take over maintenance
3085
3086  L - Language Used:
3087    p   - Perl-only, no compiler needed, should be platform independent
3088    c   - C and perl, a C compiler will be needed
3089    h   - Hybrid, written in perl with optional C code, no compiler needed
3090    +   - C++ and perl, a C++ compiler will be needed
3091    o   - perl and another language other than C or C++
3092
3093  I - Interface Style
3094    f   - plain Functions, no references used
3095    h   - hybrid, object and function interfaces available
3096    n   - no interface at all (huh?)
3097    r   - some use of unblessed References or ties
3098    O   - Object oriented using blessed references and/or inheritance
3099
3100  P - Public License
3101    p   - Standard-Perl: user may choose between GPL and Artistic
3102    g   - GPL: GNU General Public License
3103    l   - LGPL: "GNU Lesser General Public License" (previously known as
3104          "GNU Library General Public License")
3105    b   - BSD: The BSD License
3106    a   - Artistic license alone
3107    2   - Artistic license 2.0 or later
3108    o   - open source: approved by www.opensource.org
3109    d   - allows distribution without restrictions
3110    r   - restricted distribution
3111    n   - no license at all
3112
3113=item CPAN::Module::force($method,@args)
3114
3115Forces CPAN to perform a task it would normally refuse to
3116do. Force takes as arguments a method name to be invoked and any number
3117of additional arguments to pass that method.
3118The internals of the object get the needed changes so that CPAN.pm
3119does not refuse to take the action. See also the section above on the
3120C<force> and the C<fforce> pragma.
3121
3122=item CPAN::Module::get()
3123
3124Runs a get on the distribution associated with this module.
3125
3126=item CPAN::Module::inst_file()
3127
3128Returns the filename of the module found in @INC. The first file found
3129is reported, just as perl itself stops searching @INC once it finds a
3130module.
3131
3132=item CPAN::Module::available_file()
3133
3134Returns the filename of the module found in PERL5LIB or @INC. The
3135first file found is reported. The advantage of this method over
3136C<inst_file> is that modules that have been tested but not yet
3137installed are included because PERL5LIB keeps track of tested modules.
3138
3139=item CPAN::Module::inst_version()
3140
3141Returns the version number of the installed module in readable format.
3142
3143=item CPAN::Module::available_version()
3144
3145Returns the version number of the available module in readable format.
3146
3147=item CPAN::Module::install()
3148
3149Runs an C<install> on the distribution associated with this module.
3150
3151=item CPAN::Module::look()
3152
3153Changes to the directory where the distribution associated with this
3154module has been unpacked and opens a subshell there. Exiting the
3155subshell returns.
3156
3157=item CPAN::Module::make()
3158
3159Runs a C<make> on the distribution associated with this module.
3160
3161=item CPAN::Module::manpage_headline()
3162
3163If module is installed, peeks into the module's manpage, reads the
3164headline, and returns it. Moreover, if the module has been downloaded
3165within this session, does the equivalent on the downloaded module even
3166if it hasn't been installed yet.
3167
3168=item CPAN::Module::perldoc()
3169
3170Runs a C<perldoc> on this module.
3171
3172=item CPAN::Module::readme()
3173
3174Runs a C<readme> on the distribution associated with this module.
3175
3176=item CPAN::Module::reports()
3177
3178Calls the reports() method on the associated distribution object.
3179
3180=item CPAN::Module::test()
3181
3182Runs a C<test> on the distribution associated with this module.
3183
3184=item CPAN::Module::uptodate()
3185
3186Returns 1 if the module is installed and up-to-date.
3187
3188=item CPAN::Module::userid()
3189
3190Returns the author's ID of the module.
3191
3192=back
3193
3194=head2 Cache Manager
3195
3196Currently the cache manager only keeps track of the build directory
3197($CPAN::Config->{build_dir}). It is a simple FIFO mechanism that
3198deletes complete directories below C<build_dir> as soon as the size of
3199all directories there gets bigger than $CPAN::Config->{build_cache}
3200(in MB). The contents of this cache may be used for later
3201re-installations that you intend to do manually, but will never be
3202trusted by CPAN itself. This is due to the fact that the user might
3203use these directories for building modules on different architectures.
3204
3205There is another directory ($CPAN::Config->{keep_source_where}) where
3206the original distribution files are kept. This directory is not
3207covered by the cache manager and must be controlled by the user. If
3208you choose to have the same directory as build_dir and as
3209keep_source_where directory, then your sources will be deleted with
3210the same fifo mechanism.
3211
3212=head2 Bundles
3213
3214A bundle is just a perl module in the namespace Bundle:: that does not
3215define any functions or methods. It usually only contains documentation.
3216
3217It starts like a perl module with a package declaration and a $VERSION
3218variable. After that the pod section looks like any other pod with the
3219only difference being that I<one special pod section> exists starting with
3220(verbatim):
3221
3222    =head1 CONTENTS
3223
3224In this pod section each line obeys the format
3225
3226        Module_Name [Version_String] [- optional text]
3227
3228The only required part is the first field, the name of a module
3229(e.g. Foo::Bar, i.e. I<not> the name of the distribution file). The rest
3230of the line is optional. The comment part is delimited by a dash just
3231as in the man page header.
3232
3233The distribution of a bundle should follow the same convention as
3234other distributions.
3235
3236Bundles are treated specially in the CPAN package. If you say 'install
3237Bundle::Tkkit' (assuming such a bundle exists), CPAN will install all
3238the modules in the CONTENTS section of the pod. You can install your
3239own Bundles locally by placing a conformant Bundle file somewhere into
3240your @INC path. The autobundle() command which is available in the
3241shell interface does that for you by including all currently installed
3242modules in a snapshot bundle file.
3243
3244=head1 PREREQUISITES
3245
3246The CPAN program is trying to depend on as little as possible so the
3247user can use it in hostile environment. It works better the more goodies
3248the environment provides. For example if you try in the CPAN shell
3249
3250  install Bundle::CPAN
3251
3252or
3253
3254  install Bundle::CPANxxl
3255
3256you will find the shell more convenient than the bare shell before.
3257
3258If you have a local mirror of CPAN and can access all files with
3259"file:" URLs, then you only need a perl later than perl5.003 to run
3260this module. Otherwise Net::FTP is strongly recommended. LWP may be
3261required for non-UNIX systems, or if your nearest CPAN site is
3262associated with a URL that is not C<ftp:>.
3263
3264If you have neither Net::FTP nor LWP, there is a fallback mechanism
3265implemented for an external ftp command or for an external lynx
3266command.
3267
3268=head1 UTILITIES
3269
3270=head2 Finding packages and VERSION
3271
3272This module presumes that all packages on CPAN
3273
3274=over 2
3275
3276=item *
3277
3278declare their $VERSION variable in an easy to parse manner. This
3279prerequisite can hardly be relaxed because it consumes far too much
3280memory to load all packages into the running program just to determine
3281the $VERSION variable. Currently all programs that are dealing with
3282version use something like this
3283
3284    perl -MExtUtils::MakeMaker -le \
3285        'print MM->parse_version(shift)' filename
3286
3287If you are author of a package and wonder if your $VERSION can be
3288parsed, please try the above method.
3289
3290=item *
3291
3292come as compressed or gzipped tarfiles or as zip files and contain a
3293C<Makefile.PL> or C<Build.PL> (well, we try to handle a bit more, but
3294with little enthusiasm).
3295
3296=back
3297
3298=head2 Debugging
3299
3300Debugging this module is more than a bit complex due to interference from
3301the software producing the indices on CPAN, the mirroring process on CPAN,
3302packaging, configuration, synchronicity, and even (gasp!) due to bugs
3303within the CPAN.pm module itself.
3304
3305For debugging the code of CPAN.pm itself in interactive mode, some
3306debugging aid can be turned on for most packages within
3307CPAN.pm with one of
3308
3309=over 2
3310
3311=item o debug package...
3312
3313sets debug mode for packages.
3314
3315=item o debug -package...
3316
3317unsets debug mode for packages.
3318
3319=item o debug all
3320
3321turns debugging on for all packages.
3322
3323=item o debug number
3324
3325=back
3326
3327which sets the debugging packages directly. Note that C<o debug 0>
3328turns debugging off.
3329
3330What seems a successful strategy is the combination of C<reload
3331cpan> and the debugging switches. Add a new debug statement while
3332running in the shell and then issue a C<reload cpan> and see the new
3333debugging messages immediately without losing the current context.
3334
3335C<o debug> without an argument lists the valid package names and the
3336current set of packages in debugging mode. C<o debug> has built-in
3337completion support.
3338
3339For debugging of CPAN data there is the C<dump> command which takes
3340the same arguments as make/test/install and outputs each object's
3341Data::Dumper dump. If an argument looks like a perl variable and
3342contains one of C<$>, C<@> or C<%>, it is eval()ed and fed to
3343Data::Dumper directly.
3344
3345=head2 Floppy, Zip, Offline Mode
3346
3347CPAN.pm works nicely without network access, too. If you maintain machines
3348that are not networked at all, you should consider working with C<file:>
3349URLs. You'll have to collect your modules somewhere first. So
3350you might use CPAN.pm to put together all you need on a networked
3351machine. Then copy the $CPAN::Config->{keep_source_where} (but not
3352$CPAN::Config->{build_dir}) directory on a floppy. This floppy is kind
3353of a personal CPAN. CPAN.pm on the non-networked machines works nicely
3354with this floppy. See also below the paragraph about CD-ROM support.
3355
3356=head2 Basic Utilities for Programmers
3357
3358=over 2
3359
3360=item has_inst($module)
3361
3362Returns true if the module is installed. Used to load all modules into
3363the running CPAN.pm that are considered optional. The config variable
3364C<dontload_list> intercepts the C<has_inst()> call such
3365that an optional module is not loaded despite being available. For
3366example, the following command will prevent C<YAML.pm> from being
3367loaded:
3368
3369    cpan> o conf dontload_list push YAML
3370
3371See the source for details.
3372
3373=item has_usable($module)
3374
3375Returns true if the module is installed and in a usable state. Only
3376useful for a handful of modules that are used internally. See the
3377source for details.
3378
3379=item instance($module)
3380
3381The constructor for all the singletons used to represent modules,
3382distributions, authors, and bundles. If the object already exists, this
3383method returns the object; otherwise, it calls the constructor.
3384
3385=back
3386
3387=head1 SECURITY
3388
3389There's no strong security layer in CPAN.pm. CPAN.pm helps you to
3390install foreign, unmasked, unsigned code on your machine. We compare
3391to a checksum that comes from the net just as the distribution file
3392itself. But we try to make it easy to add security on demand:
3393
3394=head2 Cryptographically signed modules
3395
3396Since release 1.77, CPAN.pm has been able to verify cryptographically
3397signed module distributions using Module::Signature.  The CPAN modules
3398can be signed by their authors, thus giving more security.  The simple
3399unsigned MD5 checksums that were used before by CPAN protect mainly
3400against accidental file corruption.
3401
3402You will need to have Module::Signature installed, which in turn
3403requires that you have at least one of Crypt::OpenPGP module or the
3404command-line F<gpg> tool installed.
3405
3406You will also need to be able to connect over the Internet to the public
3407key servers, like pgp.mit.edu, and their port 11731 (the HKP protocol).
3408
3409The configuration parameter check_sigs is there to turn signature
3410checking on or off.
3411
3412=head1 EXPORT
3413
3414Most functions in package CPAN are exported by default. The reason
3415for this is that the primary use is intended for the cpan shell or for
3416one-liners.
3417
3418=head1 ENVIRONMENT
3419
3420When the CPAN shell enters a subshell via the look command, it sets
3421the environment CPAN_SHELL_LEVEL to 1, or increments that variable if it is
3422already set.
3423
3424When CPAN runs, it sets the environment variable PERL5_CPAN_IS_RUNNING
3425to the ID of the running process. It also sets
3426PERL5_CPANPLUS_IS_RUNNING to prevent runaway processes which could
3427happen with older versions of Module::Install.
3428
3429When running C<perl Makefile.PL>, the environment variable
3430C<PERL5_CPAN_IS_EXECUTING> is set to the full path of the
3431C<Makefile.PL> that is being executed. This prevents runaway processes
3432with newer versions of Module::Install.
3433
3434When the config variable ftp_passive is set, all downloads will be run
3435with the environment variable FTP_PASSIVE set to this value. This is
3436in general a good idea as it influences both Net::FTP and LWP based
3437connections. The same effect can be achieved by starting the cpan
3438shell with this environment variable set. For Net::FTP alone, one can
3439also always set passive mode by running libnetcfg.
3440
3441=head1 POPULATE AN INSTALLATION WITH LOTS OF MODULES
3442
3443Populating a freshly installed perl with one's favorite modules is pretty
3444easy if you maintain a private bundle definition file. To get a useful
3445blueprint of a bundle definition file, the command autobundle can be used
3446on the CPAN shell command line. This command writes a bundle definition
3447file for all modules installed for the current perl
3448interpreter. It's recommended to run this command once only, and from then
3449on maintain the file manually under a private name, say
3450Bundle/my_bundle.pm. With a clever bundle file you can then simply say
3451
3452    cpan> install Bundle::my_bundle
3453
3454then answer a few questions and go out for coffee (possibly
3455even in a different city).
3456
3457Maintaining a bundle definition file means keeping track of two
3458things: dependencies and interactivity. CPAN.pm sometimes fails on
3459calculating dependencies because not all modules define all MakeMaker
3460attributes correctly, so a bundle definition file should specify
3461prerequisites as early as possible. On the other hand, it's
3462annoying that so many distributions need some interactive configuring. So
3463what you can try to accomplish in your private bundle file is to have the
3464packages that need to be configured early in the file and the gentle
3465ones later, so you can go out for coffee after a few minutes and leave CPAN.pm
3466to churn away unattended.
3467
3468=head1 WORKING WITH CPAN.pm BEHIND FIREWALLS
3469
3470Thanks to Graham Barr for contributing the following paragraphs about
3471the interaction between perl, and various firewall configurations. For
3472further information on firewalls, it is recommended to consult the
3473documentation that comes with the I<ncftp> program. If you are unable to
3474go through the firewall with a simple Perl setup, it is likely
3475that you can configure I<ncftp> so that it works through your firewall.
3476
3477=head2 Three basic types of firewalls
3478
3479Firewalls can be categorized into three basic types.
3480
3481=over 4
3482
3483=item http firewall
3484
3485This is when the firewall machine runs a web server, and to access the
3486outside world, you must do so via that web server. If you set environment
3487variables like http_proxy or ftp_proxy to values beginning with http://,
3488or in your web browser you've proxy information set, then you know
3489you are running behind an http firewall.
3490
3491To access servers outside these types of firewalls with perl (even for
3492ftp), you need LWP or HTTP::Tiny.
3493
3494=item ftp firewall
3495
3496This where the firewall machine runs an ftp server. This kind of
3497firewall will only let you access ftp servers outside the firewall.
3498This is usually done by connecting to the firewall with ftp, then
3499entering a username like "user@outside.host.com".
3500
3501To access servers outside these type of firewalls with perl, you
3502need Net::FTP.
3503
3504=item One-way visibility
3505
3506One-way visibility means these firewalls try to make themselves
3507invisible to users inside the firewall. An FTP data connection is
3508normally created by sending your IP address to the remote server and then
3509listening for the return connection. But the remote server will not be able to
3510connect to you because of the firewall. For these types of firewall,
3511FTP connections need to be done in a passive mode.
3512
3513There are two that I can think off.
3514
3515=over 4
3516
3517=item SOCKS
3518
3519If you are using a SOCKS firewall, you will need to compile perl and link
3520it with the SOCKS library.  This is what is normally called a 'socksified'
3521perl. With this executable you will be able to connect to servers outside
3522the firewall as if it were not there.
3523
3524=item IP Masquerade
3525
3526This is when the firewall implemented in the kernel (via NAT, or networking
3527address translation), it allows you to hide a complete network behind one
3528IP address. With this firewall no special compiling is needed as you can
3529access hosts directly.
3530
3531For accessing ftp servers behind such firewalls you usually need to
3532set the environment variable C<FTP_PASSIVE> or the config variable
3533ftp_passive to a true value.
3534
3535=back
3536
3537=back
3538
3539=head2 Configuring lynx or ncftp for going through a firewall
3540
3541If you can go through your firewall with e.g. lynx, presumably with a
3542command such as
3543
3544    /usr/local/bin/lynx -pscott:tiger
3545
3546then you would configure CPAN.pm with the command
3547
3548    o conf lynx "/usr/local/bin/lynx -pscott:tiger"
3549
3550That's all. Similarly for ncftp or ftp, you would configure something
3551like
3552
3553    o conf ncftp "/usr/bin/ncftp -f /home/scott/ncftplogin.cfg"
3554
3555Your mileage may vary...
3556
3557=head1 FAQ
3558
3559=over 4
3560
3561=item 1)
3562
3563I installed a new version of module X but CPAN keeps saying,
3564I have the old version installed
3565
3566Probably you B<do> have the old version installed. This can
3567happen if a module installs itself into a different directory in the
3568@INC path than it was previously installed. This is not really a
3569CPAN.pm problem, you would have the same problem when installing the
3570module manually. The easiest way to prevent this behaviour is to add
3571the argument C<UNINST=1> to the C<make install> call, and that is why
3572many people add this argument permanently by configuring
3573
3574  o conf make_install_arg UNINST=1
3575
3576=item 2)
3577
3578So why is UNINST=1 not the default?
3579
3580Because there are people who have their precise expectations about who
3581may install where in the @INC path and who uses which @INC array. In
3582fine tuned environments C<UNINST=1> can cause damage.
3583
3584=item 3)
3585
3586I want to clean up my mess, and install a new perl along with
3587all modules I have. How do I go about it?
3588
3589Run the autobundle command for your old perl and optionally rename the
3590resulting bundle file (e.g. Bundle/mybundle.pm), install the new perl
3591with the Configure option prefix, e.g.
3592
3593    ./Configure -Dprefix=/usr/local/perl-5.6.78.9
3594
3595Install the bundle file you produced in the first step with something like
3596
3597    cpan> install Bundle::mybundle
3598
3599and you're done.
3600
3601=item 4)
3602
3603When I install bundles or multiple modules with one command
3604there is too much output to keep track of.
3605
3606You may want to configure something like
3607
3608  o conf make_arg "| tee -ai /root/.cpan/logs/make.out"
3609  o conf make_install_arg "| tee -ai /root/.cpan/logs/make_install.out"
3610
3611so that STDOUT is captured in a file for later inspection.
3612
3613
3614=item 5)
3615
3616I am not root, how can I install a module in a personal directory?
3617
3618As of CPAN 1.9463, if you do not have permission to write the default perl
3619library directories, CPAN's configuration process will ask you whether
3620you want to bootstrap <local::lib>, which makes keeping a personal
3621perl library directory easy.
3622
3623Another thing you should bear in mind is that the UNINST parameter can
3624be dangerous when you are installing into a private area because you
3625might accidentally remove modules that other people depend on that are
3626not using the private area.
3627
3628=item 6)
3629
3630How to get a package, unwrap it, and make a change before building it?
3631
3632Have a look at the C<look> (!) command.
3633
3634=item 7)
3635
3636I installed a Bundle and had a couple of fails. When I
3637retried, everything resolved nicely. Can this be fixed to work
3638on first try?
3639
3640The reason for this is that CPAN does not know the dependencies of all
3641modules when it starts out. To decide about the additional items to
3642install, it just uses data found in the META.yml file or the generated
3643Makefile. An undetected missing piece breaks the process. But it may
3644well be that your Bundle installs some prerequisite later than some
3645depending item and thus your second try is able to resolve everything.
3646Please note, CPAN.pm does not know the dependency tree in advance and
3647cannot sort the queue of things to install in a topologically correct
3648order. It resolves perfectly well B<if> all modules declare the
3649prerequisites correctly with the PREREQ_PM attribute to MakeMaker or
3650the C<requires> stanza of Module::Build. For bundles which fail and
3651you need to install often, it is recommended to sort the Bundle
3652definition file manually.
3653
3654=item 8)
3655
3656In our intranet, we have many modules for internal use. How
3657can I integrate these modules with CPAN.pm but without uploading
3658the modules to CPAN?
3659
3660Have a look at the CPAN::Site module.
3661
3662=item 9)
3663
3664When I run CPAN's shell, I get an error message about things in my
3665C</etc/inputrc> (or C<~/.inputrc>) file.
3666
3667These are readline issues and can only be fixed by studying readline
3668configuration on your architecture and adjusting the referenced file
3669accordingly. Please make a backup of the C</etc/inputrc> or C<~/.inputrc>
3670and edit them. Quite often harmless changes like uppercasing or
3671lowercasing some arguments solves the problem.
3672
3673=item 10)
3674
3675Some authors have strange characters in their names.
3676
3677Internally CPAN.pm uses the UTF-8 charset. If your terminal is
3678expecting ISO-8859-1 charset, a converter can be activated by setting
3679term_is_latin to a true value in your config file. One way of doing so
3680would be
3681
3682    cpan> o conf term_is_latin 1
3683
3684If other charset support is needed, please file a bug report against
3685CPAN.pm at rt.cpan.org and describe your needs. Maybe we can extend
3686the support or maybe UTF-8 terminals become widely available.
3687
3688Note: this config variable is deprecated and will be removed in a
3689future version of CPAN.pm. It will be replaced with the conventions
3690around the family of $LANG and $LC_* environment variables.
3691
3692=item 11)
3693
3694When an install fails for some reason and then I correct the error
3695condition and retry, CPAN.pm refuses to install the module, saying
3696C<Already tried without success>.
3697
3698Use the force pragma like so
3699
3700  force install Foo::Bar
3701
3702Or you can use
3703
3704  look Foo::Bar
3705
3706and then C<make install> directly in the subshell.
3707
3708=item 12)
3709
3710How do I install a "DEVELOPER RELEASE" of a module?
3711
3712By default, CPAN will install the latest non-developer release of a
3713module. If you want to install a dev release, you have to specify the
3714partial path starting with the author id to the tarball you wish to
3715install, like so:
3716
3717    cpan> install KWILLIAMS/Module-Build-0.27_07.tar.gz
3718
3719Note that you can use the C<ls> command to get this path listed.
3720
3721=item 13)
3722
3723How do I install a module and all its dependencies from the commandline,
3724without being prompted for anything, despite my CPAN configuration
3725(or lack thereof)?
3726
3727CPAN uses ExtUtils::MakeMaker's prompt() function to ask its questions, so
3728if you set the PERL_MM_USE_DEFAULT environment variable, you shouldn't be
3729asked any questions at all (assuming the modules you are installing are
3730nice about obeying that variable as well):
3731
3732    % PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'
3733
3734=item 14)
3735
3736How do I create a Module::Build based Build.PL derived from an
3737ExtUtils::MakeMaker focused Makefile.PL?
3738
3739http://search.cpan.org/dist/Module-Build-Convert/
3740
3741=item 15)
3742
3743I'm frequently irritated with the CPAN shell's inability to help me
3744select a good mirror.
3745
3746CPAN can now help you select a "good" mirror, based on which ones have the
3747lowest 'ping' round-trip times.  From the shell, use the command 'o conf init
3748urllist' and allow CPAN to automatically select mirrors for you.
3749
3750Beyond that help, the urllist config parameter is yours. You can add and remove
3751sites at will. You should find out which sites have the best up-to-dateness,
3752bandwidth, reliability, etc. and are topologically close to you. Some people
3753prefer fast downloads, others up-to-dateness, others reliability.  You decide
3754which to try in which order.
3755
3756Henk P. Penning maintains a site that collects data about CPAN sites:
3757
3758  http://www.cs.uu.nl/people/henkp/mirmon/cpan.html
3759
3760Also, feel free to play with experimental features. Run
3761
3762  o conf init randomize_urllist ftpstats_period ftpstats_size
3763
3764and choose your favorite parameters. After a few downloads running the
3765C<hosts> command will probably assist you in choosing the best mirror
3766sites.
3767
3768=item 16)
3769
3770Why do I get asked the same questions every time I start the shell?
3771
3772You can make your configuration changes permanent by calling the
3773command C<o conf commit>. Alternatively set the C<auto_commit>
3774variable to true by running C<o conf init auto_commit> and answering
3775the following question with yes.
3776
3777=item 17)
3778
3779Older versions of CPAN.pm had the original root directory of all
3780tarballs in the build directory. Now there are always random
3781characters appended to these directory names. Why was this done?
3782
3783The random characters are provided by File::Temp and ensure that each
3784module's individual build directory is unique. This makes running
3785CPAN.pm in concurrent processes simultaneously safe.
3786
3787=item 18)
3788
3789Speaking of the build directory. Do I have to clean it up myself?
3790
3791You have the choice to set the config variable C<scan_cache> to
3792C<never>. Then you must clean it up yourself. The other possible
3793values, C<atstart> and C<atexit> clean up the build directory when you
3794start or exit the CPAN shell, respectively. If you never start up the
3795CPAN shell, you probably also have to clean up the build directory
3796yourself.
3797
3798=back
3799
3800=head1 COMPATIBILITY
3801
3802=head2 OLD PERL VERSIONS
3803
3804CPAN.pm is regularly tested to run under 5.005 and assorted
3805newer versions. It is getting more and more difficult to get the
3806minimal prerequisites working on older perls. It is close to
3807impossible to get the whole Bundle::CPAN working there. If you're in
3808the position to have only these old versions, be advised that CPAN is
3809designed to work fine without the Bundle::CPAN installed.
3810
3811To get things going, note that GBARR/Scalar-List-Utils-1.18.tar.gz is
3812compatible with ancient perls and that File::Temp is listed as a
3813prerequisite but CPAN has reasonable workarounds if it is missing.
3814
3815=head2 CPANPLUS
3816
3817This module and its competitor, the CPANPLUS module, are both much
3818cooler than the other. CPAN.pm is older. CPANPLUS was designed to be
3819more modular, but it was never intended to be compatible with CPAN.pm.
3820
3821=head2 CPANMINUS
3822
3823In the year 2010 App::cpanminus was launched as a new approach to a
3824cpan shell with a considerably smaller footprint. Very cool stuff.
3825
3826=head1 SECURITY ADVICE
3827
3828This software enables you to upgrade software on your computer and so
3829is inherently dangerous because the newly installed software may
3830contain bugs and may alter the way your computer works or even make it
3831unusable. Please consider backing up your data before every upgrade.
3832
3833=head1 BUGS
3834
3835Please report bugs via L<http://rt.cpan.org/>
3836
3837Before submitting a bug, please make sure that the traditional method
3838of building a Perl module package from a shell by following the
3839installation instructions of that package still works in your
3840environment.
3841
3842=head1 AUTHOR
3843
3844Andreas Koenig C<< <andk@cpan.org> >>
3845
3846=head1 LICENSE
3847
3848This program is free software; you can redistribute it and/or
3849modify it under the same terms as Perl itself.
3850
3851See L<http://www.perl.com/perl/misc/Artistic.html>
3852
3853=head1 TRANSLATIONS
3854
3855Kawai,Takanori provides a Japanese translation of a very old version
3856of this manpage at
3857L<http://homepage3.nifty.com/hippo2000/perltips/CPAN.htm>
3858
3859=head1 SEE ALSO
3860
3861Many people enter the CPAN shell by running the L<cpan> utility
3862program which is installed in the same directory as perl itself. So if
3863you have this directory in your PATH variable (or some equivalent in
3864your operating system) then typing C<cpan> in a console window will
3865work for you as well. Above that the utility provides several
3866commandline shortcuts.
3867
3868melezhik (Alexey) sent me a link where he published a chef recipe to
3869work with CPAN.pm: http://community.opscode.com/cookbooks/cpan.
3870
3871
3872=cut
3873