1use 5.008; 2use ExtUtils::MakeMaker; 3use ExtUtils::Constant 0.11 'WriteConstants'; 4use Config; 5 6my $dtrace_o = $Config{dtraceobject} ? ' dtrace$(OBJ_EXT)' : ''; 7 8WriteMakefile( 9 'NAME' => 'XS::APItest', 10 'VERSION_FROM' => 'APItest.pm', # finds $VERSION 11 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1 12 ABSTRACT_FROM => 'APItest.pm', # retrieve abstract from module 13 AUTHOR => 'Tim Jenness <t.jenness@jach.hawaii.edu>, Christian Soeller <csoelle@mph.auckland.ac.nz>, Hugo van der Sanden <hv@crypt.compulink.co.uk>, Andrew Main (Zefram) <zefram@fysh.org>', 14 'C' => ['exception.c', 'core.c', 'notcore.c'], 15 'OBJECT' => '$(BASEEXT)$(OBJ_EXT) XSUB-undef-XS_VERSION$(OBJ_EXT) XSUB-redefined-macros$(OBJ_EXT) $(O_FILES)'. $dtrace_o, 16 realclean => {FILES => 'const-c.inc const-xs.inc'}, 17 ($Config{gccversion} && $Config{d_attribute_deprecated} ? 18 (CCFLAGS => $Config{ccflags} . ' -Wno-deprecated-declarations') : ()), 19 depend => { 'core.o' => 'core_or_not.inc', 20 'notcore.o' => 'core_or_not.inc' }, 21); 22 23my @names = (qw(HV_DELETE HV_DISABLE_UVAR_XKEY HV_FETCH_ISSTORE 24 HV_FETCH_ISEXISTS HV_FETCH_LVALUE HV_FETCH_JUST_SV 25 G_SCALAR G_LIST G_VOID G_DISCARD G_EVAL G_NOARGS 26 G_KEEPERR G_NODEBUG G_METHOD G_FAKINGEVAL G_RETHROW 27 GV_NOADD_NOINIT 28 SV_GMAGIC SV_SKIP_OVERLOAD 29 IS_NUMBER_IN_UV IS_NUMBER_GREATER_THAN_UV_MAX 30 IS_NUMBER_NOT_INT IS_NUMBER_NEG IS_NUMBER_INFINITY 31 IS_NUMBER_NAN IS_NUMBER_TRAILING PERL_SCAN_TRAILING 32 PERL_LOADMOD_DENY PERL_LOADMOD_NOIMPORT PERL_LOADMOD_IMPORT_OPS 33 ), 34 {name=>"G_WANT", default=>["IV", "G_LIST|G_VOID"]}); 35 36open my $fh, '<', '../../overload.h' or die "Can't open ../../overload.h: $!"; 37while (<$fh>) { 38 push @names, {name => $1, macro => 1} if /^\s+([A-Za-z_0-9]+_amg),/; 39} 40 41WriteConstants( 42 PROXYSUBS => 1, 43 NAME => 'XS::APItest', 44 NAMES => \@names, 45 ); 46 47sub MY::install { "install ::\n" }; 48 49 50sub MY::postamble 51{ 52 package MY; 53 my $post = shift->SUPER::postamble(@_); 54 use Config; 55 return $post unless $Config{dtraceobject}; 56 57 # core.o is build using PERL_CORE, so picks up any dtrace probes 58 59 $post .= <<POSTAMBLE; 60 61DTRACE_D = ../../perldtrace.d 62 63dtrace\$(OBJ_EXT): \$(DTRACE_D) core\$(OBJ_EXT) 64 $Config{dtrace} -G -s \$(DTRACE_D) -o dtrace\$(OBJ_EXT) core\$(OBJ_EXT) || \\ 65 ( \$(ECHO) >dtrace.c && \$(CCCMD) \$(CCCDLFLAGS) dtrace.c && rm -f dtrace.c ) 66POSTAMBLE 67 68 return $post; 69} 70