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