ppport.h defined NV if necessary, so no need to duplicate that.
[p5sagit/Devel-Size.git] / Makefile.PL
index 6426fb2..2f91101 100644 (file)
@@ -1,11 +1,50 @@
+#!/usr/bin/perl -w
+use 5.008;
 use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
+use strict;
+
+use Config;
+(unpack "B*", pack "N", $Config{ptrsize}) =~ /^0+1(0+)$/
+    or die "Your pointer size of $Config{ptrsize} is very confusing";
+my $ptr_bits = length $1;
+
+my $svh = "$Config{archlibexp}/CORE/perl.h";
+my $vtable_file = 'vtables.inc';
+
+my %vtables;
+open FH, "<$svh"
+    or die "Can't open $svh ($!) - is your perl install missing its headers?";
+while (<FH>) {
+    next unless /^\s+(PL_vtbl_[a-z]+),\s*$/ or /^EXT MGVTBL (PL_vtbl_[a-z]+) =/;
+    ++$vtables{$1};
+}
+warn "Didn't find any vtable names in $svh" unless %vtables;
+close FH;
+
+
+my %special = (
+              PL_vtbl_collxfrm => 'USE_LOCALE_COLLATE',
+              PL_vtbl_mutex => 'USE_5005THREADS',
+);
+
+open FH, ">$vtable_file" or die "Can't open $vtable_file: $!";
+foreach (sort keys %vtables) {
+    print FH "#ifdef $special{$_}\n" if ($special{$_});
+    if ($Config{gccversion}) {
+       print FH "    &$_,\n";
+    } else {
+       print FH "    check_new(st, &$_);\n";
+    }
+    print FH "#endif\n" if ($special{$_});
+}
+
+close FH or die "Error closing $vtable_file: $!";
+
 WriteMakefile(
-    'NAME'             => 'Devel::Size',
-    'VERSION_FROM'     => 'Size.pm', # finds $VERSION
-    'PREREQ_PM'                => {}, # e.g., Module::Name => 1.1
-    'LIBS'             => [''], # e.g., '-lm'
-    'DEFINE'           => '', # e.g., '-DHAVE_SOMETHING'
-    'INC'              => '', # e.g., '-I/usr/include/other'
+             NAME => 'Devel::Size',
+             VERSION_FROM => 'lib/Devel/Size.pm',
+             DEFINE => "-DALIGN_BITS=$ptr_bits",
+             (eval $ExtUtils::MakeMaker::VERSION >= 6.47 ? (MIN_PERL_VERSION => '5.008') : ()),
+             (eval $ExtUtils::MakeMaker::VERSION >= 6.31 ? (LICENSE => 'perl') : ()),
+             realclean => {FILES=> $vtable_file},
 );