1 # -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
2 package CPAN::Mirrored::By;
5 $VERSION = sprintf "%.6f", substr(q$Rev: 742 $,4)/1000000 + 5.4;
11 sub continent { shift->[0] }
12 sub country { shift->[1] }
13 sub url { shift->[2] }
15 package CPAN::FirstTime;
18 use ExtUtils::MakeMaker ();
20 use File::Basename ();
23 use vars qw($VERSION);
24 $VERSION = sprintf "%.6f", substr(q$Rev: 742 $,4)/1000000 + 5.4;
28 CPAN::FirstTime - Utility for CPAN::Config file Initialization
32 CPAN::FirstTime::init()
36 The init routine asks a few questions and writes a CPAN/Config.pm or
37 CPAN/MyConfig.pm file (depending on what it is currently using).
42 use vars qw( %prompts );
45 my($configpm, %args) = @_;
47 # extra arg in 'o conf init make' selects only $item =~ /make/
48 my $matcher = $args{args} && @{$args{args}} ? $args{args}[0] : '';
49 CPAN->debug("matcher[$matcher]") if $CPAN::DEBUG;
51 unless ($CPAN::VERSION) {
54 require CPAN::HandleConfig;
55 CPAN::HandleConfig::require_myconfig_or_config();
67 print $prompts{manual_config};
71 local *_real_prompt = \&ExtUtils::MakeMaker::prompt;
72 if ( $args{autoconfig} ) {
75 $manual_conf = prompt("Are you ready for manual configuration?", "yes");
79 if ($manual_conf =~ /^y/i) {
83 $CPAN::Config->{urllist} ||= [];
86 # prototype should match that of &MakeMaker::prompt
87 *_real_prompt = sub ($;$) {
89 my($ret) = defined $a ? $a : "";
90 $CPAN::Frontend->myprint(sprintf qq{%s [%s]\n\n}, $q, $ret);
91 eval { require Time::HiRes };
93 Time::HiRes::sleep(0.1);
100 $CPAN::Frontend->myprint($prompts{config_intro})
101 if !$matcher or 'config_intro' =~ /$matcher/;
103 my $cpan_home = $CPAN::Config->{cpan_home}
104 || File::Spec->catdir($ENV{HOME}, ".cpan");
107 if (!$matcher or 'config_intro' =~ /$matcher/) {
108 $CPAN::Frontend->myprint(qq{
110 I see you already have a directory
112 Shall we use it as the general CPAN build and cache directory?
117 # no cpan-home, must prompt and get one
118 $CPAN::Frontend->myprint($prompts{cpan_home_where});
121 $default = $cpan_home;
122 while ($ans = prompt("CPAN build and cache directory?",$default)) {
123 unless (File::Spec->file_name_is_absolute($ans)) {
125 my $cwd = Cwd::cwd();
126 my $absans = File::Spec->catdir($cwd,$ans);
127 warn "The path '$ans' is not an absolute path. Please specify an absolute path\n";
131 eval { File::Path::mkpath($ans); }; # dies if it can't
133 warn "Couldn't create directory $ans.\nPlease retry.\n";
136 if (-d $ans && -w _) {
139 warn "Couldn't find directory $ans\n"
140 . "or directory is not writable. Please retry.\n";
143 $CPAN::Config->{cpan_home} = $ans;
145 $CPAN::Frontend->myprint($prompts{keep_source_where});
147 $CPAN::Config->{keep_source_where}
148 = File::Spec->catdir($CPAN::Config->{cpan_home},"sources");
150 $CPAN::Config->{build_dir}
151 = File::Spec->catdir($CPAN::Config->{cpan_home},"build");
154 # Cache size, Index expire
157 $CPAN::Frontend->myprint($prompts{build_cache_intro})
158 if !$matcher or 'build_cache_intro' =~ /$matcher/;
160 # large enough to build large dists like Tk
161 my_dflt_prompt(build_cache => 100, $matcher);
163 # XXX This the time when we refetch the index files (in days)
164 $CPAN::Config->{'index_expire'} = 1;
166 $CPAN::Frontend->myprint($prompts{scan_cache_intro})
167 if !$matcher or 'build_cache_intro' =~ /$matcher/;
169 my_prompt_loop(scan_cache => 'atstart', $matcher, 'atstart|never');
175 if (!$matcher or 'build_cache_intro' =~ /$matcher/) {
177 $CPAN::Frontend->myprint($prompts{cache_metadata});
179 defined($default = $CPAN::Config->{cache_metadata}) or $default = 1;
181 $ans = prompt("Cache metadata (yes/no)?", ($default ? 'yes' : 'no'));
182 } while ($ans !~ /^[yn]/i);
183 $CPAN::Config->{cache_metadata} = ($ans =~ /^y/i ? 1 : 0);
189 $CPAN::Frontend->myprint($prompts{term_is_latin})
190 if !$matcher or 'term_is_latin' =~ /$matcher/;
192 defined($default = $CPAN::Config->{term_is_latin}) or $default = 1;
194 $ans = prompt("Your terminal expects ISO-8859-1 (yes/no)?",
195 ($default ? 'yes' : 'no'));
196 } while ($ans !~ /^[yn]/i);
197 $CPAN::Config->{term_is_latin} = ($ans =~ /^y/i ? 1 : 0);
200 # save history in file 'histfile'
203 $CPAN::Frontend->myprint($prompts{histfile_intro});
205 defined($default = $CPAN::Config->{histfile}) or
206 $default = File::Spec->catfile($CPAN::Config->{cpan_home},"histfile");
207 $ans = prompt("File to save your history?", $default);
208 $CPAN::Config->{histfile} = $ans;
210 if ($CPAN::Config->{histfile}) {
211 defined($default = $CPAN::Config->{histsize}) or $default = 100;
212 $ans = prompt("Number of lines to save?", $default);
213 $CPAN::Config->{histsize} = $ans;
217 # do an ls on the m or the d command
219 $CPAN::Frontend->myprint($prompts{show_upload_date_intro});
221 defined($default = $CPAN::Config->{show_upload_date}) or
223 $ans = prompt("Always try to show upload date with 'd' and 'm' command (yes/no)?",
224 ($default ? 'yes' : 'no'));
225 $CPAN::Config->{show_upload_date} = ($ans =~ /^[y1]/i ? 1 : 0);
227 #my_prompt_loop(show_upload_date => 'n', $matcher,
228 #'follow|ask|ignore');
231 # prerequisites_policy
232 # Do we follow PREREQ_PM?
235 $CPAN::Frontend->myprint($prompts{prerequisites_policy_intro})
236 if !$matcher or 'prerequisites_policy_intro' =~ /$matcher/;
238 my_prompt_loop(prerequisites_policy => 'ask', $matcher,
239 'follow|ask|ignore');
245 $CPAN::Frontend->myprint($prompts{check_sigs_intro});
247 defined($default = $CPAN::Config->{check_sigs}) or
249 $ans = prompt($prompts{check_sigs},
250 ($default ? 'yes' : 'no'));
251 $CPAN::Config->{check_sigs} = ($ans =~ /^y/i ? 1 : 0);
257 $CPAN::Frontend->myprint($prompts{external_progs})
258 if !$matcher or 'external_progs' =~ /$matcher/;
261 local $^W if $^O eq 'MacOS';
262 my(@path) = split /$Config{'path_sep'}/, $ENV{'PATH'};
263 local $^W = $old_warn;
265 for $progname (qw/bzip2 gzip tar unzip make
266 curl lynx wget ncftpget ncftp ftp
269 if ($^O eq 'MacOS') {
270 $CPAN::Config->{$progname} = 'not_here';
273 next if $matcher && $progname !~ /$matcher/;
275 my $progcall = $progname;
276 # we don't need ncftp if we have ncftpget
277 next if $progname eq "ncftp" && $CPAN::Config->{ncftpget} gt " ";
278 my $path = $CPAN::Config->{$progname}
279 || $Config::Config{$progname}
281 if (File::Spec->file_name_is_absolute($path)) {
282 # testing existence is not good enough, some have these exe
285 # warn "Warning: configured $path does not exist\n" unless -e $path;
287 } elsif ($path =~ /^\s+$/) {
288 # preserve disabled programs
294 $progcall = $Config::Config{$progname} if $Config::Config{$progname};
297 $path ||= find_exe($progcall,[@path]);
298 $CPAN::Frontend->mywarn("Warning: $progcall not found in PATH\n") unless
299 $path; # not -e $path, because find_exe already checked that
300 $ans = prompt("Where is your $progname program?",$path) || $path;
301 $CPAN::Config->{$progname} = $ans;
303 my $path = $CPAN::Config->{'pager'} ||
304 $ENV{PAGER} || find_exe("less",[@path]) ||
305 find_exe("more",[@path]) || ($^O eq 'MacOS' ? $ENV{EDITOR} : 0 )
307 $ans = prompt("What is your favorite pager program?",$path);
308 $CPAN::Config->{'pager'} = $ans;
309 $path = $CPAN::Config->{'shell'};
310 if (File::Spec->file_name_is_absolute($path)) {
311 warn "Warning: configured $path does not exist\n" unless -e $path;
314 $path ||= $ENV{SHELL};
315 $path ||= $ENV{COMSPEC} if $^O eq "MSWin32";
316 if ($^O eq 'MacOS') {
317 $CPAN::Config->{'shell'} = 'not_here';
319 $path =~ s,\\,/,g if $^O eq 'os2'; # Cosmetic only
320 $ans = prompt("What is your favorite shell?",$path);
321 $CPAN::Config->{'shell'} = $ans;
325 # Arguments to make etc.
328 $CPAN::Frontend->myprint($prompts{prefer_installer_intro})
329 if !$matcher or 'prerequisites_policy_intro' =~ /$matcher/;
331 my_prompt_loop(prefer_installer => 'EUMM', $matcher, 'MB|EUMM');
334 $CPAN::Frontend->myprint($prompts{makepl_arg_intro})
335 if !$matcher or 'makepl_arg_intro' =~ /$matcher/;
337 my_dflt_prompt(makepl_arg => "", $matcher);
339 my_dflt_prompt(make_arg => "", $matcher);
341 require CPAN::HandleConfig;
342 if (exists $CPAN::HandleConfig::keys{make_install_make_command}) {
343 # as long as Windows needs $self->_build_command, we cannot
344 # support sudo on windows :-)
345 my_dflt_prompt(make_install_make_command => $CPAN::Config->{make} || "",
349 my_dflt_prompt(make_install_arg => $CPAN::Config->{make_arg} || "",
352 $CPAN::Frontend->myprint($prompts{mbuildpl_arg_intro})
353 if !$matcher or 'mbuildpl_arg_intro' =~ /$matcher/;
355 my_dflt_prompt(mbuildpl_arg => "", $matcher);
357 my_dflt_prompt(mbuild_arg => "", $matcher);
359 if (exists $CPAN::HandleConfig::keys{mbuild_install_build_command}) {
360 # as long as Windows needs $self->_build_command, we cannot
361 # support sudo on windows :-)
362 my_dflt_prompt(mbuild_install_build_command => "./Build", $matcher);
365 my_dflt_prompt(mbuild_install_arg => "", $matcher);
371 $CPAN::Frontend->myprint($prompts{inactivity_timeout_intro})
372 if !$matcher or 'inactivity_timeout_intro' =~ /$matcher/;
374 # my_dflt_prompt(inactivity_timeout => 0);
376 $default = $CPAN::Config->{inactivity_timeout} || 0;
377 $CPAN::Config->{inactivity_timeout} =
378 prompt("Timeout for inactivity during {Makefile,Build}.PL?",$default);
382 $CPAN::Frontend->myprint($prompts{proxy_intro})
383 if !$matcher or 'proxy_intro' =~ /$matcher/;
385 for (qw/ftp_proxy http_proxy no_proxy/) {
386 next if $matcher and $_ =~ /$matcher/;
388 $default = $CPAN::Config->{$_} || $ENV{$_};
389 $CPAN::Config->{$_} = prompt("Your $_?",$default);
392 if ($CPAN::Config->{ftp_proxy} ||
393 $CPAN::Config->{http_proxy}) {
395 $default = $CPAN::Config->{proxy_user} || $CPAN::LWP::UserAgent::USER;
397 $CPAN::Frontend->myprint($prompts{proxy_user});
399 if ($CPAN::Config->{proxy_user} = prompt("Your proxy user id?",$default)) {
400 $CPAN::Frontend->myprint($prompts{proxy_pass});
402 if ($CPAN::META->has_inst("Term::ReadKey")) {
403 Term::ReadKey::ReadMode("noecho");
405 $CPAN::Frontend->myprint($prompts{password_warn});
407 $CPAN::Config->{proxy_pass} = prompt_no_strip("Your proxy password?");
408 if ($CPAN::META->has_inst("Term::ReadKey")) {
409 Term::ReadKey::ReadMode("restore");
411 $CPAN::Frontend->myprint("\n\n");
419 conf_sites() unless $fastread;
421 # We don't ask these now, the defaults are very likely OK.
422 $CPAN::Config->{inhibit_startup_message} = 0;
423 $CPAN::Config->{getcwd} = 'cwd';
424 $CPAN::Config->{ftp_passive} = 1;
425 $CPAN::Config->{term_ornaments} = 1;
427 $CPAN::Frontend->myprint("\n\n");
428 CPAN::HandleConfig->commit($configpm);
432 my ($item, $dflt, $m) = @_;
433 my $default = $CPAN::Config->{$item} || $dflt;
436 if (!$m || $item =~ /$m/) {
437 $CPAN::Config->{$item} = prompt($prompts{$item}, $default);
439 $CPAN::Config->{$item} = $default;
444 my ($item, $dflt, $m, $ok) = @_;
445 my $default = $CPAN::Config->{$item} || $dflt;
449 if (!$m || $item =~ /$m/) {
450 do { $ans = prompt($prompts{$item}, $default);
451 } until $ans =~ /$ok/;
452 $CPAN::Config->{$item} = $ans;
454 $CPAN::Config->{$item} = $default;
460 my $m = 'MIRRORED.BY';
461 my $mby = File::Spec->catfile($CPAN::Config->{keep_source_where},$m);
462 File::Path::mkpath(File::Basename::dirname($mby));
463 if (-f $mby && -f $m && -M $m < -M $mby) {
465 File::Copy::copy($m,$mby) or die "Could not update $mby: $!";
469 my $overwrite_local = 0;
470 if ($mby && -f $mby && -M _ <= 60 && -s _ > 0) {
471 my $mtime = localtime((stat _)[9]);
472 my $prompt = qq{Found $mby as of $mtime
474 I\'d use that as a database of CPAN sites. If that is OK for you,
475 please answer 'y', but if you want me to get a new database now,
476 please answer 'n' to the following question.
478 Shall I use the local database in $mby?};
479 my $ans = prompt($prompt,"y");
480 $overwrite_local = 1 unless $ans =~ /^y/i;
483 if ($overwrite_local) {
484 print qq{Trying to overwrite $mby\n};
485 $mby = CPAN::FTP->localize($m,$mby,3);
486 $overwrite_local = 0;
487 } elsif ( ! -f $mby ){
488 print qq{You have no $mby\n I\'m trying to fetch one\n};
489 $mby = CPAN::FTP->localize($m,$mby,3);
490 } elsif (-M $mby > 60 && $loopcount == 0) {
491 print qq{Your $mby is older than 60 days,\n I\'m trying to fetch one\n};
492 $mby = CPAN::FTP->localize($m,$mby,3);
494 } elsif (-s $mby == 0) {
495 print qq{You have an empty $mby,\n I\'m trying to fetch one\n};
496 $mby = CPAN::FTP->localize($m,$mby,3);
501 read_mirrored_by($mby);
508 #warn "in find_exe exe[$exe] path[@$path]";
510 my $abs = File::Spec->catfile($dir,$exe);
511 if (($abs = MM->maybe_command($abs))) {
518 my($items,$prompt,$default,$require_nonempty,$empty_warning)=@_;
526 # display, at most, 15 items at a time
527 my $limit = $#{ $items } - $pos;
528 $limit = 15 if $limit > 15;
530 # show the next $limit items, get the new position
531 $pos = display_some($items, $limit, $pos);
532 $pos = 0 if $pos >= @$items;
534 my $num = prompt($prompt,$default);
536 @nums = split (' ', $num);
537 my $i = scalar @$items;
538 (warn "invalid items entered, try again\n"), next
539 if grep (/\D/ || $_ < 1 || $_ > $i, @nums);
540 if ($require_nonempty) {
541 (warn "$empty_warning\n");
545 # a blank line continues...
554 my ($items, $limit, $pos) = @_;
557 my @displayable = @$items[$pos .. ($pos + $limit)];
558 for my $item (@displayable) {
559 printf "(%d) %s\n", ++$pos, $item;
561 printf("%d more items, hit SPACE RETURN to show them\n",
568 sub read_mirrored_by {
569 my $local = shift or return;
570 my(%all,$url,$expected_size,$default,$ans,$host,
571 $dst,$country,$continent,@location);
572 my $fh = FileHandle->new;
573 $fh->open($local) or die "Couldn't open $local: $!";
576 ($host) = /^([\w\.\-]+)/ unless defined $host;
577 next unless defined $host;
578 next unless /\s+dst_(dst|location)/;
579 /location\s+=\s+\"([^\"]+)/ and @location = (split /\s*,\s*/, $1) and
580 ($continent, $country) = @location[-1,-2];
581 $continent =~ s/\s\(.*//;
582 $continent =~ s/\W+$//; # if Jarkko doesn't know latitude/longitude
583 /dst_dst\s+=\s+\"([^\"]+)/ and $dst = $1;
584 next unless $host && $dst && $continent && $country;
585 $all{$continent}{$country}{$dst} = CPAN::Mirrored::By->new($continent,$country,$dst);
587 $dst=$continent=$country="";
590 $CPAN::Config->{urllist} ||= [];
592 if (@previous_urls = @{$CPAN::Config->{urllist}}) {
593 $CPAN::Config->{urllist} = [];
596 print $prompts{urls_intro};
598 my (@cont, $cont, %cont, @countries, @urls, %seen);
599 my $no_previous_warn =
600 "Sorry! since you don't have any existing picks, you must make a\n" .
601 "geographic selection.";
602 @cont = picklist([sort keys %all],
603 "Select your continent (or several nearby continents)",
609 foreach $cont (@cont) {
610 my @c = sort keys %{$all{$cont}};
611 @cont{@c} = map ($cont, 0..$#c);
612 @c = map ("$_ ($cont)", @c) if @cont > 1;
613 push (@countries, @c);
617 @countries = picklist (\@countries,
618 "Select your country (or several nearby countries)",
622 %seen = map (($_ => 1), @previous_urls);
623 # hmmm, should take list of defaults from CPAN::Config->{'urllist'}...
624 foreach $country (@countries) {
625 (my $bare_country = $country) =~ s/ \(.*\)//;
626 my @u = sort keys %{$all{$cont{$bare_country}}{$bare_country}};
627 @u = grep (! $seen{$_}, @u);
628 @u = map ("$_ ($bare_country)", @u)
633 push (@urls, map ("$_ (previous pick)", @previous_urls));
634 my $prompt = "Select as many URLs as you like (by number),
635 put them on one line, separated by blanks, e.g. '1 4 5'";
636 if (@previous_urls) {
637 $default = join (' ', ((scalar @urls) - (scalar @previous_urls) + 1) ..
639 $prompt .= "\n(or just hit RETURN to keep your previous picks)";
642 @urls = picklist (\@urls, $prompt, $default);
643 foreach (@urls) { s/ \(.*\)//; }
644 push @{$CPAN::Config->{urllist}}, @urls;
648 my %seen = map (($_ => 1), @{$CPAN::Config->{urllist}});
651 my $prompt = "Enter another URL or RETURN to quit:";
653 $prompt = qq{CPAN.pm needs at least one URL where it can fetch CPAN files from.
655 Please enter your CPAN site:};
657 $ans = prompt ($prompt, "");
660 $ans =~ s|/?\z|/|; # has to end with one slash
661 $ans = "file:$ans" unless $ans =~ /:/; # without a scheme is a file:
662 if ($ans =~ /^\w+:\/./) {
663 push @urls, $ans unless $seen{$ans}++;
665 printf(qq{"%s" doesn\'t look like an URL at first sight.
666 I\'ll ignore it for now.
667 You can add it to your %s
668 later if you\'re sure it\'s right.\n},
670 $INC{'CPAN/MyConfig.pm'} || $INC{'CPAN/Config.pm'} || "configuration file",
674 } while $ans || !%seen;
676 push @{$CPAN::Config->{urllist}}, @urls;
677 # xxx delete or comment these out when you're happy that it works
678 print "New set of picks:\n";
679 map { print " $_\n" } @{$CPAN::Config->{urllist}};
684 $_[0] =~ s/^\s+//; # no leading spaces
685 $_[0] =~ s/\s+\z//; # no trailing spaces
690 my $ans = _real_prompt(@_);
698 sub prompt_no_strip ($;$) {
699 return _real_prompt(@_);
709 CPAN is the world-wide archive of perl resources. It consists of about
710 300 sites that all replicate the same contents around the globe.
711 Many countries have at least one CPAN site already. The resources
712 found on CPAN are easily accessible with the CPAN.pm module. If you
713 want to use CPAN.pm, you have to configure it properly.
715 If you do NOT want to enter a dialog now, you can answer 'no' to this
716 question and I'll try to autoconfigure. (Note: you can revisit this
717 dialog anytime later by typing 'o conf init' at the cpan prompt.)
723 The following questions are intended to help you with the
724 configuration. The CPAN module needs a directory of its own to cache
725 important index files and maybe keep a temporary mirror of CPAN files.
726 This may be a site-wide directory or a personal directory.
730 # cpan_home => qq{ },
732 cpan_home_where => qq{
734 First of all, I\'d like to create this directory. Where?
738 keep_source_where => qq{
740 If you like, I can cache the source files after I build them. Doing
741 so means that, if you ever rebuild that module in the future, the
742 files will be taken from the cache. The tradeoff is that it takes up
743 space. How much space would you like to allocate to this cache? (If
744 you don\'t want me to keep a cache, answer 0.)
748 build_cache_intro => qq{
750 How big should the disk cache be for keeping the build directories
751 with all the intermediate files\?
756 "Cache size for build directory (in MB)?",
759 scan_cache_intro => qq{
761 By default, each time the CPAN module is started, cache scanning is
762 performed to keep the cache size in sync. To prevent this, answer
767 scan_cache => "Perform cache scanning (atstart or never)?",
769 cache_metadata => qq{
771 To considerably speed up the initial CPAN shell startup, it is
772 possible to use Storable to create a cache of metadata. If Storable
773 is not available, the normal index mechanism will be used.
779 The next option deals with the charset (aka character set) your
780 terminal supports. In general, CPAN is English speaking territory, so
781 the charset does not matter much, but some of the aliens out there who
782 upload their software to CPAN bear names that are outside the ASCII
783 range. If your terminal supports UTF-8, you should say no to the next
784 question. If it supports ISO-8859-1 (also known as LATIN1) then you
785 should say yes. If it supports neither, your answer does not matter
786 because you will not be able to read the names of some authors
787 anyway. If you answer no, names will be output in UTF-8.
791 histfile_intro => qq{
793 If you have one of the readline packages (Term::ReadLine::Perl,
794 Term::ReadLine::Gnu, possibly others) installed, the interactive CPAN
795 shell will have history support. The next two questions deal with the
796 filename of the history file and with its size. If you do not want to
797 set this variable, please hit SPACE RETURN to the following question.
801 histfile => qq{File to save your history?},
803 show_upload_date_intro => qq{
805 The 'd' and the 'm' command normally only show you information they
806 have in their in-memory database and thus will never connect to the
807 internet. If you set the 'show_upload_date' variable to true, 'm' and
808 'd' will additionally show you the upload date of the module or
809 distribution. Per default this feature is off because it may require a
810 net connection to get at the upload date.
815 "Always try to show upload date with 'd' and 'm' command (yes/no)?",
817 prerequisites_policy_intro => qq{
819 The CPAN module can detect when a module which you are trying to build
820 depends on prerequisites. If this happens, it can build the
821 prerequisites for you automatically ('follow'), ask you for
822 confirmation ('ask'), or just ignore them ('ignore'). Please set your
823 policy to one of the three values.
827 prerequisites_policy =>
828 "Policy on building prerequisites (follow, ask or ignore)?",
830 check_sigs_intro => qq{
832 CPAN packages can be digitally signed by authors and thus verified
833 with the security provided by strong cryptography. The exact mechanism
834 is defined in the Module::Signature module. While this is generally
835 considered a good thing, it is not always convenient to the end user
836 to install modules that are signed incorrectly or where the key of the
837 author is not available or where some prerequisite for
838 Module::Signature has a bug and so on.
840 With the check_sigs parameter you can turn signature checking on and
841 off. The default is off for now because the whole tool chain for the
842 functionality is not yet considered mature by some. The author of
843 CPAN.pm would recommend setting it to true most of the time and
844 turning it off only if it turns out to be annoying.
846 Note that if you do not have Module::Signature installed, no signature
847 checks will be performed at all.
852 qq{Always try to check and verify signatures if a SIGNATURE file is in the package
853 and Module::Signature is installed (yes/no)?},
855 external_progs => qq{
857 The CPAN module will need a few external programs to work properly.
858 Please correct me, if I guess the wrong path for a program. Don\'t
859 panic if you do not have some of them, just press ENTER for those. To
860 disable the use of a download program, you can type a space followed
865 prefer_installer_intro => qq{
867 When you have Module::Build installed and a module comes with both a
868 Makefile.PL and a Build.PL, which shall have precedence? The two
869 installer modules we have are the old and well established
870 ExtUtils::MakeMaker (for short: EUMM) understands the Makefile.PL and
871 the next generation installer Module::Build (MB) works with the
877 qq{In case you could choose, which installer would you prefer (EUMM or MB)?},
879 makepl_arg_intro => qq{
881 Every Makefile.PL is run by perl in a separate process. Likewise we
882 run \'make\' and \'make install\' in separate processes. If you have
883 any parameters \(e.g. PREFIX, LIB, UNINST or the like\) you want to
884 pass to the calls, please specify them here.
886 If you don\'t understand this question, just press ENTER.
890 Parameters for the 'perl Makefile.PL' command?
891 Typical frequently used settings:
893 PREFIX=~/perl # non-root users (please see manual for more hints)
897 make_arg => qq{Parameters for the 'make' command?
898 Typical frequently used setting:
900 -j3 # dual processor system
905 make_install_make_command => qq{Do you want to use a different make command for 'make install'?
906 Cautious people will probably prefer:
912 /path1/to/sudo -u admin_account /path2/to/make
914 or some such. Your choice: },
917 make_install_arg => qq{Parameters for the 'make install' command?
918 Typical frequently used setting:
920 UNINST=1 # to always uninstall potentially conflicting files
925 mbuildpl_arg_intro => qq{
927 The next questions deal with Module::Build support.
929 A Build.PL is run by perl in a separate process. Likewise we run
930 './Build' and './Build install' in separate processes. If you have any
931 parameters you want to pass to the calls, please specify them here.
935 mbuildpl_arg => qq{Parameters for the 'perl Build.PL' command?
936 Typical frequently used settings:
938 --install_base /home/xxx # different installation directory
942 mbuild_arg => qq{Parameters for the './Build' command?
945 --extra_linker_flags -L/usr/foo/lib # non-standard library location
950 mbuild_install_build_command => qq{Do you want to use a different command for './Build install'?
951 Sudo users will probably prefer:
957 /path1/to/sudo -u admin_account ./Build
959 or some such. Your choice: },
962 mbuild_install_arg => qq{Parameters for the './Build install' command?
963 Typical frequently used setting:
965 --uninst 1 # uninstall conflicting files
971 inactivity_timeout_intro => qq{
973 Sometimes you may wish to leave the processes run by CPAN alone
974 without caring about them. Because the Makefile.PL sometimes contains
975 question you\'re expected to answer, you can set a timer that will
976 kill a 'perl Makefile.PL' process after the specified time in seconds.
978 If you set this value to 0, these processes will wait forever. This is
979 the default and recommended setting.
983 inactivity_timeout =>
984 qq{Timeout for inactivity during {Makefile,Build}.PL? },
989 If you\'re accessing the net via proxies, you can specify them in the
990 CPAN configuration or via environment variables. The variable in
991 the \$CPAN::Config takes precedence.
997 If your proxy is an authenticating proxy, you can store your username
998 permanently. If you do not want that, just press RETURN. You will then
999 be asked for your username in every future session.
1005 Your password for the authenticating proxy can also be stored
1006 permanently on disk. If this violates your security policy, just press
1007 RETURN. You will then be asked for the password in every future
1014 Now we need to know where your favorite CPAN sites are located. Push
1015 a few sites onto the array (just in case the first on the array won\'t
1016 work). If you are mirroring CPAN to your local workstation, specify a
1019 First, pick a nearby continent and country (you can pick several of
1020 each, separated by spaces, or none if you just want to keep your
1021 existing selections). Then, you will be presented with a list of URLs
1022 of CPAN mirrors in the countries you selected, along with previously
1023 selected URLs. Select some of those URLs, or just keep the old list.
1024 Finally, you will be prompted for any extra URLs -- file:, ftp:, or
1025 http: -- that host a CPAN mirror.
1029 password_warn => qq{
1031 Warning: Term::ReadKey seems not to be available, your password will
1032 be echoed to the terminal!
1038 die "Coding error in \@prompts declaration. Odd number of elements, above"
1041 %prompts = @prompts;
1043 if (scalar(keys %prompts) != scalar(@prompts)/2) {
1047 for my $item (0..$#prompts) {
1049 die "$prompts[$item] is duplicated\n"
1050 if $already{$prompts[$item]}++;