Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
best-practical
rt-extension-commandbymail
Commits
937bf2ab
Commit
937bf2ab
authored
Feb 07, 2013
by
Ruslan Zakirov
Browse files
update M::I
parent
bb3fee14
Changes
13
Hide whitespace changes
Inline
Side-by-side
inc/Module/AutoInstall.pm
View file @
937bf2ab
...
...
@@ -3,11 +3,12 @@ package Module::AutoInstall;
use
strict
;
use
Cwd
();
use
File::
Spec
();
use
ExtUtils::
MakeMaker
();
use
vars
qw{$VERSION}
;
BEGIN
{
$VERSION
=
'
1.0
3
';
$VERSION
=
'
1.0
6
';
}
# special map on pre-defined feature sets
...
...
@@ -17,11 +18,14 @@ my %FeatureMap = (
);
# various lexical flags
my
(
@Missing
,
@Existing
,
%DisabledTests
,
$UnderCPAN
,
$HasCPANPLUS
);
my
(
@Missing
,
@Existing
,
%DisabledTests
,
$UnderCPAN
,
$InstallDepsTarget
,
$HasCPANPLUS
);
my
(
$Config
,
$CheckOnly
,
$SkipInstall
,
$AcceptDefault
,
$TestOnly
,
$AllDeps
$Config
,
$CheckOnly
,
$SkipInstall
,
$AcceptDefault
,
$TestOnly
,
$AllDeps
,
$UpgradeDeps
);
my
(
$PostambleActions
,
$PostambleUsed
);
my
(
$PostambleActions
,
$PostambleActionsNoTest
,
$PostambleActionsUpgradeDeps
,
$PostambleActionsUpgradeDepsNoTest
,
$PostambleActionsListDeps
,
$PostambleActionsListAllDeps
,
$PostambleUsed
,
$NoTest
);
# See if it's a testing or non-interactive session
_accept_default
(
$ENV
{
AUTOMATED_TESTING
}
or
!
-
t
STDIN
);
...
...
@@ -31,6 +35,10 @@ sub _accept_default {
$AcceptDefault
=
shift
;
}
sub
_installdeps_target
{
$InstallDepsTarget
=
shift
;
}
sub
missing_modules
{
return
@Missing
;
}
...
...
@@ -63,6 +71,11 @@ sub _init {
__PACKAGE__
->
install
(
$Config
,
@Missing
=
split
(
/,/
,
$
1
)
);
exit
0
;
}
elsif
(
$arg
=~
/^--upgradedeps=(.*)$/
)
{
$UpgradeDeps
=
1
;
__PACKAGE__
->
install
(
$Config
,
@Missing
=
split
(
/,/
,
$
1
)
);
exit
0
;
}
elsif
(
$arg
=~
/^--default(?:deps)?$/
)
{
$AcceptDefault
=
1
;
}
...
...
@@ -125,7 +138,7 @@ sub import {
# check entirely since we don't want to have to load (and configure)
# an old CPAN just for a cosmetic message
$UnderCPAN
=
_check_lock
(
1
)
unless
$SkipInstall
;
$UnderCPAN
=
_check_lock
(
1
)
unless
$SkipInstall
||
$InstallDepsTarget
;
while
(
my
(
$feature
,
$modules
)
=
splice
(
@args
,
0
,
2
)
)
{
my
(
@required
,
@tests
,
@skiptests
);
...
...
@@ -175,7 +188,7 @@ sub import {
}
# XXX: check for conflicts and uninstalls(!) them.
my
$cur
=
_
load
(
$mod
);
my
$cur
=
_
version_of
(
$mod
);
if
(
_version_cmp
(
$cur
,
$arg
)
>=
0
)
{
print
"
loaded. (
$cur
"
.
(
$arg
?
"
>=
$arg
"
:
''
)
.
"
)
\n
";
...
...
@@ -207,6 +220,7 @@ sub import {
$CheckOnly
or
(
$mandatory
and
$UnderCPAN
)
or
$AllDeps
or
$InstallDepsTarget
or
_prompt
(
qq{==> Auto-install the }
.
(
@required
/
2
)
...
...
@@ -237,10 +251,17 @@ sub import {
}
}
if
(
@Missing
and
not
(
$CheckOnly
or
$UnderCPAN
)
)
{
if
(
@Missing
and
not
(
$CheckOnly
or
$UnderCPAN
)
)
{
require
Config
;
print
"
*** Dependencies will be installed the next time you type '
$Config
::Config{make}'.
\n
";
my
$make
=
$
Config::
Config
{
make
};
if
(
$InstallDepsTarget
)
{
print
"
*** To install dependencies type '
$make
installdeps' or '
$make
installdeps_notest'.
\n
";
}
else
{
print
"
*** Dependencies will be installed the next time you type '
$make
'.
\n
";
}
# make an educated guess of whether we'll need root permission.
print
"
(You may need to do that as the 'root' user.)
\n
"
...
...
@@ -271,6 +292,10 @@ END_MESSAGE
sub
_check_lock
{
return
unless
@Missing
or
@_
;
if
(
$ENV
{
PERL5_CPANM_IS_RUNNING
})
{
return
_running_under
('
cpanminus
');
}
my
$cpan_env
=
$ENV
{
PERL5_CPAN_IS_RUNNING
};
if
(
$ENV
{
PERL5_CPANPLUS_IS_RUNNING
})
{
...
...
@@ -324,7 +349,7 @@ sub install {
while
(
my
(
$pkg
,
$ver
)
=
splice
(
@
_
,
0
,
2
)
)
{
# grep out those already installed
if
(
_version_cmp
(
_
load
(
$pkg
),
$ver
)
>=
0
)
{
if
(
_version_cmp
(
_
version_of
(
$pkg
),
$ver
)
>=
0
)
{
push
@installed
,
$pkg
;
}
else
{
...
...
@@ -332,6 +357,11 @@ sub install {
}
}
if
(
$UpgradeDeps
)
{
push
@modules
,
@installed
;
@installed
=
();
}
return
@installed
unless
@modules
;
# nothing to do
return
@installed
if
_check_lock
();
# defer to the CPAN shell
...
...
@@ -363,7 +393,7 @@ sub install {
# see if we have successfully installed them
while
(
my
(
$pkg
,
$ver
)
=
splice
(
@modules
,
0
,
2
)
)
{
if
(
_version_cmp
(
_
load
(
$pkg
),
$ver
)
>=
0
)
{
if
(
_version_cmp
(
_
version_of
(
$pkg
),
$ver
)
>=
0
)
{
push
@installed
,
$pkg
;
}
elsif
(
$args
{
do_once
}
and
open
(
FAILED
,
'
>> .#autoinstall.failed
'
)
)
{
...
...
@@ -463,6 +493,11 @@ sub _cpanplus_config {
}
else
{
die
"
*** Cannot convert option
$key
= '
$value
' to CPANPLUS version.
\n
";
}
push
@config
,
'
prereqs
',
$value
;
}
elsif
(
$key
eq
'
force
'
)
{
push
@config
,
$key
,
$value
;
}
elsif
(
$key
eq
'
notest
'
)
{
push
@config
,
'
skiptest
',
$value
;
}
else
{
die
"
*** Cannot convert option
$key
to CPANPLUS version.
\n
";
}
...
...
@@ -497,10 +532,14 @@ sub _install_cpan {
# set additional options
while
(
my
(
$opt
,
$arg
)
=
splice
(
@config
,
0
,
2
)
)
{
(
$args
{
$opt
}
=
$arg
,
next
)
if
$opt
=~
/^force$/
;
# pseudo-option
if
$opt
=~
/^
(?:
force
|notest)
$/
;
# pseudo-option
$
CPAN::
Config
->
{
$opt
}
=
$arg
;
}
if
(
$args
{
notest
}
&&
(
not
CPAN::
Shell
->
can
('
notest
')))
{
die
"
Your version of CPAN is too old to support the 'notest' pragma
";
}
local
$
CPAN::
Config
->
{
prerequisites_policy
}
=
'
follow
';
while
(
my
(
$pkg
,
$ver
)
=
splice
(
@modules
,
0
,
2
)
)
{
...
...
@@ -519,8 +558,16 @@ sub _install_cpan {
delete
$INC
{
$inc
};
}
my
$rv
=
$args
{
force
}
?
CPAN::
Shell
->
force
(
install
=>
$pkg
)
:
CPAN::
Shell
->
install
(
$pkg
);
my
$rv
=
do
{
if
(
$args
{
force
})
{
CPAN::
Shell
->
force
(
install
=>
$pkg
)
}
elsif
(
$args
{
notest
})
{
CPAN::
Shell
->
notest
(
install
=>
$pkg
)
}
else
{
CPAN::
Shell
->
install
(
$pkg
)
}
};
$rv
||=
eval
{
$
CPAN::
META
->
instance
(
'
CPAN::Distribution
',
$obj
->
cpan_file
,
)
->
{
install
}
...
...
@@ -575,7 +622,7 @@ sub _update_to {
my
$ver
=
shift
;
return
if
_version_cmp
(
_
load
(
$class
),
$ver
)
>=
0
;
# no need to upgrade
if
_version_cmp
(
_
version_of
(
$class
),
$ver
)
>=
0
;
# no need to upgrade
if
(
_prompt
(
"
==> A newer version of
$class
(
$ver
) is required. Install?
",
...
...
@@ -660,16 +707,30 @@ sub _can_write {
# load a module and return the version it reports
sub
_load
{
my
$mod
=
pop
;
# class/instance
doesn't matter
my
$mod
=
pop
;
# method/function
doesn't matter
my
$file
=
$mod
;
$file
=~
s|::|/|g
;
$file
.=
'
.pm
';
local
$@
;
return
eval
{
require
$file
;
$mod
->
VERSION
}
||
(
$@
?
undef
:
0
);
}
# report version without loading a module
sub
_version_of
{
my
$mod
=
pop
;
# method/function doesn't matter
my
$file
=
$mod
;
$file
=~
s|::|/|g
;
$file
.=
'
.pm
';
foreach
my
$dir
(
@INC
)
{
next
if
ref
$dir
;
my
$path
=
File::
Spec
->
catfile
(
$dir
,
$file
);
next
unless
-
e
$path
;
require
ExtUtils::
MM_Unix
;
return
ExtUtils::
MM_Unix
->
parse_version
(
$path
);
}
return
undef
;
}
# Load CPAN.pm and it's configuration
sub
_load_cpan
{
return
if
$
CPAN::
VERSION
and
$
CPAN::
Config
and
not
@_
;
...
...
@@ -763,6 +824,35 @@ sub _make_args {
:
"
\$
(NOECHO)
\$
(NOOP)
"
);
my
$deps_list
=
join
(
'
,
',
@Missing
,
@Existing
);
$PostambleActionsUpgradeDeps
=
"
\$
(PERL) $0 --config=
$config
--upgradedeps=
$deps_list
";
my
$config_notest
=
join
(
'
,
',
(
UNIVERSAL::
isa
(
$Config
,
'
HASH
'
)
?
%
{
$Config
}
:
@
{
$Config
}),
'
notest
',
1
)
if
$Config
;
$PostambleActionsNoTest
=
(
(
$missing
and
not
$UnderCPAN
)
?
"
\$
(PERL) $0 --config=
$config_notest
--installdeps=
$missing
"
:
"
\$
(NOECHO)
\$
(NOOP)
"
);
$PostambleActionsUpgradeDepsNoTest
=
"
\$
(PERL) $0 --config=
$config_notest
--upgradedeps=
$deps_list
";
$PostambleActionsListDeps
=
'
@$(PERL) -le "print for @ARGV"
'
.
join
('
',
map
$Missing
[
$_
],
grep
$_
%
2
==
0
,
0
..
$#Missing
);
my
@all
=
(
@Missing
,
@Existing
);
$PostambleActionsListAllDeps
=
'
@$(PERL) -le "print for @ARGV"
'
.
join
('
',
map
$all
[
$_
],
grep
$_
%
2
==
0
,
0
..
$#all
);
return
%args
;
}
...
...
@@ -797,11 +887,15 @@ sub Write {
sub
postamble
{
$PostambleUsed
=
1
;
my
$fragment
;
return
<<"END_MAKE"
;
$fragment
.=
<<
"
AUTO_INSTALL
"
if
!
$InstallDepsTarget
;
config
::
installdeps
\
t
\
$
(
NOECHO
)
\
$
(
NOOP
)
AUTO_INSTALL
$fragment
.=
<<"END_MAKE";
checkdeps ::
\t\$(PERL) $0 --checkdeps
...
...
@@ -809,12 +903,28 @@ checkdeps ::
installdeps ::
\t$PostambleActions
installdeps_notest ::
\t$PostambleActionsNoTest
upgradedeps ::
\t$PostambleActionsUpgradeDeps
upgradedeps_notest ::
\t$PostambleActionsUpgradeDepsNoTest
listdeps ::
\t$PostambleActionsListDeps
listalldeps ::
\t$PostambleActionsListAllDeps
END_MAKE
return
$fragment
;
}
1
;
__END__
#line 1
071
#line 1
193
inc/Module/Install.pm
View file @
937bf2ab
...
...
@@ -31,7 +31,7 @@ BEGIN {
# This is not enforced yet, but will be some time in the next few
# releases once we can make sure it won't clash with custom
# Module::Install extensions.
$VERSION
=
'
1.0
1
';
$VERSION
=
'
1.0
6
';
# Storage for the pseudo-singleton
$MAIN
=
undef
;
...
...
@@ -451,7 +451,7 @@ sub _version ($) {
}
sub
_cmp
($$)
{
_version
(
$_
[
0
])
<=>
_version
(
$_
[
1
]);
_version
(
$_
[
1
])
<=>
_version
(
$_
[
2
]);
}
# Cloned from Params::Util::_CLASS
...
...
@@ -467,4 +467,4 @@ sub _CLASS ($) {
1
;
# Copyright 2008 - 201
1
Adam Kennedy.
# Copyright 2008 - 201
2
Adam Kennedy.
inc/Module/Install/AuthorTests.pm
deleted
100644 → 0
View file @
bb3fee14
#line 1
package
Module::Install::
AuthorTests
;
use
5.005
;
use
strict
;
use
Module::Install::
Base
;
use
Carp
();
#line 16
use
vars
qw{$VERSION $ISCORE @ISA}
;
BEGIN
{
$VERSION
=
'
0.002
';
$ISCORE
=
1
;
@ISA
=
qw{Module::Install::Base}
;
}
#line 42
sub
author_tests
{
my
(
$self
,
@dirs
)
=
@_
;
_add_author_tests
(
$self
,
\
@dirs
,
0
);
}
#line 56
sub
recursive_author_tests
{
my
(
$self
,
@dirs
)
=
@_
;
_add_author_tests
(
$self
,
\
@dirs
,
1
);
}
sub
_wanted
{
my
$href
=
shift
;
sub
{
/\.t$/
and
-
f
$_
and
$href
->
{
$
File::Find::
dir
}
=
1
}
}
sub
_add_author_tests
{
my
(
$self
,
$dirs
,
$recurse
)
=
@_
;
return
unless
$
Module::Install::
AUTHOR
;
my
@tests
=
$self
->
tests
?
(
split
/ /
,
$self
->
tests
)
:
'
t/*.t
';
# XXX: pick a default, later -- rjbs, 2008-02-24
my
@dirs
=
@$dirs
?
@$dirs
:
Carp::
confess
"
no dirs given to author_tests
";
@dirs
=
grep
{
-
d
}
@dirs
;
if
(
$recurse
)
{
require
File::
Find
;
my
%test_dir
;
File::Find::
find
(
_wanted
(
\
%test_dir
),
@dirs
);
$self
->
tests
(
join
'
',
@tests
,
map
{
"
$_
/*.t
"
}
sort
keys
%test_dir
);
}
else
{
$self
->
tests
(
join
'
',
@tests
,
map
{
"
$_
/*.t
"
}
sort
@dirs
);
}
}
#line 107
1
;
inc/Module/Install/AutoInstall.pm
View file @
937bf2ab
...
...
@@ -6,7 +6,7 @@ use Module::Install::Base ();
use
vars
qw{$VERSION @ISA $ISCORE}
;
BEGIN
{
$VERSION
=
'
1.0
1
';
$VERSION
=
'
1.0
6
';
@ISA
=
'
Module::Install::Base
';
$ISCORE
=
1
;
}
...
...
@@ -73,6 +73,17 @@ sub auto_install {
);
}
sub
installdeps_target
{
my
(
$self
,
@args
)
=
@_
;
$self
->
include
('
Module::AutoInstall
');
require
Module::
AutoInstall
;
Module::AutoInstall::
_installdeps_target
(
1
);
$self
->
auto_install
(
@args
);
}
sub
auto_install_now
{
my
$self
=
shift
;
$self
->
auto_install
(
@
_
);
...
...
inc/Module/Install/Base.pm
View file @
937bf2ab
...
...
@@ -4,7 +4,7 @@ package Module::Install::Base;
use
strict
'
vars
';
use
vars
qw{$VERSION}
;
BEGIN
{
$VERSION
=
'
1.0
1
';
$VERSION
=
'
1.0
6
';
}
# Suspend handler for "redefined" warnings
...
...
inc/Module/Install/Can.pm
View file @
937bf2ab
...
...
@@ -3,13 +3,12 @@ package Module::Install::Can;
use
strict
;
use
Config
();
use
File::
Spec
();
use
ExtUtils::
MakeMaker
();
use
Module::Install::
Base
();
use
vars
qw{$VERSION @ISA $ISCORE}
;
BEGIN
{
$VERSION
=
'
1.0
1
';
$VERSION
=
'
1.0
6
';
@ISA
=
'
Module::Install::Base
';
$ISCORE
=
1
;
}
...
...
@@ -29,7 +28,7 @@ sub can_use {
eval
{
require
$mod
;
$pkg
->
VERSION
(
$ver
||
0
);
1
};
}
#
c
heck if we can run some command
#
C
heck if we can run some command
sub
can_run
{
my
(
$self
,
$cmd
)
=
@_
;
...
...
@@ -38,14 +37,88 @@ sub can_run {
for
my
$dir
((
split
/$Config::Config{path_sep}/
,
$ENV
{
PATH
}),
'
.
')
{
next
if
$dir
eq
'';
my
$abs
=
File::
Spec
->
catfile
(
$dir
,
$_
[
1
]);
require
File::
Spec
;
my
$abs
=
File::
Spec
->
catfile
(
$dir
,
$cmd
);
return
$abs
if
(
-
x
$abs
or
$abs
=
MM
->
maybe_command
(
$abs
));
}
return
;
}
# can we locate a (the) C compiler
# Can our C compiler environment build XS files
sub
can_xs
{
my
$self
=
shift
;
# Ensure we have the CBuilder module
$self
->
configure_requires
(
'
ExtUtils::CBuilder
'
=>
0.27
);
# Do we have the configure_requires checker?
local
$@
;
eval
"
require ExtUtils::CBuilder;
";
if
(
$@
)
{
# They don't obey configure_requires, so it is
# someone old and delicate. Try to avoid hurting
# them by falling back to an older simpler test.
return
$self
->
can_cc
();
}
# Do we have a working C compiler
my
$builder
=
ExtUtils::
CBuilder
->
new
(
quiet
=>
1
,
);
unless
(
$builder
->
have_compiler
)
{
# No working C compiler
return
0
;
}
# Write a C file representative of what XS becomes
require
File::
Temp
;
my
(
$FH
,
$tmpfile
)
=
File::Temp::
tempfile
(
"
compilexs-XXXXX
",
SUFFIX
=>
'
.c
',
);
binmode
$FH
;
print
$FH
<<'END_C';
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
int main(int argc, char **argv) {
return 0;
}
int boot_sanexs() {
return 1;
}
END_C
close
$FH
;
# Can the C compiler access the same headers XS does
my
@libs
=
();
my
$object
=
undef
;
eval
{
local
$^W
=
0
;
$object
=
$builder
->
compile
(
source
=>
$tmpfile
,
);
@libs
=
$builder
->
link
(
objects
=>
$object
,
module_name
=>
'
sanexs
',
);
};
my
$result
=
$@
?
0
:
1
;
# Clean up all the build files
foreach
(
$tmpfile
,
$object
,
@libs
)
{
next
unless
defined
$_
;
1
while
unlink
;
}
return
$result
;
}
# Can we locate a (the) C compiler
sub
can_cc
{
my
$self
=
shift
;
my
@chunks
=
split
(
/ /
,
$
Config::
Config
{
cc
})
or
return
;
...
...
@@ -78,4 +151,4 @@ if ( $^O eq 'cygwin' ) {
__END__
#line
15
6
#line
23
6
inc/Module/Install/Fetch.pm
View file @
937bf2ab
...
...
@@ -6,7 +6,7 @@ use Module::Install::Base ();
use
vars
qw{$VERSION @ISA $ISCORE}
;
BEGIN
{
$VERSION
=
'
1.0
1
';
$VERSION
=
'
1.0
6
';
@ISA
=
'
Module::Install::Base
';
$ISCORE
=
1
;
}
...
...
inc/Module/Install/Include.pm
View file @
937bf2ab
...
...
@@ -6,7 +6,7 @@ use Module::Install::Base ();
use
vars
qw{$VERSION @ISA $ISCORE}
;
BEGIN
{
$VERSION
=
'
1.0
1
';
$VERSION
=
'
1.0
6
';
@ISA
=
'
Module::Install::Base
';
$ISCORE
=
1
;
}
...
...
inc/Module/Install/Makefile.pm
View file @
937bf2ab
...
...
@@ -8,7 +8,7 @@ use Fcntl qw/:flock :seek/;
use
vars
qw{$VERSION
@ISA
$ISCORE};
BEGIN
{
$VERSION
=
'1.0
1
'
;
$VERSION
=
'1.0
6
'
;
@ISA = 'Module
::
Install::Base';
$ISCORE
=
1
;
}
...
...
@@ -215,18 +215,22 @@ sub write {
require ExtUtils
::
MakeMaker;
if
(
$perl_version
and
$self->_cmp($perl_version,
'5.006'
)
>=
0
)
{
# MakeMaker can complain about module versions that include
# an underscore, even though its own version may contain one!
# Hence the funny regexp to get rid of it. See RT #35800
# for details.
my $v = $ExtUtils
::
MakeMaker::VERSION =~ /^(
\d
+
\.\d
+)/;
$self
->build_requires
(
'ExtUtils::MakeMaker'
=>
$v
)
;
$self
->configure_requires
(
'ExtUtils::MakeMaker'
=>
$v
)
;
# This previous attempted to inherit the version of
# ExtUtils::MakeMaker in use by the module author, but this
# was found to be untenable as some authors build releases
# using future dev versions of EU:MM that nobody else has.
# Instead, #toolchain suggests we use 6.59 which is the most
# stable version on CPAN at time of writing and is, to quote
# ribasushi, "not terminally fucked, > and tested enough".
# TODO: We will now need to maintain this over time to push
# the version up as new versions are released.
$self->build_requires( 'ExtUtils
::
MakeMaker' => 6.59 );
$self
->configure_requires
(
'ExtUtils::MakeMaker'
=>
6.59
)
;
}
else
{
# Allow legacy-compatibility with 5.005 by depending on the
# most recent EU:MM that supported 5.005.
$self
->build_requires
(
'ExtUtils::MakeMaker'
=>
6.
42
)
;
$self
->configure_requires
(
'ExtUtils::MakeMaker'
=>
6.
42
)
;
$self
->build_requires
(
'ExtUtils::MakeMaker'
=>
6.
36
)
;
$self
->configure_requires
(
'ExtUtils::MakeMaker'
=>
6.
36
)
;
}
# Generate the MakeMaker params
...
...
@@ -241,7 +245,6 @@ in a module, and provide its file path via 'version_from' (or
'all_from'
if
you
prefer)
in
Makefile.PL.
EOT
$DB
::
single = 1;
if
(
$self->tests
)
{
my
@
tests
=
split
' '
,
$self
->tests
;
my
%seen;
...
...
@@ -412,4 +415,4 @@ sub postamble {
__END__
#line 54
1
#line 54
4
inc/Module/Install/Metadata.pm
View file @
937bf2ab
...
...
@@ -6,7 +6,7 @@ use Module::Install::Base ();
use
vars
qw{$VERSION @ISA $ISCORE}
;
BEGIN
{
$VERSION
=
'
1.0
1
';