#!/usr/bin/perl # Build.PL # Script to build and install this distribution use strict; use warnings; use Config; use Module::Build; my @flags; # Determine what the 32bit unsigned type is. Based on the result, we can # pass two flags to the C code which will affect their behaviour. # # USE_PORTABLE will determine whether we try to make our bit operations # portable by ANDing them with 0xffffffff. This cuts off higher bits, # so that our result is good. # # USE_INT will determine whether to use the 'int' type compared to 'long'. # While 'long' is guaranteed to be 32 bits or larger, on some 64-bit systems, # int is 32 bits and long is 64 bits. On these systems we force use of int. if ($Config{intsize} == 4) { # Excellent, we've got a 32-bit type. It probably doesn't matter whether we # use int or long here, if they are the same size. However, they would be # just as fast anyway, I think. push(@flags, '-DUSE_INT'); } else { # Use the 'portable' version and hope for the best. It doesn't seem to work # very well right now, hopefully it's fixed for fully-64bit architectures # later. push(@flags, '-DUSE_PORTABLE'); } # Note that even though they are currently presented that way, this does not # necessarily mean that we must either USE_INT or USE_PORTABLE. There may be # real cases where we don't want to USE_INT (and instead use long's, if they # are somehow faster than ints) but are absolutely sure they are only 32bits. # In that case we wouldn't need to USE_PORTABLE either. my $builder = Module::Build->new( module_name => 'Math::Random::ISAAC::XS', license => 'unrestricted', dist_version_from => 'lib/Math/Random/ISAAC/XS.pm', dynamic_config => 1, # Location of our special C and XS source files c_source => 'src', xs_files => { 'src/ISAAC.xs' => 'lib/Math/Random/ISAAC/XS.xs', }, extra_compiler_flags => \@flags, # Prerequisites generated from dist.ini by ModuleBuild::Custom 'build_requires' => { 'ExtUtils::CBuilder' => '0', 'ExtUtils::ParseXS' => '0', 'Module::Build' => '0.2808_01', 'Test::More' => '0.62', 'Test::NoWarnings' => '0.084' }, 'configure_requires' => { 'Module::Build' => '0.2808_01' }, 'recommends' => { 'Math::Random::ISAAC' => '0' }, 'requires' => { 'perl' => '5.006' }, add_to_cleanup => [ 'Math-Random-ISAAC-XS-*' ], ); $builder->create_build_script();