This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Time-Piece to CPAN version 1.20
[perl5.git] / cpan / DB_File / Makefile.PL
CommitLineData
d8bf0b8c 1#! perl -w
07200f1b 2
d8bf0b8c
SH
3use strict ;
4use ExtUtils::MakeMaker 5.16 ;
88108326 5use Config ;
6
d8bf0b8c
SH
7die "DB_File needs Perl 5.004_05 or better. This is $]\n"
8 if $] <= 5.00404;
9
10my $VER_INFO ;
11my $LIB_DIR ;
12my $INC_DIR ;
13my $DB_NAME ;
14my $LIBS ;
15my $COMPAT185 = "" ;
16
17ParseCONFIG() ;
8e07c86e 18
d8bf0b8c
SH
19my @files = ('DB_File.pm', glob "t/*.t") ;
20UpDowngrade(@files);
21
22if (defined $DB_NAME)
23 { $LIBS = $DB_NAME }
24else {
25 if ($^O eq 'MSWin32')
26 { $LIBS = $Config{cc} =~ /gcc/ ? '-ldb' : '-llibdb' }
27 else
28 { $LIBS = '-ldb' }
50797850 29}
1f70e1ea 30
d8bf0b8c
SH
31# Solaris is special.
32#$LIBS .= " -lthread" if $^O eq 'solaris' ;
33
34# AIX is special.
35$LIBS .= " -lpthread" if $^O eq 'aix' ;
36
37# OS2 is a special case, so check for it now.
38my $OS2 = "" ;
39$OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ;
40
41my $WALL = '' ;
42#$WALL = ' -Wall ';
43
8e07c86e 44WriteMakefile(
88108326 45 NAME => 'DB_File',
d8bf0b8c 46 LIBS => ["-L${LIB_DIR} $LIBS"],
d8bf0b8c
SH
47 INC => "-I$INC_DIR",
48 VERSION_FROM => 'DB_File.pm',
49 XS_VERSION => eval MM->parse_version('DB_File.pm'),
88108326 50 XSPROTOARG => '-noprototypes',
d8bf0b8c
SH
51 DEFINE => "-D_NOT_CORE $OS2 $VER_INFO $COMPAT185 $WALL",
52 OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
53 ((ExtUtils::MakeMaker->VERSION() gt '6.30')
54 ? ('LICENSE' => 'perl')
55 : ()
f1aa208b
RGS
56 ),
57 (
d8bf0b8c
SH
58 $] >= 5.005
59 ? (ABSTRACT_FROM => 'DB_File.pm',
60 AUTHOR => 'Paul Marquess <pmqs@cpan.org>')
61 : ()
f1aa208b 62 ),
d8bf0b8c 63
f1aa208b 64
d8bf0b8c
SH
65 #OPTIMIZE => '-g',
66 'depend' => { 'Makefile' => 'config.in',
67 'version$(OBJ_EXT)' => 'version.c'},
68 'clean' => { FILES => 'constants.h constants.xs' },
69 'macro' => { INSTALLDIRS => 'perl', my_files => "@files" },
70 'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz',
71 DIST_DEFAULT => 'MyDoubleCheck tardist'},
07200f1b
PM
72 );
73
d8bf0b8c 74
07200f1b
PM
75my @names = qw(
76 BTREEMAGIC
77 BTREEVERSION
78 DB_LOCK
79 DB_SHMEM
80 DB_TXN
81 HASHMAGIC
82 HASHVERSION
83 MAX_PAGE_NUMBER
84 MAX_PAGE_OFFSET
85 MAX_REC_NUMBER
86 RET_ERROR
87 RET_SPECIAL
88 RET_SUCCESS
89 R_CURSOR
90 R_DUP
91 R_FIRST
92 R_FIXEDLEN
93 R_IAFTER
94 R_IBEFORE
95 R_LAST
96 R_NEXT
97 R_NOKEY
98 R_NOOVERWRITE
99 R_PREV
100 R_RECNOSYNC
101 R_SETCURSOR
102 R_SNAPSHOT
103 __R_UNUSED
88108326 104 );
8e07c86e 105
d8bf0b8c 106if (eval {require ExtUtils::Constant; 1}) {
07200f1b
PM
107 # Check the constants above all appear in @EXPORT in DB_File.pm
108 my %names = map { $_, 1} @names;
109 open F, "<DB_File.pm" or die "Cannot open DB_File.pm: $!\n";
110 while (<F>)
111 {
112 last if /^\s*\@EXPORT\s+=\s+qw\(/ ;
113 }
114
115 while (<F>)
116 {
117 last if /^\s*\)/ ;
118 /(\S+)/ ;
119 delete $names{$1} if defined $1 ;
120 }
121 close F ;
039d031f 122
07200f1b
PM
123 if ( keys %names )
124 {
125 my $missing = join ("\n\t", sort keys %names) ;
126 die "The following names are missing from \@EXPORT in DB_File.pm\n" .
127 "\t$missing\n" ;
128 }
129
039d031f 130
d8bf0b8c
SH
131 ExtUtils::Constant::WriteConstants(
132 NAME => 'DB_File',
133 NAMES => \@names,
134 C_FILE => 'constants.h',
135 XS_FILE => 'constants.xs',
136
137 );
138}
139else {
140 use File::Copy;
141 copy ('fallback.h', 'constants.h')
142 or die "Can't copy fallback.h to constants.h: $!";
143 copy ('fallback.xs', 'constants.xs')
144 or die "Can't copy fallback.xs to constants.xs: $!";
145}
146
147exit;
148
149
150sub MY::libscan
151{
152 my $self = shift ;
153 my $path = shift ;
154
155 return undef
156 if $path =~ /(~|\.bak)$/ ||
157 $path =~ /^\..*\.swp$/ ;
158
159 return $path;
160}
161
162
163sub MY::postamble { <<'EOM' } ;
164
165MyDoubleCheck:
166 @echo Checking config.in is setup for a release
167 @(grep "^LIB.*/usr/local/BerkeleyDB" config.in && \
168 grep "^INCLUDE.*/usr/local/BerkeleyDB" config.in && \
169 grep "^#DBNAME.*" config.in) >/dev/null || \
170 (echo config.in needs fixing ; exit 1)
171 @echo config.in is ok
172 @echo
173 @echo Checking DB_File.xs is ok for a release.
174 @(perl -ne ' exit 1 if /^\s*#\s*define\s+TRACE/ ; ' DB_File.xs || \
175 (echo DB_File.xs needs fixing ; exit 1))
176 @echo DB_File.xs is ok
177 @echo
178 @echo Checking for $$^W in files: $(my_files)
179 @perl -ne ' \
180 exit 1 if /^\s*local\s*\(\s*\$$\^W\s*\)/;' $(my_files) || \
181 (echo found unexpected $$^W ; exit 1)
182 @echo No $$^W found.
183 @echo
184 @echo Checking for 'use vars' in files: $(my_files)
185 @perl -ne ' \
186 exit 0 if /^__(DATA|END)__/; \
187 exit 1 if /^\s*use\s+vars/;' $(my_files) || \
188 (echo found unexpected "use vars"; exit 1)
189 @echo No 'use vars' found.
190 @echo
191 @echo All files are OK for a release.
192 @echo
193
194EOM
195
196
197
198sub ParseCONFIG
199{
200 my ($k, $v) ;
201 my @badkey = () ;
202 my %Info = () ;
203 my @Options = qw( INCLUDE LIB PREFIX HASH DBNAME COMPAT185 ) ;
204 my %ValidOption = map {$_, 1} @Options ;
205 my %Parsed = %ValidOption ;
206 my $CONFIG = 'config.in' ;
207
208 print "Parsing $CONFIG...\n" ;
209
210 # DBNAME & COMPAT185 are optional, so pretend they have
211 # been parsed.
212 delete $Parsed{'DBNAME'} ;
213 delete $Parsed{'COMPAT185'} ;
214 $Info{COMPAT185} = "No" ;
215
216
217 open(F, "$CONFIG") or die "Cannot open file $CONFIG: $!\n" ;
218 while (<F>) {
219 s/^\s*|\s*$//g ;
220 next if /^\s*$/ or /^\s*#/ ;
221 s/\s*#\s*$// ;
222
223 ($k, $v) = split(/\s+=\s+/, $_, 2) ;
224 $k = uc $k ;
225 if ($ValidOption{$k}) {
226 delete $Parsed{$k} ;
227 $Info{$k} = $v ;
228 }
229 else {
230 push(@badkey, $k) ;
231 }
232 }
233 close F ;
234
235 print "Unknown keys in $CONFIG ignored [@badkey]\n"
236 if @badkey ;
237
238 # check parsed values
239 my @missing = () ;
240 die "The following keys are missing from $CONFIG file: [@missing]\n"
241 if @missing = keys %Parsed ;
242
243 $INC_DIR = $ENV{'DB_FILE_INCLUDE'} || $Info{'INCLUDE'} ;
244 $LIB_DIR = $ENV{'DB_FILE_LIB'} || $Info{'LIB'} ;
245 $DB_NAME = $ENV{'DB_FILE_NAME'} || $Info{'DBNAME'} ;
246 $COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API"
247 if (defined $ENV{'DB_FILE_COMPAT185'} &&
248 $ENV{'DB_FILE_COMPAT185'} =~ /^\s*(on|true|1)\s*$/i) ||
249 $Info{'COMPAT185'} =~ /^\s*(on|true|1)\s*$/i ;
250 my $PREFIX = $Info{'PREFIX'} ;
251 my $HASH = $Info{'HASH'} ;
252
253 $VER_INFO = "-DmDB_Prefix_t=${PREFIX} -DmDB_Hash_t=${HASH}" ;
254
255 print <<EOM if 0 ;
256 INCLUDE [$INC_DIR]
257 LIB [$LIB_DIR]
258 HASH [$HASH]
259 PREFIX [$PREFIX]
260 DBNAME [$DB_NAME]
261
262EOM
263
264 print "Looks Good.\n" ;
265
266}
267
268sub UpDowngrade
269{
270 my @files = @_ ;
271
272 # our is stable from 5.6.0 onward
273 # warnings is stable from 5.6.1 onward
274
275 # Note: this code assumes that each statement it modifies is not
276 # split across multiple lines.
277
278
279 my $warn_sub ;
280 my $our_sub ;
281
282 if ($] < 5.006001) {
283 # From: use|no warnings "blah"
284 # To: local ($^W) = 1; # use|no warnings "blah"
285 #
286 # and
287 #
288 # From: warnings::warnif(x,y);
289 # To: $^W && carp(y); # warnif -- x
290 $warn_sub = sub {
291 s/^(\s*)(no\s+warnings)/${1}local (\$^W) = 0; #$2/ ;
292 s/^(\s*)(use\s+warnings)/${1}local (\$^W) = 1; #$2/ ;
293
294 s/^(\s*)warnings::warnif\s*\((.*?)\s*,\s*(.*?)\)\s*;/${1}\$^W && carp($3); # warnif - $2/ ;
295 };
296 }
297 else {
298 # From: local ($^W) = 1; # use|no warnings "blah"
299 # To: use|no warnings "blah"
300 #
301 # and
302 #
303 # From: $^W && carp(y); # warnif -- x
304 # To: warnings::warnif(x,y);
305 $warn_sub = sub {
306 s/^(\s*)local\s*\(\$\^W\)\s*=\s*\d+\s*;\s*#\s*((no|use)\s+warnings.*)/$1$2/ ;
307 s/^(\s*)\$\^W\s+\&\&\s*carp\s*\((.*?)\)\s*;\s*#\s*warnif\s*-\s*(.*)/${1}warnings::warnif($3, $2);/ ;
308 };
309 }
310
311 if ($] < 5.006000) {
312 $our_sub = sub {
313 if ( /^(\s*)our\s+\(\s*([^)]+\s*)\)/ ) {
314 my $indent = $1;
315 my $vars = join ' ', split /\s*,\s*/, $2;
316 $_ = "${indent}use vars qw($vars);\n";
317 }
318 };
319 }
320 else {
321 $our_sub = sub {
322 if ( /^(\s*)use\s+vars\s+qw\((.*?)\)/ ) {
323 my $indent = $1;
324 my $vars = join ', ', split ' ', $2;
325 $_ = "${indent}our ($vars);\n";
326 }
327 };
328 }
329
330 foreach (@files)
331 { doUpDown($our_sub, $warn_sub, $_) }
332}
333
334
335sub doUpDown
336{
337 my $our_sub = shift;
338 my $warn_sub = shift;
339
340 local ($^I) = ".bak" ;
341 local (@ARGV) = shift;
342
343 while (<>)
344 {
345 print, last if /^__(END|DATA)__/ ;
346
347 &{ $our_sub }();
348 &{ $warn_sub }();
349 print ;
350 }
351
352 return if eof ;
353
354 while (<>)
355 { print }
356}
357
358# end of file Makefile.PL