1use strict; 2use warnings; 3 4use ExtUtils::MakeMaker ; 5use ExtUtils::Constant qw(WriteConstants); 6use Config ; 7 8# OS2 is a special case, so check for it now. 9my $OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ; 10 11my $LIB = "-ldb" ; 12# so is win32 13$LIB = "-llibdb" if $^O eq 'MSWin32' ; 14 15WriteMakefile( 16 NAME => 'DB_File', 17 #LIBS => ["-L/usr/local/lib $LIB"], 18 MAN3PODS => {}, # Pods will be built by installman. 19 #INC => '-I/usr/local/include', 20 VERSION_FROM => 'DB_File.pm', 21 OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)', 22 XSPROTOARG => '-noprototypes', 23 DEFINE => $OS2 || "", 24 INC => ($^O eq "MacOS" ? "-i ::::db:include" : ""), 25 'depend' => {'version$(OBJ_EXT)' => 'version.c'}, 26 'clean' => {FILES => 'constants.h constants.xs'}, 27 ); 28 29my @names = qw( 30 BTREEMAGIC 31 BTREEVERSION 32 DB_LOCK 33 DB_SHMEM 34 DB_TXN 35 HASHMAGIC 36 HASHVERSION 37 MAX_PAGE_NUMBER 38 MAX_PAGE_OFFSET 39 MAX_REC_NUMBER 40 RET_ERROR 41 RET_SPECIAL 42 RET_SUCCESS 43 R_CURSOR 44 R_DUP 45 R_FIRST 46 R_FIXEDLEN 47 R_IAFTER 48 R_IBEFORE 49 R_LAST 50 R_NEXT 51 R_NOKEY 52 R_NOOVERWRITE 53 R_PREV 54 R_RECNOSYNC 55 R_SETCURSOR 56 R_SNAPSHOT 57 __R_UNUSED 58 ); 59 60 # Check the constants above all appear in @EXPORT in DB_File.pm 61 my %names = map { $_, 1} @names; 62 open F, "<DB_File.pm" or die "Cannot open DB_File.pm: $!\n"; 63 while (<F>) 64 { 65 last if /^\s*\@EXPORT\s+=\s+qw\(/ ; 66 } 67 68 while (<F>) 69 { 70 last if /^\s*\)/ ; 71 /(\S+)/ ; 72 delete $names{$1} if defined $1 ; 73 } 74 close F ; 75 76 if ( keys %names ) 77 { 78 my $missing = join ("\n\t", sort keys %names) ; 79 die "The following names are missing from \@EXPORT in DB_File.pm\n" . 80 "\t$missing\n" ; 81 } 82 83 84 WriteConstants( NAME => 'DB_File', 85 NAMES => \@names, 86 C_FILE => 'constants.h', 87 XS_FILE => 'constants.xs', 88 ); 89