use strict ;
require 5.004 ;
-use ExtUtils::MakeMaker 5.16 ;
-use Config ;
-use File::Copy ;
-
-BEGIN
-{
- eval { require File::Spec::Functions ; File::Spec::Functions->import() } ;
- if ($@)
- {
- *catfile = sub { return "$_[0]/$_[1]" }
- }
-}
+$::VERSION = '2.011' ;
-require VMS::Filespec if $^O eq 'VMS';
+use private::MakeUtil;
+use ExtUtils::MakeMaker 5.16 ;
-my $ZLIB_LIB ;
-my $ZLIB_INCLUDE ;
-my $BUILD_ZLIB = 0 ;
-my $OLD_ZLIB = '' ;
-my $WALL = '';
-#$WALL = ' -Wall ';
-unless($ENV{PERL_CORE}) {
- $ENV{PERL_CORE} = 1 if grep { $_ eq 'PERL_CORE=1' } @ARGV;
-}
-
-# don't ask if MM_USE_DEFAULT is set -- enables perl core building on cygwin
-if ($^O =~ /cygwin/i and not $ENV{PERL_MM_USE_DEFAULT} and not $ENV{PERL_CORE})
+UpDowngrade(getPerlFiles('MANIFEST'))
+ unless $ENV{PERL_CORE};
+
+WriteMakefile(
+ NAME => 'Compress::Zlib',
+ VERSION_FROM => 'lib/Compress/Zlib.pm',
+ 'dist' => { COMPRESS => 'gzip',
+ TARFLAGS => '-chvf',
+ SUFFIX => 'gz',
+ DIST_DEFAULT => 'MyTrebleCheck tardist',
+ },
+
+ (
+ $ENV{SKIP_FOR_CORE}
+ ? (MAN3PODS => {})
+ : (PREREQ_PM => { 'Compress::Raw::Zlib' => $::VERSION,
+ 'IO::Compress::Base' => $::VERSION,
+ 'IO::Compress::Base::Common' => $::VERSION,
+ 'IO::Uncompress::Base' => $::VERSION,
+ 'IO::Compress::Gzip' => $::VERSION,
+ 'IO::Compress::Gzip::Constants' => $::VERSION,
+ 'IO::Uncompress::Gunzip' => $::VERSION,
+ 'Scalar::Util' => 0,
+ }
+ )
+ ),
+
+ (
+ $] >= 5.005
+ ? (ABSTRACT_FROM => 'lib/Compress/Zlib.pm',
+ AUTHOR => 'Paul Marquess <pmqs@cpan.org>')
+ : ()
+ ),
+
+ INSTALLDIRS => ($] >= 5.009 ? 'perl' : 'site'),
+
+ (
+ $] >= 5.009 && ! $ENV{PERL_CORE}
+ ? (INST_LIB => 'blib/arch')
+ : ()
+ ),
+
+ ((ExtUtils::MakeMaker->VERSION() gt '6.30') ?
+ ('LICENSE' => 'perl') : ()),
+
+) ;
+
+# Check for Compress::Zlib version 1.
+eval "require Compress::Zlib; " ;
+if ( ! $ENV{PERL_CORE} && ! $@ && $Compress::Zlib::VERSION < 2)
{
- print <<EOM ;
-
-I see you are running Cygwin.
-
-Please note that this module cannot be installed on Cygwin using the
-CPAN shell. The CPAN Shell uses Compress::Zlib internally and it is not
-possible to delete an active DLL.
-
-If you are running the CPAN shell, please exit it and install this module
-by hand by running 'make install' under the directory
-
- ~/.cpan/build/Compress-Zlib-VERSION
-
-EOM
-
- print "Do you want to continue? [Y/N]: " ;
- my $answer = <STDIN> ;
-
- if ($answer =~ /^yes|y/i)
- {
- print "continuing...\n"
- }
- else
- {
- print "exiting...\n" ;
- exit 1 ;
- }
-
-
-}
-
-ParseCONFIG() ;
-
-my @files = ('Zlib.pm', glob("t/*.t"), grep(!/\.bak$/, glob("examples/*"))) ;
-UpDowngrade(@files) unless $ENV{PERL_CORE};
-
-WriteMakefile(
- NAME => 'Compress::Zlib',
- VERSION_FROM => 'Zlib.pm',
- INC => "-I$ZLIB_INCLUDE" ,
- DEFINE => "$OLD_ZLIB $WALL" ,
- XS => { 'Zlib.xs' => 'Zlib.c' },
- 'depend' => { 'Makefile' => 'config.in' },
- 'clean' => { FILES => '*.c constants.h constants.xs' },
- 'dist' => { COMPRESS => 'gzip',
- SUFFIX => 'gz',
- DIST_DEFAULT => 'MyDoubleCheck Downgrade tardist',
- },
- ($BUILD_ZLIB
- ? zlib_files($ZLIB_LIB)
- : (LIBS => [ "-L$ZLIB_LIB -lz " ])
- ),
- ($] >= 5.005
- ? (ABSTRACT_FROM => 'Zlib.pm',
- AUTHOR => 'Paul Marquess <pmqs@cpan.org>')
- : ()
- ),
- ) ;
-
-my @names = qw(
+ my $ver = $Compress::Zlib::VERSION ;
+ print <<EOM
- DEF_WBITS
- MAX_MEM_LEVEL
- MAX_WBITS
- OS_CODE
+I see you already have Compress::Zlib version $ver installed.
+Version 1 MUST be removed for version 2 to operate correctly.
- Z_ASCII
- Z_BEST_COMPRESSION
- Z_BEST_SPEED
- Z_BINARY
- Z_BUF_ERROR
- Z_DATA_ERROR
- Z_DEFAULT_COMPRESSION
- Z_DEFAULT_STRATEGY
- Z_DEFLATED
- Z_ERRNO
- Z_FILTERED
- Z_FINISH
- Z_FULL_FLUSH
- Z_HUFFMAN_ONLY
- Z_MEM_ERROR
- Z_NEED_DICT
- Z_NO_COMPRESSION
- Z_NO_FLUSH
- Z_NULL
- Z_OK
- Z_PARTIAL_FLUSH
- Z_STREAM_END
- Z_STREAM_ERROR
- Z_SYNC_FLUSH
- Z_UNKNOWN
- Z_VERSION_ERROR
- );
+The easiest way to do that is to install Compress::Zlib like this
-if (eval {require ExtUtils::Constant; 1}) {
- # Check the constants above all appear in @EXPORT in Zlib.pm
- my %names = map { $_, 1} @names, 'ZLIB_VERSION';
- open F, "<Zlib.pm" or die "Cannot open Zlib.pm: $!\n";
- while (<F>)
- {
- last if /^\s*\@EXPORT\s+=\s+qw\(/ ;
- }
+ make install UNINST=1
- while (<F>)
- {
- last if /^\s*\)/ ;
- /(\S+)/ ;
- delete $names{$1} if defined $1 ;
- }
- close F ;
+If you run the CPAN shell run this before installing Compress::Zlib
- if ( keys %names )
- {
- my $missing = join ("\n\t", sort keys %names) ;
- die "The following names are missing from \@EXPORT in Zlib.pm\n" .
- "\t$missing\n" ;
- }
-
- push @names, {name => 'ZLIB_VERSION', type => 'PV' };
-
- ExtUtils::Constant::WriteConstants(
- NAME => 'Zlib',
- NAMES => \@names,
- C_FILE => 'constants.h',
- XS_FILE => 'constants.xs',
-
- );
-}
-else {
- copy ('fallback.h', 'constants.h')
- or die "Can't copy fallback.h to constants.h: $!";
- copy ('fallback.xs', 'constants.xs')
- or die "Can't copy fallback.xs to constants.xs: $!";
-}
-
-sub MY::postamble
-{
- my $postamble = <<'EOM';
-
-Downgrade:
- @echo Downgrading.
- perl Makefile.PL -downgrade
-
-MyDoubleCheck:
- @echo Checking config.in is setup for a release
- @(grep '^LIB *= *./zlib' config.in && \
- grep '^INCLUDE *= *./zlib' config.in && \
- grep '^OLD_ZLIB *= *False' config.in && \
- grep '^BUILD_ZLIB *= *True' config.in) >/dev/null || \
- (echo config.in needs fixing ; exit 1)
- @echo config.in is ok
-
-MyTrebleCheck:
- @echo Checking for $$^W in files: '. "@files" . '
- @perl -ne \' \
- exit 1 if /^\s*local\s*\(\s*\$$\^W\s*\)/; \
- \' ' . " @files || " . ' \
- (echo found unexpected $$^W ; exit 1)
- @echo All is ok.
-
-Zlib.xs: typemap
- @ $(TOUCH) Zlib.xs
+ o conf make_install_arg UNINST=1
EOM
-
- return $postamble;
-
}
-sub ParseCONFIG
-{
- my ($k, $v) ;
- my @badkey = () ;
- my %Info = () ;
- my @Options = qw( INCLUDE LIB BUILD_ZLIB OLD_ZLIB ) ;
- my %ValidOption = map {$_, 1} @Options ;
- my %Parsed = %ValidOption ;
- my $CONFIG = 'config.in' ;
-
- print "Parsing $CONFIG...\n" ;
-
- open(F, "<$CONFIG") or die "Cannot open file $CONFIG: $!\n" ;
- while (<F>) {
- s/^\s*|\s*$//g ;
- next if /^\s*$/ or /^\s*#/ ;
- s/\s*#\s*$// ;
-
- ($k, $v) = split(/\s+=\s+/, $_, 2) ;
- $k = uc $k ;
- if ($ValidOption{$k}) {
- delete $Parsed{$k} ;
- $Info{$k} = $v ;
- }
- else {
- push(@badkey, $k) ;
- }
- }
- close F ;
-
- print "Unknown keys in $CONFIG ignored [@badkey]\n"
- if @badkey ;
-
- # check parsed values
- my @missing = () ;
- die "The following keys are missing from $CONFIG [@missing]\n"
- if @missing = keys %Parsed ;
-
- $ZLIB_INCLUDE = $ENV{'ZLIB_INCLUDE'} || $Info{'INCLUDE'} ;
- $ZLIB_LIB = $ENV{'ZLIB_LIB'} || $Info{'LIB'} ;
-
- if ($^O eq 'VMS') {
- $ZLIB_INCLUDE = VMS::Filespec::vmspath($ZLIB_INCLUDE);
- $ZLIB_LIB = VMS::Filespec::vmspath($ZLIB_LIB);
- }
-
- my $y = $ENV{'OLD_ZLIB'} || $Info{'OLD_ZLIB'} ;
- $OLD_ZLIB = '-DOLD_ZLIB' if $y and $y =~ /^yes|on|true|1$/i;
-
- my $x = $ENV{'BUILD_ZLIB'} || $Info{'BUILD_ZLIB'} ;
-
- if ($x and $x =~ /^yes|on|true|1$/i ) {
-
- $BUILD_ZLIB = 1 ;
-
- # ZLIB_LIB & ZLIB_INCLUDE must point to the same place when
- # BUILD_ZLIB is specified.
- die "INCLUDE & LIB must be the same when BUILD_ZLIB is True\n"
- if $ZLIB_LIB ne $ZLIB_INCLUDE ;
-
- # Check the zlib source directory exists
- die "LIB/INCLUDE directory '$ZLIB_LIB' does not exits\n"
- unless -d $ZLIB_LIB ;
-
- # check for a well known file
- die "LIB/INCLUDE directory, '$ZLIB_LIB', doesn't seem to have the zlib source files\n"
- unless -e catfile($ZLIB_LIB, 'zlib.h') ;
-
-
- # check Makefile.zlib has been copied to ZLIB_LIB
- #copy 'Makefile.zlib', catfile($ZLIB_LIB, 'Makefile.PL') ||
- #die "Could not copy Makefile.zlib to " . catfile($ZLIB_LIB, 'Makefile.PL') . ": $!\n" ;
- #print "Created a Makefile.PL for zlib\n" ;
-
- # write the Makefile
- print "Building Zlib enabled\n" ;
- }
-
- print <<EOM if 0 ;
- INCLUDE [$ZLIB_INCLUDE]
- LIB [$ZLIB_LIB]
-
-EOM
-
- print "Looks Good.\n" ;
-
-}
-
-sub UpDowngrade
-{
- my @files = @_ ;
-
- # our is stable from 5.6.0 onward
- # warnings is stable from 5.6.1 onward
-
- # Note: this code assumes that each statement it modifies is not
- # split across multiple lines.
-
-
- my $warn_sub = '';
- my $our_sub = '' ;
-
- my $opt = shift @ARGV || '' ;
- my $upgrade = ($opt =~ /^-upgrade/i);
- my $downgrade = ($opt =~ /^-downgrade/i);
- push @ARGV, $opt unless $downgrade || $upgrade;
-
- if ($downgrade) {
- # From: use|no warnings "blah"
- # To: local ($^W) = 1; # use|no warnings "blah"
- $warn_sub = sub {
- s/^(\s*)(no\s+warnings)/${1}local (\$^W) = 0; #$2/ ;
- s/^(\s*)(use\s+warnings)/${1}local (\$^W) = 1; #$2/ ;
- };
- }
- elsif ($] >= 5.006001 || $upgrade) {
- # From: local ($^W) = 1; # use|no warnings "blah"
- # To: use|no warnings "blah"
- $warn_sub = sub {
- s/^(\s*)local\s*\(\$\^W\)\s*=\s*\d+\s*;\s*#\s*((no|use)\s+warnings.*)/$1$2/ ;
- };
- }
-
- if ($downgrade) {
- $our_sub = sub {
- if ( /^(\s*)our\s+\(\s*([^)]+\s*)\)/ ) {
- my $indent = $1;
- my $vars = join ' ', split /\s*,\s*/, $2;
- $_ = "${indent}use vars qw($vars);\n";
- }
- };
- }
- elsif ($] >= 5.006000 || $upgrade) {
- $our_sub = sub {
- if ( /^(\s*)use\s+vars\s+qw\((.*?)\)/ ) {
- my $indent = $1;
- my $vars = join ', ', split ' ', $2;
- $_ = "${indent}our ($vars);\n";
- }
- };
- }
-
- if (! $our_sub && ! $warn_sub) {
- warn "Up/Downgrade not needed.\n";
- if ($upgrade || $downgrade)
- { exit 0 }
- else
- { return }
- }
-
- foreach (@files)
- { doUpDown($our_sub, $warn_sub, $_) }
-
- warn "Up/Downgrade complete.\n" ;
- exit 0 if $upgrade || $downgrade;
-
-}
-
-
-sub doUpDown
-{
- my $our_sub = shift;
- my $warn_sub = shift;
-
- local ($^I) = ($^O eq 'VMS') ? "_bak" : ".bak";
- local (@ARGV) = shift;
-
- while (<>)
- {
- print, last if /^__(END|DATA)__/ ;
-
- &{ $our_sub }() if $our_sub ;
- &{ $warn_sub }() if $warn_sub ;
- print ;
- }
-
- return if eof ;
-
- while (<>)
- { print }
-}
-
-
-sub zlib_files
-{
- my $dir = shift ;
-
- my @h_files = ();
- my @c_files = ();
-
- if (-f catfile($dir, "infback.c")) {
- # zlib 1.2.0 or greater
- #
- @h_files = qw(crc32.h inffast.h inflate.h trees.h zconf.in.h
- zutil.h deflate.h inffixed.h inftrees.h zconf.h
- zlib.h
- );
- @c_files = qw(adler32 crc32 infback inflate uncompr
- compress deflate gzio inffast inftrees
- trees zutil
- );
- }
- else {
- # zlib 1.1.x
-
- @h_files = qw(deflate.h infcodes.h inftrees.h zconf.h zutil.h
- infblock.h inffast.h infutil.h zlib.h
- );
- @c_files = qw(adler32 compress crc32 gzio uncompr
- deflate trees zutil inflate infblock
- inftrees infcodes infutil inffast
- );
- }
-
- @h_files = map { catfile($dir, $_) } @h_files ;
- my @o_files = map { "$_\$(OBJ_EXT)" } 'Zlib', @c_files;
- @c_files = map { "$_.c" } 'Zlib', @c_files ;
-
- foreach my $file (@c_files)
- { copy(catfile($dir, $file), '.') }
-
- return (
- #'H' => [ @h_files ],
- 'C' => [ @c_files ] ,
- #'OBJECT' => qq[ @o_files ],
- 'OBJECT' => q[ $(O_FILES) ],
-
-
- ) ;
-}
-
-
# end of file Makefile.PL