From: apeiron Date: Wed, 14 Jan 2009 02:38:54 +0000 (+0000) Subject: Add the --self-contained patch from Mark Stosberg (with corrected CPAN.pm X-Git-Tag: 1.006009~87 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0fb70b9afeb890848019282cd73b0fa8c2410679;p=p5sagit%2Flocal-lib.git Add the --self-contained patch from Mark Stosberg (with corrected CPAN.pm command-line usage). Thanks, Mark! git-svn-id: http://dev.catalyst.perl.org/repos/bast/local-lib/1.000/trunk@5308 bd8105ee-0ff8-0310-8827-fb3f25b6796d --- diff --git a/lib/local/lib.pm b/lib/local/lib.pm index 06137ce..97d7bdf 100644 --- a/lib/local/lib.pm +++ b/lib/local/lib.pm @@ -14,9 +14,24 @@ use Config; our $VERSION = '1.002000'; # 1.2.0 sub import { - my ($class, $path) = @_; + my ($class, @args) = @_; + + # The path is required, but last in the list, so we pop, not shift here. + my $path = pop @args; $path = $class->resolve_path($path); $class->setup_local_lib_for($path); + + # Handle the '--self-contained' option + my $flag = shift @args; + no warnings 'uninitialized'; # the flag is optional + if ($flag eq '--self-contained') { + # The only directories that remain are those that we just defined and those where core modules are stored. + @INC = ($Config::Config{privlibexp}, $Config::Config{archlibexp}, split ':', $ENV{PERL5LIB}); + } + elsif (defined $flag) { + die "unrecognized import argument: $flag"; + } + } sub pipeline; @@ -306,6 +321,13 @@ In code - From the shell - + # Install LWP and it's missing dependencies to the 'my_lwp' directory + perl -MCPAN -Mlocal::lib=my_lwp -e 'CPAN::install(LWP)' + + # Install LWP and *all non-core* dependencies to the 'my_lwp' directory + perl -MCPAN -Mlocal::lib=--self-contained,my_lwp -e 'CPAN::install(LWP)' + + # Just print out useful shell commands $ perl -Mlocal::lib export MODULEBUILDRC=/home/username/perl/.modulebuildrc export PERL_MM_OPT='INSTALL_BASE=/home/username/perl' @@ -365,6 +387,16 @@ PATH is appended to, rather than clobbered. These values are then available for reference by any code after import. +=head1 A WARNING ABOUT UNINST=1 + +Be careful about using local::lib in combination with "make install UNINST=1". +The idea of this feature is that will uninstall an old version of a module +before installing a new one. However it lacks a safety check that the old +version and the new version will go in the same directory. Used in combination +with local::lib, you can potentially delete a globally accessible version of a +module while installing the new version in a local place. Only combine if "make +install UNINST=1" and local::lib if you understand these possible consequences. + =head1 LIMITATIONS Rather basic shell detection. Right now anything with csh in its name is @@ -403,6 +435,8 @@ auto_install fixes kindly sponsored by http://www.takkle.com/ Patches to correctly output commands for csh style shells, as well as some documentation additions, contributed by Christopher Nehren . +'--self-contained' feature contributed by Mark Stosberg . + =head1 LICENSE This library is free software under the same license as perl itself