use Carp ();
use Config;
-our $VERSION = '1.004008'; # 1.4.7
-my @KNOWN_FLAGS = (qw/--self-contained/);
+our $VERSION = '1.005001'; # 1.5.1
+
+our @KNOWN_FLAGS = qw(--self-contained);
sub import {
my ($class, @args) = @_;
- @args <= 1 + @KNOWN_FLAGS or die <<'DEATH';
-Please see `perldoc local::lib` for directions on using this module.
-DEATH
# Remember what PERL5LIB was when we started
- my $perl5lib = $ENV{PERL5LIB};
+ my $perl5lib = $ENV{PERL5LIB} || '';
my %arg_store;
for my $arg (@args) {
}
if($arg_store{'self-contained'}) {
- # The only directories that remain are those that we just defined and those
- # where core modules are stored. We put PERL5LIB first, so it'll be favored
- # over privlibexp and archlibexp
-
- @INC = _uniq(
- $class->install_base_perl_path($arg_store{path}),
- $class->install_base_arch_path($arg_store{path}),
- split( $Config{path_sep}, $perl5lib ),
- $Config::Config{privlibexp},
- $Config::Config{archlibexp}
- );
-
- # We explicitly set PERL5LIB here to the above de-duped list to prevent
- # @INC from growing with each invocation
- $ENV{PERL5LIB} = join( $Config{path_sep}, @INC );
+ die "FATAL: The local::lib --self-contained flag has never worked reliably and the original author, Mark Stosberg, was unable or unwilling to maintain it. As such, this flag has been removed from the local::lib codebase in order to prevent misunderstandings and potentially broken builds. The local::lib authors recommend that you look at the lib::core::only module shipped with this distribution in order to create a more robust environment that is equivalent to what --self-contained provided (although quite possibly not what you originally thought it provided due to the poor quality of the documentation, for which we apologise).\n";
}
$arg_store{path} = $class->resolve_path($arg_store{path});
my ($user) = ($path =~ /^~([^\/]+)/); # can assume ^~ so undef for 'us'
my $tried_file_homedir;
my $homedir = do {
- no warnings 'numeric'; # Disable warning caused by version comparison with dev releases..
if (eval { require File::HomeDir } && $File::HomeDir::VERSION >= 0.65) {
$tried_file_homedir = 1;
if (defined $user) {
MODULEBUILDRC => $class->modulebuildrc_path($path),
PERL_MM_OPT => "INSTALL_BASE=${path}",
PERL5LIB => join($Config{path_sep},
- $class->install_base_perl_path($path),
$class->install_base_arch_path($path),
- ($ENV{PERL5LIB} ?
+ $class->install_base_perl_path($path),
+ (($ENV{PERL5LIB}||()) ?
($interpolate == INTERPOLATE_ENV
? ($ENV{PERL5LIB})
: (($^O ne 'MSWin32') ? '$PERL5LIB' : '%PERL5LIB%' ))
PATH => join($Config{path_sep},
$class->install_base_bin_path($path),
($interpolate == INTERPOLATE_ENV
- ? $ENV{PATH}
+ ? ($ENV{PATH}||())
: (($^O ne 'MSWin32') ? '$PATH' : '%PATH%' ))
),
)
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)'
+ # Install LWP and its missing dependencies to the '~/perl5' directory
+ perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'
# Just print out useful shell commands
$ perl -Mlocal::lib
A typical way to install local::lib is using what is known as the
"bootstrapping" technique. You would do this if your system administrator
hasn't already installed local::lib. In this case, you'll need to install
-local::lib in your home directory.
+local::lib in your home directory. If you do have administrative priveleges,
+you will still want to set up your environment variables, as discussed in
+step 4 (and for Windows users, see L</Differences when using this module under Win32>).
1. Download and unpack the local::lib tarball from CPAN (search for "Download"
on the CPAN page about local::lib). Do this as an ordinary user, not as root
perl Makefile.PL --bootstrap --no-manpages
-If you want to install multiple Perl module environments, say for application evelopment,
+If you want to install multiple Perl module environments, say for application development,
install local::lib globally and then:
cd ~/mydir1
=head2 Differences when using this module under Win32
+To set up the proper environment variables for your current session of
+C<CMD.exe>, you can use this:
+
C:\>perl -Mlocal::lib
set MODULEBUILDRC=C:\DOCUME~1\ADMINI~1\perl5\.modulebuildrc
set PERL_MM_OPT=INSTALL_BASE=C:\DOCUME~1\ADMINI~1\perl5
### instead of $(perl -Mlocal::lib=./)
If you want the environment entries to persist, you'll need to add then to the
-Control Panel's System applet yourself at the moment.
+Control Panel's System applet yourself or use L<App::local::lib::Win32Helper>.
The "~" is translated to the user's profile directory (the directory named for
the user under "Documents and Settings" (Windows XP or earlier) or "Users"
These values are then available for reference by any code after import.
+=head1 CREATING A SELF-CONTAINED SET OF MODULES
+
+See L<lib::core::only|lib::core::only> for one way to do this - but note that
+there are a number of caveats, and the best approach is always to perform a
+build against a clean perl (i.e. site and vendor as close to empty as possible).
+
=head1 METHODS
=head2 ensure_directory_structure_for
Patches to correctly output commands for csh style shells, as well as some
documentation additions, contributed by Christopher Nehren <apeiron@cpan.org>.
-'--self-contained' feature contributed by Mark Stosberg <mark@summersault.com>.
-
-Ability to pass '--self-contained' without a directory inspired by frew on
-irc.perl.org/#catalyst.
-
Doc patches for a custom local::lib directory contributed by Torsten Raudssus
<torsten@raudssus.de>.
Patch to add Win32 support contributed by Curtis Jewell <csjewell@cpan.org>.
+Warnings for missing PATH/PERL5LIB (as when not running interactively) silenced
+by a patch from Marco Emilio Poleggi.
+
+Mark Stosberg <mark@summersault.com> provided the code for the now deleted
+'--self-contained' option.
+
+Documentation patches to make win32 usage clearer by
+David Mertens <dcmertens.perl@gmail.com> (run4flat).
+
=head1 COPYRIGHT
Copyright (c) 2007 - 2009 the local::lib L</AUTHOR> and L</CONTRIBUTORS> as