our
@EXPORT
=
qw[compile_test_lib compile_cpp_test_lib is_approx]
;
my
$OS
= $^O;
my
@cleanup
;
sub
compile_test_lib (
$name
) {
my
$libname
=
$name
.
'.'
.
$Config
{so};
my
@cmds
;
if
(
$OS
eq
'MSWin32'
) {
@cmds
= (
"cl /LD /EHsc /Fe$libname t/src/$name.c"
,
"gcc --shared -fPIC -DBUILD_LIB -o t/$libname t/src/$name.c"
);
}
else
{
@cmds
= (
"gcc --shared -fPIC -DBUILD_LIB -o t/$libname t/src/$name.c"
,
"clang -stdlib=libc --shared -fPIC -o t/$libname t/src/$name.c"
);
}
my
(
@fails
,
$succeeded
);
for
my
$cmd
(
@cmds
) {
last
if
!
system
(
qq[$cmd 2>&1]
);
}
push
@cleanup
,
$libname
;
}
sub
compile_cpp_test_lib (
$name
) {
my
$libname
=
$name
.
'.'
.
$Config
{so};
my
@cmds
;
if
(
$OS
eq
'MSWin32'
) {
@cmds
= (
"cl /LD /EHsc /Fe$libname t/src/$name.cpp"
,
"g++ --shared -fPIC -DBUILD_LIB -o t/$libname t/src/$name.cpp"
);
}
else
{
@cmds
= (
"g++ --shared -fPIC -DBUILD_LIB -o t/$libname t/src/$name.cpp"
,
"clang++ -stdlib=libc++ --shared -fPIC -o t/$libname t/src/$name.cpp"
);
}
my
(
@fails
,
$succeeded
);
for
my
$cmd
(
@cmds
) {
last
if
!
system
(
qq[$cmd 2>&1]
);
}
push
@cleanup
,
$libname
;
}
END {
unlink
$_
for
@cleanup
;
}
sub
is_approx (
$actual
,
$expected
,
$desc
) {
ok
abs
(
$actual
-
$expected
) < 1e-6,
$desc
;
}
};
1;