1use ExtUtils::MakeMaker; 2use ExtUtils::Constant 0.11 'WriteConstants'; 3WriteMakefile( 4 NAME => 'GDBM_File', 5 LIBS => ["-lgdbm", "-ldbm"], 6 XSPROTOARG => '-noprototypes', # XXX remove later? 7 VERSION_FROM => 'GDBM_File.pm', 8 realclean => {FILES=> 'const-c.inc const-xs.inc'}, 9 XS_VERSION => eval MM->parse_version('GDBM_File.pm'), #silence warnings if we are a dev release 10); 11 12my @names = qw(GDBM_CACHESIZE GDBM_CENTFREE GDBM_COALESCEBLKS 13 GDBM_FAST GDBM_FASTMODE GDBM_INSERT GDBM_NEWDB GDBM_NOLOCK 14 GDBM_OPENMASK GDBM_READER GDBM_REPLACE GDBM_SYNC GDBM_SYNCMODE 15 GDBM_WRCREAT GDBM_WRITER GDBM_NOMMAP GDBM_CLOEXEC GDBM_BSEXACT 16 GDBM_XVERIFY GDBM_PREREAD GDBM_NUMSYNC); 17 18push @names, { 19 name => $_, 20 type => "IV", 21 macro => [ "#if GDBM_VERSION_MAJOR > 1 || GDBM_VERSION_MINOR >= 21\n", 22 "#endif\n" ], 23 value => "$_", 24} foreach qw(GDBM_SNAPSHOT_OK GDBM_SNAPSHOT_BAD GDBM_SNAPSHOT_ERR 25 GDBM_SNAPSHOT_SAME GDBM_SNAPSHOT_SUSPICIOUS); 26 27# Basic error codes - these are supported by all versions of gdbm 28push @names, { 29 name => $_, 30 value => "$_", 31 type => "IV", 32 macro => 1 33} foreach qw( 34 GDBM_NO_ERROR 35 GDBM_MALLOC_ERROR 36 GDBM_BLOCK_SIZE_ERROR 37 GDBM_FILE_OPEN_ERROR 38 GDBM_FILE_WRITE_ERROR 39 GDBM_FILE_SEEK_ERROR 40 GDBM_FILE_READ_ERROR 41 GDBM_BAD_MAGIC_NUMBER 42 GDBM_EMPTY_DATABASE 43 GDBM_CANT_BE_READER 44 GDBM_CANT_BE_WRITER 45 GDBM_READER_CANT_DELETE 46 GDBM_READER_CANT_STORE 47 GDBM_READER_CANT_REORGANIZE 48 GDBM_UNKNOWN_UPDATE 49 GDBM_ITEM_NOT_FOUND 50 GDBM_REORGANIZE_FAILED 51 GDBM_CANNOT_REPLACE 52 GDBM_ILLEGAL_DATA 53 GDBM_OPT_ALREADY_SET 54 GDBM_OPT_ILLEGAL); 55 56# Error codes added in various versions of gdbm 57push @names, { 58 name => $_->[0], 59 value => "$_->[0]", 60 type => "IV", 61 macro => [ "#if GDBM_VERSION_MAJOR > 1 || $_->[1]\n", 62 "#endif\n" ], 63} foreach map { 64 my @vref = @{$_}[1..$#{$_}]; 65 my $cond; 66 if ($_->[2]) { 67 $cond = "GDBM_VERSION_MINOR > $_->[1] || ( GDBM_VERSION_MINOR == $_->[1] && GDBM_VERSION_PATCH >= $_->[2] )"; 68 } else { 69 $cond = "GDBM_VERSION_MINOR >= $_->[1]"; 70 } 71 map { [$_, $cond ] } @{$_->[0]} 72} ( # [ [ ERROR_CODE_NAMES ], MAJ [, MIN [, PAT]] ] 73 # where MAJ,MIN,PAT are major, minor and patchlevel numbers of the gdbm 74 # version which introduced ERROR_CODE_NAMES. 75 [[qw(GDBM_BYTE_SWAPPED GDBM_BAD_FILE_OFFSET GDBM_BAD_OPEN_FLAGS)], 9], 76 [[qw(GDBM_FILE_STAT_ERROR GDBM_FILE_EOF)], 10], 77 [[qw(GDBM_NO_DBNAME GDBM_ERR_FILE_OWNER GDBM_ERR_FILE_MODE)], 11], 78 [[qw(GDBM_UNKNOWN_ERROR GDBM_NEED_RECOVERY GDBM_BACKUP_FAILED 79 GDBM_DIR_OVERFLOW)], 13], 80 [[qw(GDBM_BAD_BUCKET GDBM_BAD_HEADER GDBM_BAD_AVAIL GDBM_BAD_HASH_TABLE 81 GDBM_BAD_DIR_ENTRY)], 15], 82 [[qw(GDBM_FILE_CLOSE_ERROR GDBM_FILE_SYNC_ERROR)], 17], 83 [[qw(GDBM_FILE_TRUNCATE_ERROR)], 18, 1], 84 [[qw(GDBM_BUCKET_CACHE_CORRUPTED GDBM_BAD_HASH_ENTRY)], 20], 85 [[qw(GDBM_MALFORMED_DATA GDBM_OPT_BADVAL GDBM_ERR_SNAPSHOT_CLONE 86 GDBM_ERR_REALPATH GDBM_ERR_USAGE)], 21] 87 ); 88 89 90WriteConstants( 91 NAME => 'GDBM_File', 92 DEFAULT_TYPE => 'IV', 93 BREAKOUT_AT => 8, 94 PROXYSUBS => {autoload => 1}, 95 NAMES => \@names 96); 97