Viewing file: llw32helper.pl (4.14 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!perl
use 5.008001; use strict; use warnings; use local::lib 1.004007 qw(); use English qw(-no_match_vars); use Carp qw(croak); use IO::Interactive qw(is_interactive); use File::HomeDir 0.81; use File::Spec::Functions 3.2701 qw(splitpath catpath catdir); use File::Path qw(mkpath); use Win32::TieRegistry 0.26 qw(:KEY_);
our $VERSION = our $VERSION_STR = '0.990'; $VERSION =~ s/_//sm;
print <<"__END_TEXT__"; llwin32helper version $VERSION_STR
Configures local::lib on Windows.
Run "perldoc App::local::lib::Win32Helper" for more information, including the license and copyright.
__END_TEXT__
if ( !is_interactive() ) { croak 'llw32helper must be run interactively.'; }
# Access = KEY_READ | KEY_WRITE | KEY_WOW64_64KEY (0x100 = 256) my $environment_obj = Win32::TieRegistry->new( 'CUser/Environment/', { Delimiter => q{/}, Access => KEY_READ() | KEY_WRITE() | 256 } ) or croak "Can't access HKEY_CURRENT_USER subkey: $EXTENDED_OS_ERROR\n";
$environment_obj->FastDelete(1); $environment_obj->ArrayValues(0);
my $environment_key = $environment_obj->TiedRef();
local $ENV{HOME} = undef;
my $ll_exists = 0; my $default_path; if ( exists $environment_key->{'/MODULEBUILDRC'} ) { $ll_exists = 1; my ( $volume, $directories, $file ) = File::Spec->splitpath( $environment_key->{'MODULEBUILDRC'} ); $default_path = catpath( $volume, $directories, undef ); } else { $default_path = catdir( Win32::GetShortPathName( File::HomeDir->my_home() ), 'perl5' ); }
if ($ll_exists) { EXISTS: print "Do you wish to remove the local::lib settings from $default_path? [y/N] ";
my $answer = <>; chomp $answer if defined $answer;
$answer = 'n' if $answer eq q{};
if ( 'n' eq lc substr $answer, 0, 1 ) { print "llwin32helper exiting.\n"; exit; }
goto EXISTS if ( 'y' ne lc substr $answer, 0, 1 );
delete $environment_key->{'/MODULEBUILDRC'}; delete $environment_key->{'/PERL_MM_OPT'}; delete $environment_key->{'/PERL5LIB'};
if ( $environment_key->{'/PATH'} =~ m/;/smx ) { my $dir = catdir( $default_path, 'bin' ); $dir =~ s{\\}{\\\\}gsmx; my $path = $environment_key->{'/PATH'}; $path =~ s{$dir;}{}gsmx; $environment_key->{'/PATH'} = $path; } else { delete $environment_key->{'/PATH'}; }
print <<"__END_TEXT__";
llwin32helper has removed the environment entries that make CPAN/CPANPLUS install future modules to $default_path.
This script does not delete the files in that directory, however. (You may wish to delete them yourself.)
You'll need to reboot for the changes to register. __END_TEXT__
exit;
} else { NOTEXISTS: print 'Do you wish to install future modules in a local area? [y/N] ';
my $answer = <>; chomp $answer if defined $answer;
$answer = 'n' if $answer eq q{};
if ( 'n' eq lc substr $answer, 0, 1 ) { print "llwin32helper exiting.\n"; exit; }
goto NOTEXISTS if ( 'y' ne lc substr $answer, 0, 1 );
PATH: print "\nWhere do you want to install modules? [$default_path] ";
$answer = <>; chomp $answer if defined $answer;
$answer = $default_path if $answer eq q{};
if ( !-d $answer ) { print "Creating path.\n"; mkpath($answer); }
my %ll_env_entries = 'local::lib'->build_environment_vars_for( $answer, 0 );
$environment_key->{'/MODULEBUILDRC'} = $ll_env_entries{'MODULEBUILDRC'}; $environment_key->{'/PERL_MM_OPT'} = $ll_env_entries{'PERL_MM_OPT'}; $environment_key->{'/PERL5LIB'} = $ll_env_entries{'PERL5LIB'};
if ( exists $environment_key->{'/PATH'} ) { $environment_key->{'/PATH'} = join q{;}, 'local::lib'->install_base_bin_path($answer), $environment_key->{'/PATH'}; } else { $environment_key->{'/PATH'} = local::lib->install_base_bin_path($answer); }
'local::lib'->ensure_dir_structure_for($answer);
print <<"__END_TEXT__";
llwin32helper has added environment entries and files so that CPAN/CPANPLUS installs future modules to $answer.
To use modules installed this way in your scripts, insert this line: use local::lib '~\\perl5'; (if you changed the directory, use that directory instead.)
To remove these environment entries, run llw32helper again.
You'll need to reboot for these environment variables to register. __END_TEXT__
exit; } ## end else [ if ($ll_exists) ]
|