Envy
view release on metacpan or search on metacpan
set_defaults.PL view on Meta::CPAN
#!./perl
use strict;
use Config;
use vars qw(%How $Old);
BEGIN {
warn " >>> set_defaults.PL running...\n";
require "./DefaultConf.pm";
my $pk;
CONF: {
eval { require "./Conf.pm" };
if (!$@) {
warn " >>> using ./Conf.pm\n";
$pk = 'Envy::Conf';
last CONF;
}
my $sitelib = $Config{sitelib};
my $prefix = $ENV{PERL5PREFIX} || $Config{prefix};
$sitelib =~ s/$Config{prefix}/$prefix/;
local @INC = ($sitelib);
eval { require Envy::Conf };
if (!$@) {
$pk = 'Envy::Conf';
warn " >>> using installed Envy::Conf ($INC{'Envy/Conf.pm'})\n";
last CONF;
}
$pk = 'Envy::DefaultConf';
warn " >>> using DefaultConf.pm\n";
};
no strict 'refs';
if (grep /How/, @{"$pk\::EXPORT_OK"}) {
$pk->import('%How');
} else {
$pk->import(qw(%env0 $startup $prefix @path));
$Old=1;
}
require "./subst.pm";
require "./VERSION";
}
use File::Compare;
use Symbol;
eval q[%How = (env0=>\%env0, startup=>$startup, prefix=>$prefix, path=>\@path)]
if $Old;
for my $k (keys %Envy::DefaultConf::How) {
$How{$k} = $Envy::DefaultConf::How{$k} if !defined $How{$k};
}
sub do_init_env {
my ($file) = @_;
my $env0 = $How{env0};
my $str='';
if ($file eq 'login.IN') {
for my $k (sort keys %$env0) {
my $v=$$env0{$k};
$str .= "setenv $k $v\n";
}
} else {
for my $k (sort keys %$env0) {
my $v=$$env0{$k};
$str .= "$k=$v; export $k\n";
}
}
$str;
}
# This maps symlinks from $ETOP/etc/login/ to $HOME/.
my $symlink = {
'dot.profile' => ['.profile', '.zprofile', '.bash_profile'],
'dot.shrc' => ['.shrc', '.zshrc', '.bashrc'],
'dot.login' => ['.login'],
'dot.cshrc' => ['.cshrc'],
'dot.dtprofile' => ['.dtprofile'],
};
my $symlink_str;
while (my($k,$v) = each %$symlink) {
for my $to (@$v) {
$symlink_str .= 'safe_symlink $ETOP/etc/login/'.$k.' $HOME/'.$to."\n";
}
}
my $perl5lib = $Config{sitelib};
$perl5lib =~ s/$Config{prefix}/$How{prefix}/;
my $subst = {
'#ENVY.PL#' => "$How{prefix}/bin/envy.pl",
'#ETOP#' => $How{prefix},
'#FORCEPATH#' => "qw(".join(' ',split /:+/,$How{env0}{PATH}).")",
'#INITIAL_ENV#' => \&do_init_env,
'#PERL5LIB#' => $perl5lib,
'#SAFE_SYMLINK#' => $symlink_str,
'#SEARCH#' => "qw(".join(' ',@{$How{path}}).")",
'#SHSEARCH#' => join(':',@{$How{path}}),
'#STARTUP#' => $How{startup},
'#STRICTNESS#' => $How{strictness},
'#VERSION#' => $VERSION,
};
sub go {
my $status = gensym;
open $status, ">Conf.pm.new" or die "open >Conf.pm.new: $!";
select $status;
my $env0 = $How{env0};
print q[# Re-generate by uncommenting the following line:
# return 0;
use strict;
package Envy::Conf;
require Exporter;
use vars qw(@ISA @EXPORT_OK
%How %env0 $startup $strictness $prefix @path);
@ISA = ('Exporter');
@EXPORT_OK = qw(%How);
# Prefix (such that $prefix/bin/envy.pl exists)
( run in 2.462 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )