use
vars
qw{$VERSION @ISA $ISCORE}
;
BEGIN {
$VERSION
=
'1.12'
;
@ISA
=
'Module::Install::Base'
;
$ISCORE
= 1;
}
sub
can_use {
my
(
$self
,
$mod
,
$ver
) =
@_
;
$mod
=~ s{::|\\}{/}g;
$mod
.=
'.pm'
unless
$mod
=~ /\.pm$/i;
my
$pkg
=
$mod
;
$pkg
=~ s{/}{::}g;
$pkg
=~ s{\.pm$}{}i;
local
$@;
eval
{
require
$mod
;
$pkg
->VERSION(
$ver
|| 0); 1 };
}
sub
can_run {
my
(
$self
,
$cmd
) =
@_
;
my
$_cmd
=
$cmd
;
return
$_cmd
if
(-x
$_cmd
or
$_cmd
= MM->maybe_command(
$_cmd
));
for
my
$dir
((
split
/
$Config::Config
{path_sep}/,
$ENV
{PATH}),
'.'
) {
next
if
$dir
eq
''
;
my
$abs
= File::Spec->catfile(
$dir
,
$cmd
);
return
$abs
if
(-x
$abs
or
$abs
= MM->maybe_command(
$abs
));
}
return
;
}
sub
can_xs {
my
$self
=
shift
;
$self
->configure_requires(
'ExtUtils::CBuilder'
=> 0.27 );
local
$@;
eval
"require ExtUtils::CBuilder;"
;
if
( $@ ) {
return
$self
->can_cc();
}
my
$builder
= ExtUtils::CBuilder->new(
quiet
=> 1,
);
unless
(
$builder
->have_compiler ) {
return
0;
}
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
;
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;
foreach
(
$tmpfile
,
$object
,
@libs
) {
next
unless
defined
$_
;
1
while
unlink
;
}
return
$result
;
}
sub
can_cc {
my
$self
=
shift
;
my
@chunks
=
split
(/ /,
$Config::Config
{cc}) or
return
;
while
(
@chunks
) {
return
$self
->can_run(
"@chunks"
) || (
pop
(
@chunks
),
next
);
}
return
;
}
if
( $^O eq
'cygwin'
) {
if
( !
defined
(
&ExtUtils::MM_Cygwin::maybe_command
) ) {
*ExtUtils::MM_Cygwin::maybe_command
=
sub
{
my
(
$self
,
$file
) =
@_
;
if
(
$file
=~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can(
'maybe_command'
)) {
ExtUtils::MM_Win32->maybe_command(
$file
);
}
else
{
ExtUtils::MM_Unix->maybe_command(
$file
);
}
}
}
}
1;