1 package CPANPLUS::Internals::Constants;
9 use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext';
12 use vars qw[$VERSION @ISA @EXPORT];
14 use Package::Constants;
19 @EXPORT = Package::Constants->list( __PACKAGE__ );
22 sub constants { @EXPORT };
24 use constant INSTALLER_BUILD
25 => 'CPANPLUS::Dist::Build';
26 use constant INSTALLER_MM => 'CPANPLUS::Dist::MM';
27 use constant INSTALLER_SAMPLE
28 => 'CPANPLUS::Dist::Sample';
29 use constant INSTALLER_BASE => 'CPANPLUS::Dist::Base';
31 use constant SHELL_DEFAULT => 'CPANPLUS::Shell::Default';
32 use constant SHELL_CLASSIC => 'CPANPLUS::Shell::Classic';
34 use constant CONFIG => 'CPANPLUS::Config';
35 use constant CONFIG_USER => 'CPANPLUS::Config::User';
36 use constant CONFIG_SYSTEM => 'CPANPLUS::Config::System';
37 use constant CONFIG_BOXED => 'CPANPLUS::Config::Boxed';
39 use constant TARGET_CREATE => 'create';
40 use constant TARGET_PREPARE => 'prepare';
41 use constant TARGET_INSTALL => 'install';
42 use constant TARGET_IGNORE => 'ignore';
44 use constant ON_WIN32 => $^O eq 'MSWin32';
45 use constant ON_NETWARE => $^O eq 'NetWare';
46 use constant ON_CYGWIN => $^O eq 'cygwin';
47 use constant ON_VMS => $^O eq 'VMS';
49 use constant DOT_CPANPLUS => ON_VMS ? '_cpanplus' : '.cpanplus';
51 use constant OPT_AUTOFLUSH => '-MCPANPLUS::Internals::Utils::Autoflush';
53 use constant UNKNOWN_DL_LOCATION
56 use constant NMAKE => 'nmake.exe';
57 use constant NMAKE_URL =>
58 'ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe';
60 use constant INSTALL_VIA_PACKAGE_MANAGER
61 => sub { my $fmt = $_[0] or return;
62 return 1 if $fmt ne INSTALLER_BUILD and
66 use constant IS_CODEREF => sub { ref $_[-1] eq 'CODE' };
67 use constant IS_MODOBJ => sub { UNIVERSAL::isa($_[-1],
68 'CPANPLUS::Module') };
69 use constant IS_FAKE_MODOBJ => sub { UNIVERSAL::isa($_[-1],
70 'CPANPLUS::Module::Fake') };
71 use constant IS_AUTHOBJ => sub { UNIVERSAL::isa($_[-1],
72 'CPANPLUS::Module::Author') };
73 use constant IS_FAKE_AUTHOBJ
74 => sub { UNIVERSAL::isa($_[-1],
75 'CPANPLUS::Module::Author::Fake') };
77 use constant IS_CONFOBJ => sub { UNIVERSAL::isa($_[-1],
78 'CPANPLUS::Configure') };
80 use constant IS_RVOBJ => sub { UNIVERSAL::isa($_[-1],
81 'CPANPLUS::Backend::RV') };
83 use constant IS_INTERNALS_OBJ
84 => sub { UNIVERSAL::isa($_[-1],
85 'CPANPLUS::Internals') };
87 use constant IS_FILE => sub { return 1 if -e $_[-1] };
89 use constant FILE_EXISTS => sub {
91 return 1 if IS_FILE->($file);
92 local $Carp::CarpLevel =
94 error(loc( q[File '%1' does not exist],
99 use constant FILE_READABLE => sub {
101 return 1 if -e $file && -r _;
102 local $Carp::CarpLevel =
104 error( loc( q[File '%1' is not readable ].
105 q[or does not exist], $file));
108 use constant IS_DIR => sub { return 1 if -d $_[-1] };
110 use constant DIR_EXISTS => sub {
112 return 1 if IS_DIR->($dir);
113 local $Carp::CarpLevel =
115 error(loc(q[Dir '%1' does not exist],
120 ### On VMS, if the $Config{make} is either MMK
121 ### or MMS, then the makefile is 'DESCRIP.MMS'.
122 use constant MAKEFILE => sub { my $file =
124 $Config::Config{make} =~ /MM[S|K]/i)
129 ? File::Spec->catfile( @_, $file )
132 use constant MAKEFILE_PL => sub { return @_
133 ? File::Spec->catfile( @_,
137 use constant BUILD_PL => sub { return @_
138 ? File::Spec->catfile( @_,
143 use constant BLIB => sub { return @_
144 ? File::Spec->catfile(@_, 'blib')
148 use constant LIB => 'lib';
149 use constant LIB_DIR => sub { return @_
150 ? File::Spec->catdir(@_, LIB)
153 use constant AUTO => 'auto';
154 use constant LIB_AUTO_DIR => sub { return @_
155 ? File::Spec->catdir(@_, LIB, AUTO)
156 : File::Spec->catdir(LIB, AUTO)
158 use constant ARCH => 'arch';
159 use constant ARCH_DIR => sub { return @_
160 ? File::Spec->catdir(@_, ARCH)
163 use constant ARCH_AUTO_DIR => sub { return @_
164 ? File::Spec->catdir(@_,ARCH,AUTO)
165 : File::Spec->catdir(ARCH,AUTO)
168 use constant BLIB_LIBDIR => sub { return @_
169 ? File::Spec->catdir(
171 : File::Spec->catdir( BLIB->(), LIB );
174 use constant CONFIG_USER_LIB_DIR => sub {
175 require CPANPLUS::Internals::Utils;
177 CPANPLUS::Internals::Utils->_home_dir,
181 use constant CONFIG_USER_FILE => sub {
183 CONFIG_USER_LIB_DIR->(),
184 split('::', CONFIG_USER),
187 use constant CONFIG_SYSTEM_FILE => sub {
188 require CPANPLUS::Internals;
189 require File::Basename;
190 my $dir = File::Basename::dirname(
191 $INC{'CPANPLUS/Internals.pm'}
194 ### XXX use constants
196 $dir, qw[Config System.pm]
200 use constant README => sub { my $obj = $_[0];
201 my $pkg = $obj->package_name;
202 $pkg .= '-' . $obj->package_version .
206 use constant OPEN_FILE => sub {
207 my($file, $mode) = (@_, '');
209 open $fh, "$mode" . $file
211 "Could not open file '%1': %2",
217 use constant OPEN_DIR => sub {
220 opendir $dh, $dir or error(loc(
221 "Could not open dir '%1': %2", $dir, $!
228 use constant READ_DIR => sub {
230 my $dh = OPEN_DIR->( $dir ) or return;
233 my @files = grep { $_ !~ /^\.{1,2}/ }
239 use constant STRIP_GZ_SUFFIX
241 my $file = $_[0] or return;
246 use constant CHECKSUMS => 'CHECKSUMS';
247 use constant PGP_HEADER => '-----BEGIN PGP SIGNED MESSAGE-----';
248 use constant ENV_CPANPLUS_CONFIG
249 => 'PERL5_CPANPLUS_CONFIG';
250 use constant ENV_CPANPLUS_IS_EXECUTING
251 => 'PERL5_CPANPLUS_IS_EXECUTING';
252 use constant DEFAULT_EMAIL => 'cpanplus@example.com';
253 use constant CPANPLUS_UA => sub { ### for the version number ###
254 require CPANPLUS::Internals;
255 "CPANPLUS/$CPANPLUS::Internals::VERSION"
257 use constant TESTERS_URL => sub {
258 "http://testers.cpan.org/show/" .
261 use constant TESTERS_DETAILS_URL
263 'http://testers.cpan.org/show/' .
267 use constant CREATE_FILE_URI
269 my $dir = $_[0] or return;
275 use constant CUSTOM_AUTHOR_ID
278 use constant DOT_SHELL_DEFAULT_RC
279 => '.shell-default.rc';
281 use constant PREREQ_IGNORE => 0;
282 use constant PREREQ_INSTALL => 1;
283 use constant PREREQ_ASK => 2;
284 use constant PREREQ_BUILD => 3;
285 use constant BOOLEANS => [0,1];
286 use constant CALLING_FUNCTION
287 => sub { my $lvl = $_[0] || 0;
288 return join '::', (caller(2+$lvl))[3]
290 use constant PERL_CORE => 'perl';
292 use constant GET_XS_FILES => sub { my $dir = $_[0] or return;
296 sub { push @files, $File::Find::name
297 if $File::Find::name =~ /\.xs$/i
303 use constant INSTALL_LOG_FILE
304 => sub { my $obj = shift or return;
305 my $name = $obj->name; $name =~ s/::/-/g;
306 $name .= '-'. $obj->version;
307 $name .= '-'. scalar(time) . '.log';
311 use constant ON_OLD_CYGWIN => do { ON_CYGWIN and $] < 5.008
313 "Your perl version for %1 is too low; ".
314 "Require %2 or higher for this function",
319 ### XXX these 2 are probably obsolete -- check & remove;
320 use constant DOT_EXISTS => '.exists';
322 use constant QUOTE_PERL_ONE_LINER
323 => sub { my $line = shift or return;
325 ### use double quotes on these systems
327 if ON_WIN32 || ON_NETWARE || ON_VMS;
329 ### single quotes on the rest
336 # c-indentation-style: bsd
338 # indent-tabs-mode: nil
340 # vim: expandtab shiftwidth=4: