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