Blame Makefile.PL

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