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

Reply via email to