Fix recursion bug in the lookup sub of the env script.
[catagits/Gitalist.git] / script / env
CommitLineData
42b626cd 1#!/usr/bin/env perl
2# vim: set filetype=perl:
3
4# env is a perl script similar in concept to /usr/bin/env
5
6# If you have a local-lib5 directory then this script will set it up for
7# you as it executes.
8
9# If used like /usr/bin/env then it will run other commands based on
10# your current path settings (with a local::lib environment if present)
11#
12# e.g. script/env bash
13#
14# NOTE: This environment _IS NOT_ self contained
15
16# If included inside another perl script, then it will be a no-op if
17# a local::lib environment is not present, but if one is, it will be
18# used as a --self-contained environment, expected to contain all non-core
19# dependencies for your perl
20#
21# e.g.
22# use FindBin;
23# BEGIN { do "$FindBin::Bin/env" or die $@ }
24
25# The local::lib behavior can be explicitly enabled or disabled by setting
26# the CATALYST_LOCAL_LIB enviromnent variable to true or false.
27
28use strict;
29use warnings;
30use Carp;
31use lib;
32use FindBin;
bc33a9b1 33use File::Spec ();
42b626cd 34
bc33a9b1 35# Look up to see find Makefile.PL aka the base of the local::lib install.
36my $lookup; $lookup = sub {
37 my $dir = $_[0] || '.';
38
39 my(undef, $dirbit) = File::Spec->splitpath($FindBin::Bin);
40 my $trydir = File::Spec->catdir($dirbit, $dir);
41
42 return '' unless -d $trydir;
43
44 my $tryfile = File::Spec->catfile($trydir, "Makefile.PL");
45
46 return $trydir if -r $tryfile;
47
247fc27b 48 return $lookup->( File::Spec->catdir($trydir, File::Spec->updir) );
bc33a9b1 49};
50
51my $basedir = $lookup->();
42b626cd 52
53$basedir ||= '';
54my $target = "$basedir/local-lib5";
55
56my $on = -d $target;
57$on = ! ! $ENV{CATALYST_LOCAL_LIB}
58 if (exists $ENV{CATALYST_LOCAL_LIB} and defined $ENV{CATALYST_LOCAL_LIB});
59
60Carp::confess("Could not find local-lib5 from '$FindBin::Bin'")
61 if ($on && ! length $basedir);
62
63if ( $on ) {
64 # So we can find local::lib when fully self contained
65 lib->import("$target/lib/perl5");
66
67 # . for CPAN + app dir
68 my @include = ('.', "$basedir/lib");
69
70 $ENV{PERL5LIB} = join ':', @include;
71
72 # Sorry kane ;)
73 $ENV{PERL_AUTOINSTALL_PREFER_CPAN}=1;
74
75 $ENV{PERL_MM_OPT} .= " INSTALLMAN1DIR=none INSTALLMAN3DIR=none";
76
99daca22 77 require lib::core::only;
42b626cd 78 require local::lib;
99daca22 79 lib::core::only->import();
80 local::lib->import( $target );
42b626cd 81}
82
83unless ( caller ) {
84 if ( @ARGV ) {
85 exec @ARGV;
86 }
87}
88
891;
90