Tyler MacDonald <[EMAIL PROTECTED]> wrote: > brian d foy <[EMAIL PROTECTED]> wrote: > > > > If yes, I think I'd call it "mkmyconfig". > > > > > > > > And when you could please add a paragraph of documentation, it's in in > > > > a second. > > > > > > OK, I'll re-do my patch with a snippet of docs. I didn't really > > > consider that somebody might explicitly run > > > > > > perl -MCPAN -e 'mkmyconfig' > > > > Perhaps this is something I can add to the cpan(1) script. > > That'd be great! I'll be submitting my refined CPAN.pm patch w/docs > tonight.
OK, here's the patch! I noticed there's no docs on installing dev.releases or automatic installation, so I threw those in as well. LMK what you think. - Tyler
diff -dur CPAN-1.83_59.orig/lib/CPAN.pm CPAN-1.83_59/lib/CPAN.pm --- CPAN-1.83_59.orig/lib/CPAN.pm 2006-01-29 13:46:58.000000000 -0800 +++ CPAN-1.83_59/lib/CPAN.pm 2006-01-30 19:14:00.000000000 -0800 @@ -54,7 +54,7 @@ @EXPORT = qw( autobundle bundle expand force notest get cvs_import install make readme recompile shell test clean - perldoc recent + perldoc recent mkmyconfig ); sub soft_chdir_with_alternatives ($); @@ -238,6 +238,27 @@ } } } + +#-> sub CPAN::mkmyconfig ; +sub mkmyconfig { + my($cpanpm, %args) = @_; + require CPAN::FirstTime; + $cpanpm = $INC{'CPAN/MyConfig.pm'} || "$ENV{HOME}/.cpan/CPAN/MyConfig.pm"; + File::Path::mkpath(File::Basename::dirname($cpanpm)) unless -e $cpanpm; + if(!$INC{'CPAN/Config.pm'}) { + eval { require CPAN::Config; }; + } + $CPAN::Config ||= {}; + $CPAN::Config = { + %$CPAN::Config, + build_dir => undef, + cpan_home => undef, + keep_source_where => undef, + histfile => undef, + }; + CPAN::FirstTime::init($cpanpm, %args); +} + package CPAN::CacheMgr; use strict; @CPAN::CacheMgr::ISA = qw(CPAN::InfoObj CPAN); @@ -675,8 +696,15 @@ $incc or $myincc - }); + if(!$INC{'CPAN/MyConfig.pm'}) { + $CPAN::Frontend->myprint("You don't seem to have a user configuration (MyConfig.pm) yet.\n"); + my $new = ExtUtils::MakeMaker::prompt("Do you want to create a user configuration now?", "yes"); + if($new =~ m{^y}i) { + CPAN::mkmyconfig(); + return &checklock; + } + } } $CPAN::Frontend->mydie("Could not open >$lockfile: $!"); } @@ -7643,15 +7671,18 @@ I am not root, how can I install a module in a personal directory? First of all, you will want to use your own configuration, not the one -that your root user installed. The following command sequence is a -possible approach: +that your root user installed. If you do not have permission to write +in the cpan directory that root has configured, you will be asked if +you want to create your own config. Answering "yes" will bring you into +CPAN's configuration stage, using the system config for all defaults except +things that have to do with CPAN's work directory, saving your choices to +your MyConfig.pm file. - % mkdir -p $HOME/.cpan/CPAN - % echo '1;' > $HOME/.cpan/CPAN/MyConfig.pm - % cpan - [...answer all questions...] +You can also manually initiate this process with the following command: -You will most probably like something like this: + % perl -MCPAN -e 'mkmyconfig' + +You will most probably also want to configure something like this: o conf makepl_arg "LIB=~/myperl/lib \ INSTALLMAN1DIR=~/myperl/man/man1 \ @@ -7768,6 +7799,29 @@ but this is neither guaranteed to work in the future nor is it a decent command. +=item 12) + +How do I install a "DEVELOPER RELEASE" of a module? + +By default, CPAN will install the latest non-developer release of a module. +If you want to install a dev release, you have to specify a partial path to +the tarball you wish to install, like so: + + cpan> install KWILLIAMS/Module-Build-0.27_06.tar.gz + +=item 13) + +How do I install a module and all it's dependancies from the commandline, +without being prompted for anything, despite my CPAN configuration +(or lack thereof)? + +CPAN uses ExtUtils::MakeMaker's prompt() function to ask it's questions, so +if you set the PERL_MM_USE_DEFAULT environment variable, you shouldn't be +asked any questions at all (assuming the modules you are installing are +nice about obeying that variable as well): + + % PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module' + =back =head1 BUGS