X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Flocal%2Flib.pm;h=80ac61890e72f8e335dd266caf0a4f39dd86be3b;hb=25398da1338e8411723450755a7e1944f6e262c1;hp=62ed1cf58b8adc4d1923b19e35db0e44e0db9bd8;hpb=48eb676f6d8ba5368b35eb06f4d96a16b7942ec3;p=p5sagit%2Flocal-lib.git diff --git a/lib/local/lib.pm b/lib/local/lib.pm index 62ed1cf..80ac618 100644 --- a/lib/local/lib.pm +++ b/lib/local/lib.pm @@ -10,7 +10,7 @@ use File::Spec (); use File::Path (); use Config; -our $VERSION = '1.008007'; # 1.8.4 +our $VERSION = '1.008009'; # 1.8.9 our @KNOWN_FLAGS = qw(--self-contained --deactivate --deactivate-all); @@ -207,7 +207,13 @@ sub setup_local_lib_for { my $interpolate = LITERAL_ENV; my @active_lls = $class->active_paths; - $path = $class->ensure_dir_structure_for($path); + $class->ensure_dir_structure_for($path); + + # On Win32 directories often contain spaces. But some parts of the CPAN + # toolchain don't like that. To avoid this, GetShortPathName() gives us + # an alternate representation that has none. + # This only works if the directory already exists. + $path = Win32::GetShortPathName($path) if $^O eq 'MSWin32'; if (! $deactivating) { if (@active_lls && $active_lls[-1] eq $path) { @@ -228,7 +234,15 @@ sub setup_local_lib_for { exit 0; } else { $class->setup_env_hash_for($path, $deactivating); - @INC = _uniq(split($Config{path_sep}, $ENV{PERL5LIB}), @INC); + my $arch_dir = $Config{archname}; + @INC = _uniq( + ( + # Inject $path/$archname for each path in PERL5LIB + map { ( File::Spec->catdir($_, $arch_dir), $_ ) } + split($Config{path_sep}, $ENV{PERL5LIB}) + ), + @INC + ); } } @@ -253,11 +267,7 @@ sub ensure_dir_structure_for { warn "Attempting to create directory ${path}\n"; } File::Path::mkpath($path); - # Need to have the path exist to make a short name for it, so - # converting to a short name here. - $path = Win32::GetShortPathName($path) if $^O eq 'MSWin32'; - - return $path; + return } sub guess_shelltype { @@ -417,12 +427,12 @@ sub build_activate_environment_vars_for { PERL5LIB => _env_list_value( { interpolate => $interpolate, exists => 0, empty => '' }, - $class->install_base_arch_path($path), $class->install_base_perl_path($path), \'PERL5LIB', ), PATH => _env_list_value( { interpolate => $interpolate, exists => 0, empty => '' }, + $class->install_base_bin_path($path), \'PATH', ), ) @@ -432,7 +442,7 @@ sub active_paths { my ($class) = @_; return () unless defined $ENV{PERL_LOCAL_LIB_ROOT}; - return split /\Q$Config{path_sep}/, $ENV{PERL_LOCAL_LIB_ROOT}; + return grep { $_ ne '' } split /\Q$Config{path_sep}/, $ENV{PERL_LOCAL_LIB_ROOT}; } sub build_deactivate_environment_vars_for {