X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCPANPLUS%2FConfig.pm;h=28f4fb6ef0343ed933b05ce60b43300ae0491c70;hb=cca25cf151ccf064d7c30f1d0d778e380c7c68c1;hp=1a1f4d09d79029fca633f773a012228898cb591d;hpb=c1ceaa19a46ac25e483b6f0671eb3e41d265e367;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/CPANPLUS/Config.pm b/lib/CPANPLUS/Config.pm index 1a1f4d0..28f4fb6 100644 --- a/lib/CPANPLUS/Config.pm +++ b/lib/CPANPLUS/Config.pm @@ -26,6 +26,23 @@ use Module::Load::Conditional qw[check_install]; CPANPLUS::Config +=head1 SYNOPSIS + + ### conf object via CPANPLUS::Backend; + $cb = CPANPLUS::Backend->new; + $conf = $cb->configure_object; + + ### or as a standalone object + $conf = CPANPLUS::Configure->new; + + ### values in 'conf' section + $verbose = $conf->get_conf( 'verbose' ); + $conf->set_conf( verbose => 1 ); + + ### values in 'program' section + $editor = $conf->get_program( 'editor' ); + $conf->set_program( editor => '/bin/vi' ); + =head1 DESCRIPTION This module contains defaults and heuristics for configuration @@ -54,7 +71,8 @@ my $Conf = { 'stored' => 'sourcefiles', 'dslip' => '03modlist.data.gz', 'update' => '86400', - 'mod' => '02packages.details.txt.gz' + 'mod' => '02packages.details.txt.gz', + 'custom_index' => 'packages.txt', }, '_build' => { 'plugins' => 'plugins', @@ -65,6 +83,7 @@ my $Conf = { 'autobundle_prefix' => 'Snapshot', 'autdir' => 'authors', 'install_log_dir' => 'install-logs', + 'custom_sources' => 'custom-sources', 'sanity_check' => 1, }, '_mirror' => { @@ -132,7 +151,7 @@ are run interactively or not. Defaults to 'true'. =item base -The directory CPANPLUS keeps all it's build and state information in. +The directory CPANPLUS keeps all its build and state information in. Defaults to ~/.cpanplus. =cut @@ -195,6 +214,20 @@ when sending emails. Defaults to an C address. =cut $Conf->{'conf'}->{'email'} = DEFAULT_EMAIL; + +=item enable_custom_sources + +Boolean flag indicating whether custom sources should be enabled or +not. See the C in C for +details on how to use them. + +Defaults to C + +=cut + + ### this addresses #32248 which requests a possibillity to + ### turn off custom sources + $Conf->{'conf'}->{'enable_custom_sources'} = 1; =item extractdir @@ -358,7 +391,11 @@ installed, 'false' otherwise. =cut $Conf->{'conf'}->{'signature'} = do { - (can_run('gpg') || check_install(module => 'Crypt::OpenPGP')) ?1:0 }; + check_install( module => 'Module::Signature', version => '0.06' ) + and ( can_run('gpg') || + check_install(module => 'Crypt::OpenPGP') + ); + } ? 1 : 0; =item skiptest @@ -413,6 +450,29 @@ a module using the interactive shell. Defaults to 'true'. $Conf->{'conf'}->{'write_install_logs'} = 1; +=item source_engine + +Class to use as the source engine, which is generally a subclass of +C. Default to C. + +=cut + + $Conf->{'conf'}->{'source_engine'} = DEFAULT_SOURCE_ENGINE; + +=item cpantest_reporter_args + +A hashref of key => value pairs that are passed to the constructor +of C. If you'd want to enable TLS for example, you'd +set it to: + + { transport => 'Net::SMTP::TLS', + transport_args => [ User => 'Joe', Password => '123' ], + } + +=cut + + $Conf->{'conf'}->{'cpantest_reporter_args'} = {}; + =back =head2 Section 'program' @@ -427,7 +487,7 @@ a module using the interactive shell. Defaults to 'true'. =item editor A string holding the path to your editor of choice. Defaults to your -$ENV{EDITOR}, $ENV{VISIUAL}, 'vi' or 'pico' programs, in that order. +$ENV{EDITOR}, $ENV{VISUAL}, 'vi' or 'pico' programs, in that order. =cut @@ -480,18 +540,44 @@ remains empty if you do not require super user permissiosn to install. =cut $Conf->{'program'}->{'sudo'} = do { - $> # check for all install dirs! - # installsiteman3dir is a 5.8'ism.. don't check - # it on 5.6.x... - ? ( -w $Config{'installsitelib'} && - ( defined $Config{'installsiteman3dir'} && - -w $Config{'installsiteman3dir'} - ) && - -w $Config{'installsitebin'} - ? undef - : can_run('sudo') - ) - : can_run('sudo') + ### let's assume you dont need sudo, + ### unless one of the below criteria tells us otherwise + my $sudo = undef; + + ### you're a normal user, you might need sudo + if( $> ) { + + ### check for all install dirs! + ### you have write permissions to the installdir, + ### you don't need sudo + if( -w $Config{'installsitelib'} && -w $Config{'installsitebin'} ) { + + ### installsiteman3dir is a 5.8'ism.. don't check + ### it on 5.6.x... + if( defined $Config{'installsiteman3dir'} ) { + $sudo = -w $Config{'installsiteman3dir'} + ? undef + : can_run('sudo'); + } else { + $sudo = undef; + } + + ### you have PERL_MM_OPT set to some alternate + ### install place. You probably have write permissions + ### to that + } elsif ( $ENV{'PERL_MM_OPT'} and + $ENV{'PERL_MM_OPT'} =~ /INSTALL|LIB|PREFIX/ + ) { + $sudo = undef; + + ### you probably don't have write permissions + } else { + $sudo = can_run('sudo'); + } + } + + ### and return the value + $sudo; }; =item perlwrapper @@ -517,20 +603,25 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. ? ($name.$ver, $name) : ($name, $name.$ver); }; - + + ### patch from Steve Hay Fri 29 Jun 2007 14:26:02 GMT+02:00 + ### Msg-Id: <4684FA5A.7030506@uk.radan.com> + ### look for files with a ".bat" extension as well on Win32 + @bins = map { $_, "$_.bat" } @bins if $^O eq 'MSWin32'; + my $path; BIN: for my $bin (@bins) { ### parallel to your cpanp/cpanp-boxed my $maybe = File::Spec->rel2abs( - File::Spec->catdir( dirname($0), $bin ) + File::Spec->catfile( dirname($0), $bin ) ); $path = $maybe and last BIN if -f $maybe; ### parallel to your CPANPLUS.pm: ### $INC{cpanplus}/../bin/cpanp-run-perl $maybe = File::Spec->rel2abs( - File::Spec->catdir( + File::Spec->catfile( dirname($INC{'CPANPLUS.pm'}), '..', # lib dir 'bin', # bin dir @@ -545,7 +636,7 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. ### CPANPLUS.pm in ### /tmp/cp/lib/perl5/site_perl/5.8.8 $maybe = File::Spec->rel2abs( - File::Spec->catdir( + File::Spec->catfile( dirname( $INC{'CPANPLUS.pm'} ), '..', '..', '..', '..', # 4x updir 'bin', # bin dir @@ -559,9 +650,16 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. ### or user installs ### note that we don't use 'can_run' as it's ### not an executable, just a wrapper... - for my $dir (split(/\Q$Config::Config{path_sep}\E/, $ENV{PATH}), - File::Spec->curdir + ### prefer anything that's found in the path paralel to your $^X + for my $dir (File::Spec->rel2abs( dirname($^X) ), + split(/\Q$Config::Config{path_sep}\E/, $ENV{PATH}), + File::Spec->curdir, ) { + + ### On VMS the path could be in UNIX format, and we + ### currently need it to be in VMS format + $dir = VMS::Filespec::vmspath($dir) if ON_VMS; + $maybe = File::Spec->catfile( $dir, $bin ); $path = $maybe and last BIN if -f $maybe; } @@ -575,12 +673,19 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. ### cross your fingers... ### pass '-P' to perl: "run program through C ### preprocessor before compilation" + ### XXX using -P actually changes the way some Makefile.PLs + ### are executed, so don't do that... --kane error(loc( - "Could not find the '%1' in your path". + "Could not find the '%1' binary in your path". "--this may be a problem.\n". "Please locate this program and set ". - "your '%2' config entry to its path.\n", - $name, 'perlwrapper' + "your '%2' config entry to its path.\n". + "From the default shell, you can do this by typing:\n\n". + " %3\n". + " %4\n", + $name, 'perlwrapper', + 's program perlwrapper FULL_PATH_TO_CPANP_RUN_PERL', + 's save' )); return ''; }->();