-
+#!/usr/bin/perl -w
+use 5.008;
+use ExtUtils::MakeMaker;
use strict;
-# require at least 5.006, it doesn't even compile under 5.005
-require 5.006;
-
-# Load the Module::Install bundled in ./inc/
-use inc::Module::Install;
-
-name 'Devel-Size';
-
-# Get most of the details from the primary module
-all_from 'lib/Devel/Size.pm';
-
-requires 'DynaLoader' => 0;
-requires 'perl' => 5.006;
-
-recommends 'Devel::Size::Report' => 0.11;
-
-build_requires 'Test::More' => 0.42;
-
-license 'perl'; # from 5.8.8
-
-# It seems not to be possible to specifiy two authors here :/
-# Nor does a "maintainer" property exist
-author 'Tels <nospam-abuse@bloodgate.com>';
-
-# Do not index these
-no_index directory => 'examples';
-# Generate the Makefile
-WriteAll;
+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) {
+ if ($special{$_}) {
+ print FH <<"EOT";
+#ifdef $special{$_}
+ &$_,
+#endif
+EOT
+ } else {
+ print FH " &$_,\n";
+ }
+}
+
+close FH or die "Error closing $vtable_file: $!";
+
+WriteMakefile(
+ 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},
+);