This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Get EUMM basic.t passing again on Win32.
[perl5.git] / cpan / Compress-Raw-Zlib / Makefile.PL
CommitLineData
25f0751f
PM
1#! perl -w
2
3use strict ;
589c1691 4require 5.006 ;
25f0751f
PM
5
6use private::MakeUtil;
7use ExtUtils::MakeMaker 5.16 ;
258133d1 8use ExtUtils::Install (); # only needed to check for version
df4abfca 9use Config;
25f0751f
PM
10
11my $ZLIB_LIB ;
12my $ZLIB_INCLUDE ;
13my $BUILD_ZLIB = 0 ;
14my $OLD_ZLIB = '' ;
15my $WALL = '' ;
16my $GZIP_OS_CODE = -1 ;
9f44f717 17my $USE_PPPORT_H = ($ENV{PERL_CORE}) ? '' : '-DUSE_PPPORT_H';
df4abfca 18my $OPTIMIZE = $Config{'optimize'};
a69492f5
CBW
19if ($Config{'gccversion'} and $OPTIMIZE =~ /-g (gdb)? 3/x) {
20 $OPTIMIZE =~ s/-g(gdb)?3/-g/g; # [88936] out of memory with -g3 since 2.062
df4abfca 21}
25f0751f
PM
22
23#$WALL = ' -pedantic ' if $Config{'cc'} =~ /gcc/ ;
24#$WALL = ' -Wall -Wno-comment ' if $Config{'cc'} =~ /gcc/ ;
25
258133d1
PM
26# Ticket #18986 says that ExtUtils::Install 1.39 fixes the in-use issue
27# on win32/cygwin, so make the code below conditional on the version of
28# ExtUtils::Install.
29
30# Don't ask if MM_USE_DEFAULT is set -- enables perl core building on cygwin
31if ($^O =~ /cygwin/i and $ExtUtils::Install::VERSION < 1.39
32 and not ($ENV{PERL_MM_USE_DEFAULT} or $ENV{PERL_CORE}))
25f0751f
PM
33{
34 print <<EOM ;
35
36I see you are running Cygwin.
37
258133d1
PM
38Please note that this module cannot be installed on Cygwin using the CPAN
39shell. The CPAN Shell uses Compress::Raw::Zlib internally and it is not
25f0751f
PM
40possible to delete an active DLL.
41
42If you are running the CPAN shell, please exit it and install this module
43by hand by running 'make install' under the directory
44
45 ~/.cpan/build/Compress-Raw-Zlib-VERSION
46
47EOM
48
49 print "Do you want to continue? [Y/N]: " ;
50 my $answer = <STDIN> ;
51
52 if ($answer =~ /^yes|y/i)
53 {
54 print "continuing...\n"
55 }
56 else
57 {
58 print "exiting...\n" ;
59 exit 1 ;
60 }
61
62
63}
64
65ParseCONFIG() ;
66
67UpDowngrade(getPerlFiles('MANIFEST'))
68 unless $ENV{PERL_CORE};
69
70WriteMakefile(
71 NAME => 'Compress::Raw::Zlib',
72 VERSION_FROM => 'lib/Compress/Raw/Zlib.pm',
73 INC => "-I$ZLIB_INCLUDE" ,
589c1691 74 DEFINE => "-DNO_VIZ -DZ_SOLO $OLD_ZLIB $WALL -DGZIP_OS_CODE=$GZIP_OS_CODE $USE_PPPORT_H" ,
25f0751f
PM
75 XS => { 'Zlib.xs' => 'Zlib.c'},
76 'depend' => { 'Makefile' => 'config.in' },
77 'clean' => { FILES => '*.c constants.h constants.xs' },
78 'dist' => { COMPRESS => 'gzip',
79 TARFLAGS => '-chvf',
80 SUFFIX => 'gz',
81 DIST_DEFAULT => 'MyTrebleCheck tardist',
82 },
83
84 (
25f0751f
PM
85 $BUILD_ZLIB
86 ? zlib_files($ZLIB_LIB)
87 : (LIBS => [ "-L$ZLIB_LIB -lz " ])
88 ),
df4abfca
CBW
89 OPTIMIZE => $OPTIMIZE,
90
5c314eab 91 INSTALLDIRS => ($] >= 5.009 && $] < 5.011 ? 'perl' : 'site'),
d56f7e4c 92
7c8257d9
CBW
93 META_MERGE => {
94 no_index => {
95 directory => [ 't', 'private' ],
96 },
97 },
98
4e7676c7
SP
99 ((ExtUtils::MakeMaker->VERSION() gt '6.30') ?
100 ('LICENSE' => 'perl') : ()),
101
25f0751f
PM
102) ;
103
f02c02ec
CBW
104sub version_Macro
105{
106 my $ver = shift ;
107
108 return [ "#if ZLIB_VERNUM >= 0x$ver\n", "#endif\n" ];
109}
110
25f0751f
PM
111my @names = qw(
112
113 DEF_WBITS
114 MAX_MEM_LEVEL
115 MAX_WBITS
116 OS_CODE
117
118 Z_ASCII
119 Z_BEST_COMPRESSION
120 Z_BEST_SPEED
121 Z_BINARY
122 Z_BLOCK
123 Z_BUF_ERROR
124 Z_DATA_ERROR
125 Z_DEFAULT_COMPRESSION
126 Z_DEFAULT_STRATEGY
127 Z_DEFLATED
128 Z_ERRNO
129 Z_FILTERED
130 Z_FINISH
131 Z_FIXED
132 Z_FULL_FLUSH
133 Z_HUFFMAN_ONLY
134 Z_MEM_ERROR
135 Z_NEED_DICT
136 Z_NO_COMPRESSION
137 Z_NO_FLUSH
138 Z_NULL
139 Z_OK
140 Z_PARTIAL_FLUSH
141 Z_RLE
142 Z_STREAM_END
143 Z_STREAM_ERROR
144 Z_SYNC_FLUSH
145 Z_UNKNOWN
146 Z_VERSION_ERROR
147
148);
149 #ZLIB_VERNUM
150
f02c02ec
CBW
151my %verSpecificNames = (
152 Z_TREES => '1240',
153);
154
25f0751f
PM
155if (eval {require ExtUtils::Constant; 1}) {
156 # Check the constants above all appear in @EXPORT in Zlib.pm
f02c02ec 157 my %names = %verSpecificNames, map { $_, 1} @names, 'ZLIB_VERSION';
25f0751f
PM
158 open F, "<lib/Compress/Raw/Zlib.pm" or die "Cannot open Zlib.pm: $!\n";
159 while (<F>)
160 {
161 last if /^\s*\@EXPORT\s+=\s+qw\(/ ;
162 }
163
164 while (<F>)
165 {
166 last if /^\s*\)/ ;
167 /(\S+)/ ;
168 delete $names{$1} if defined $1 ;
169 }
170 close F ;
171
172 if ( keys %names )
173 {
174 my $missing = join ("\n\t", sort keys %names) ;
175 die "The following names are missing from \@EXPORT in Zlib.pm\n" .
176 "\t$missing\n" ;
177 }
178
f02c02ec
CBW
179 push @names, { name => 'ZLIB_VERSION', type => 'PV' };
180
181 push @names, map { { name => $_,
182 macro => version_Macro $verSpecificNames{$_}
183 }
184 }
185 keys %verSpecificNames ;
25f0751f
PM
186
187 ExtUtils::Constant::WriteConstants(
188 NAME => 'Zlib',
189 NAMES => \@names,
190 C_FILE => 'constants.h',
191 XS_FILE => 'constants.xs',
192
193 );
f02c02ec 194
25f0751f
PM
195}
196else {
197 foreach my $name (qw( constants.h constants.xs ))
198 {
199 my $from = catfile('fallback', $name);
200 copy ($from, $name)
201 or die "Can't copy $from to $name: $!";
202 }
203}
204
205sub ParseCONFIG
206{
207 my ($k, $v) ;
208 my @badkey = () ;
209 my %Info = () ;
210 my @Options = qw( INCLUDE LIB BUILD_ZLIB OLD_ZLIB GZIP_OS_CODE ) ;
211 my %ValidOption = map {$_, 1} @Options ;
212 my %Parsed = %ValidOption ;
213 my $CONFIG = 'config.in' ;
214
215 print "Parsing $CONFIG...\n" ;
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 [@missing]\n"
241 if @missing = keys %Parsed ;
242
ef379d05
SH
243 $ZLIB_INCLUDE = defined $ENV{'ZLIB_INCLUDE'}
244 ? $ENV{'ZLIB_INCLUDE'}
245 : $Info{'INCLUDE'} ;
246 $ZLIB_LIB = defined $ENV{'ZLIB_LIB'}
247 ?$ENV{'ZLIB_LIB'}
248 : $Info{'LIB'} ;
25f0751f
PM
249
250 if ($^O eq 'VMS') {
251 $ZLIB_INCLUDE = VMS::Filespec::vmspath($ZLIB_INCLUDE);
252 $ZLIB_LIB = VMS::Filespec::vmspath($ZLIB_LIB);
253 }
254
ef379d05
SH
255 my $y = defined $ENV{'OLD_ZLIB'}
256 ? $ENV{'OLD_ZLIB'}
257 : $Info{'OLD_ZLIB'} ;
25f0751f
PM
258 $OLD_ZLIB = '-DOLD_ZLIB' if $y and $y =~ /^yes|on|true|1$/i;
259
ef379d05
SH
260 my $x = defined $ENV{'BUILD_ZLIB'}
261 ? $ENV{'BUILD_ZLIB'}
262 : $Info{'BUILD_ZLIB'} ;
25f0751f
PM
263
264 if ($x and $x =~ /^yes|on|true|1$/i ) {
265
266 $BUILD_ZLIB = 1 ;
267
268 # ZLIB_LIB & ZLIB_INCLUDE must point to the same place when
269 # BUILD_ZLIB is specified.
270 die "INCLUDE & LIB must be the same when BUILD_ZLIB is True\n"
271 if $ZLIB_LIB ne $ZLIB_INCLUDE ;
272
273 # Check the zlib source directory exists
274 die "LIB/INCLUDE directory '$ZLIB_LIB' does not exits\n"
275 unless -d $ZLIB_LIB ;
276
277 # check for a well known file
278 die "LIB/INCLUDE directory, '$ZLIB_LIB', doesn't seem to have the zlib source files\n"
279 unless -e catfile($ZLIB_LIB, 'zlib.h') ;
280
281
282 # write the Makefile
283 print "Building Zlib enabled\n" ;
284 }
285
286 $GZIP_OS_CODE = defined $ENV{'GZIP_OS_CODE'}
287 ? $ENV{'GZIP_OS_CODE'}
288 : $Info{'GZIP_OS_CODE'} ;
289
290 die "GZIP_OS_CODE not 'AUTO_DETECT' or a number between 0 and 255\n"
291 unless uc $GZIP_OS_CODE eq 'AUTO_DETECT'
292 || ( $GZIP_OS_CODE =~ /^(\d+)$/ && $1 >= 0 && $1 <= 255) ;
293
294 if (uc $GZIP_OS_CODE eq 'AUTO_DETECT')
295 {
296 print "Auto Detect Gzip OS Code..\n" ;
297 $GZIP_OS_CODE = getOSCode() ;
298 }
299
300 my $name = getOSname($GZIP_OS_CODE);
301 print "Setting Gzip OS Code to $GZIP_OS_CODE [$name]\n" ;
302
303 print <<EOM if 0 ;
304 INCLUDE [$ZLIB_INCLUDE]
305 LIB [$ZLIB_LIB]
306 GZIP_OS_CODE [$GZIP_OS_CODE]
307 OLD_ZLIB [$OLD_ZLIB]
308 BUILD_ZLIB [$BUILD_ZLIB]
309
310EOM
311
312 print "Looks Good.\n" ;
313
314}
315
316
317
318sub zlib_files
319{
320 my $dir = shift ;
321
322 my @h_files = ();
323 my @c_files = ();
324
325 if (-f catfile($dir, "infback.c")) {
326 # zlib 1.2.0 or greater
327 #
328 @h_files = qw(crc32.h inffast.h inflate.h trees.h zconf.in.h
329 zutil.h deflate.h inffixed.h inftrees.h zconf.h
330 zlib.h
331 );
332 @c_files = qw(adler32 crc32 infback inflate uncompr
333 compress deflate inffast inftrees
334 trees zutil
335 );
336 }
337 else {
338 # zlib 1.1.x
339
340 @h_files = qw(deflate.h infcodes.h inftrees.h zconf.h zutil.h
341 infblock.h inffast.h infutil.h zlib.h
342 );
343 @c_files = qw(adler32 compress crc32 uncompr
344 deflate trees zutil inflate infblock
345 inftrees infcodes infutil inffast
346 );
347 }
348
349 @h_files = map { catfile($dir, $_) } @h_files ;
350 my @o_files = map { "$_\$(OBJ_EXT)" } 'Zlib', @c_files;
351 @c_files = map { "$_.c" } 'Zlib', @c_files ;
352
353 foreach my $file (@c_files)
354 { copy(catfile($dir, $file), '.') }
355
356 return (
357 #'H' => [ @h_files ],
358 'C' => [ @c_files ] ,
359 #'OBJECT' => qq[ @o_files ],
360 'OBJECT' => q[ $(O_FILES) ],
361
362
363 ) ;
364}
365
366
367
cb7abd7f 368use vars qw ( @GZIP_OS_Names %OSnames) ;
25f0751f
PM
369
370BEGIN
371{
372 @GZIP_OS_Names = (
373 [ '' => 0, 'MS-DOS' ],
374 [ 'amigaos' => 1, 'Amiga' ],
375 [ 'VMS' => 2, 'VMS' ],
376 [ '' => 3, 'Unix/Default' ],
377 [ '' => 4, 'VM/CMS' ],
378 [ '' => 5, 'Atari TOS' ],
379 [ 'os2' => 6, 'HPFS (OS/2, NT)' ],
380 [ 'MacOS' => 7, 'Macintosh' ],
381 [ '' => 8, 'Z-System' ],
382 [ '' => 9, 'CP/M' ],
383 [ '' => 10, 'TOPS-20' ],
384 [ '' => 11, 'NTFS (NT)' ],
385 [ '' => 12, 'SMS QDOS' ],
386 [ '' => 13, 'Acorn RISCOS' ],
387 [ 'MSWin32' => 14, 'VFAT file system (Win95, NT)' ],
388 [ '' => 15, 'MVS' ],
389 [ 'beos' => 16, 'BeOS' ],
390 [ '' => 17, 'Tandem/NSK' ],
391 [ '' => 18, 'THEOS' ],
392 [ '' => 255, 'Unknown OS' ],
393 );
394
395 %OSnames = map { $$_[1] => $$_[2] }
396 @GZIP_OS_Names ;
397}
398
399sub getOSCode
400{
401 my $default = 3 ; # Unix is the default
402
403 my $uname = $^O;
404
405 for my $h (@GZIP_OS_Names)
406 {
407 my ($pattern, $code, $name) = @$h;
408
409 return $code
410 if $pattern && $uname eq $pattern ;
411 }
412
413 return $default ;
414}
415
416sub getOSname
417{
418 my $code = shift ;
419
420 return $OSnames{$code} || 'Unknown OS' ;
421}
422
423# end of file Makefile.PL
424