|
Packit |
cf0d07 |
require 5.004;
|
|
Packit |
cf0d07 |
use ExtUtils::MakeMaker;
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
use Config qw(%Config);
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
for (@ARGV) {
|
|
Packit |
cf0d07 |
/^-pm/ and $no_xs = 1;
|
|
Packit |
cf0d07 |
/^-xs/ and $no_xs = 0;
|
|
Packit |
cf0d07 |
}
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
sub init {
|
|
Packit |
cf0d07 |
my $hash = $_[1];
|
|
Packit |
cf0d07 |
if ($no_xs) {
|
|
Packit |
cf0d07 |
@{$hash}{XS,C} = ( {}, [] );
|
|
Packit |
cf0d07 |
}
|
|
Packit |
cf0d07 |
$hash;
|
|
Packit |
cf0d07 |
}
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
sub write_makefile {
|
|
Packit |
cf0d07 |
WriteMakefile(
|
|
Packit |
cf0d07 |
NAME => 'Digest::CRC',
|
|
Packit |
cf0d07 |
VERSION_FROM => 'lib/Digest/CRC.pm', # finds $VERSION
|
|
Packit |
cf0d07 |
PL_FILES => {},
|
|
Packit |
cf0d07 |
CONFIGURE => \&init,
|
|
Packit |
cf0d07 |
clean => {FILES => 'test.c typemap'}
|
|
Packit |
cf0d07 |
);
|
|
Packit |
cf0d07 |
}
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
sub no_cc {
|
|
Packit |
cf0d07 |
$no_xs = 1;
|
|
Packit |
cf0d07 |
print <<"EDQ";
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
I cannot determine if you have a C compiler
|
|
Packit |
cf0d07 |
so I will install a perl-only implementation
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
You can force installation of the XS version with
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
perl Makefile.PL -xs
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
EDQ
|
|
Packit |
cf0d07 |
write_makefile();
|
|
Packit |
cf0d07 |
exit;
|
|
Packit |
cf0d07 |
}
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
if ($] < 5.006001) {
|
|
Packit |
cf0d07 |
open(TYPEMAP,">typemap");
|
|
Packit |
cf0d07 |
print TYPEMAP <<'EOS';
|
|
Packit |
cf0d07 |
NV T_NV
|
|
Packit |
cf0d07 |
UV T_UV
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
INPUT
|
|
Packit |
cf0d07 |
T_NV
|
|
Packit |
cf0d07 |
$var = ($type)SvNV($arg)
|
|
Packit |
cf0d07 |
T_UV
|
|
Packit |
cf0d07 |
$var = ($type)SvUV($arg)
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
OUTPUT
|
|
Packit |
cf0d07 |
T_NV
|
|
Packit |
cf0d07 |
sv_setnv($arg, (NV)$var);
|
|
Packit |
cf0d07 |
T_UV
|
|
Packit |
cf0d07 |
sv_setuv($arg, (UV)$var);
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
EOS
|
|
Packit |
cf0d07 |
close(TYPEMAP);
|
|
Packit |
cf0d07 |
}
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
write_makefile();
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
exit if defined $no_xs;
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
print "Testing if you have a C compiler\n";
|
|
Packit |
cf0d07 |
|
|
Packit |
cf0d07 |
open(F,">test.c") or no_cc();
|
|
Packit |
cf0d07 |
print F <
|
|
Packit |
cf0d07 |
int main() { return 0; }
|
|
Packit |
cf0d07 |
EOF
|
|
Packit |
cf0d07 |
close(F) or no_cc();
|
|
Packit |
cf0d07 |
$make = $Config{make} || 'make';
|
|
Packit |
cf0d07 |
system("$make test$Config{obj_ext}") and no_cc();
|
|
Packit |
cf0d07 |
|