| 1 | #! perl -w |
| 2 | |
| 3 | use strict ; |
| 4 | require 5.004 ; |
| 5 | |
| 6 | use private::MakeUtil; |
| 7 | use ExtUtils::MakeMaker 5.16 ; |
| 8 | |
| 9 | my $WALL= ''; |
| 10 | $WALL = ' -Wall -Wno-comment ' if $Config{'cc'} =~ /gcc/ ; |
| 11 | my $USE_PPPORT_H = ($ENV{PERL_CORE}) ? '' : '-DUSE_PPPORT_H'; |
| 12 | |
| 13 | |
| 14 | my $BUILD_BZIP2 = defined($ENV{BUILD_BZIP2}) ? $ENV{BUILD_BZIP2} : 1; |
| 15 | my $BZIP2_LIB = defined($ENV{BZIP2_LIB}) ? $ENV{BZIP2_LIB} : 'bzip2-src'; |
| 16 | my $BZIP2_INCLUDE = defined($ENV{BZIP2_INCLUDE}) ? $ENV{BZIP2_INCLUDE} : '.'; |
| 17 | |
| 18 | #ParseCONFIG() ; |
| 19 | |
| 20 | UpDowngrade(getPerlFiles('MANIFEST')) |
| 21 | unless $ENV{PERL_CORE}; |
| 22 | |
| 23 | WriteMakefile( |
| 24 | NAME => 'Compress::Raw::Bzip2', |
| 25 | VERSION_FROM => 'lib/Compress/Raw/Bzip2.pm', |
| 26 | INC => "-I$BZIP2_INCLUDE" , |
| 27 | DEFINE => "$WALL -DBZ_NO_STDIO $USE_PPPORT_H" , |
| 28 | XS => { 'Bzip2.xs' => 'Bzip2.c'}, |
| 29 | 'clean' => { FILES => '*.c bzip2.h bzlib.h bzlib_private.h constants.h constants.xs' }, |
| 30 | #'depend' => { 'Makefile' => 'config.in' }, |
| 31 | 'dist' => { COMPRESS => 'gzip', |
| 32 | TARFLAGS => '-chvf', |
| 33 | SUFFIX => 'gz', |
| 34 | DIST_DEFAULT => 'MyTrebleCheck tardist', |
| 35 | }, |
| 36 | |
| 37 | ( |
| 38 | $BUILD_BZIP2 |
| 39 | ? bzip2_files($BZIP2_LIB) |
| 40 | : (LIBS => [ "-L$BZIP2_LIB -lbz2 " ]) |
| 41 | ), |
| 42 | |
| 43 | ( |
| 44 | $] >= 5.005 |
| 45 | ? (ABSTRACT_FROM => 'lib/Compress/Raw/Bzip2.pm', |
| 46 | AUTHOR => 'Paul Marquess <pmqs@cpan.org>') |
| 47 | : () |
| 48 | ), |
| 49 | |
| 50 | INSTALLDIRS => ($] > 5.010 ? 'perl' : 'site'), |
| 51 | |
| 52 | ((ExtUtils::MakeMaker->VERSION() gt '6.30') ? |
| 53 | ('LICENSE' => 'perl') : ()), |
| 54 | |
| 55 | ) ; |
| 56 | |
| 57 | my @names = qw( |
| 58 | BZ_RUN |
| 59 | BZ_FLUSH |
| 60 | BZ_FINISH |
| 61 | |
| 62 | BZ_OK |
| 63 | BZ_RUN_OK |
| 64 | BZ_FLUSH_OK |
| 65 | BZ_FINISH_OK |
| 66 | BZ_STREAM_END |
| 67 | BZ_SEQUENCE_ERROR |
| 68 | BZ_PARAM_ERROR |
| 69 | BZ_MEM_ERROR |
| 70 | BZ_DATA_ERROR |
| 71 | BZ_DATA_ERROR_MAGIC |
| 72 | BZ_IO_ERROR |
| 73 | BZ_UNEXPECTED_EOF |
| 74 | BZ_OUTBUFF_FULL |
| 75 | BZ_CONFIG_ERROR |
| 76 | ); |
| 77 | |
| 78 | if (eval {require ExtUtils::Constant; 1}) { |
| 79 | # Check the constants above all appear in @EXPORT in Bzip2.pm |
| 80 | my %names = map { $_, 1} @names ; #, 'BZ_VERSION'; |
| 81 | open F, "<lib/Compress/Raw/Bzip2.pm" or die "Cannot open Bzip2.pm: $!\n"; |
| 82 | while (<F>) |
| 83 | { |
| 84 | last if /^\s*\@EXPORT\s+=\s+qw\(/ ; |
| 85 | } |
| 86 | |
| 87 | while (<F>) |
| 88 | { |
| 89 | last if /^\s*\)/ ; |
| 90 | /(\S+)/ ; |
| 91 | delete $names{$1} if defined $1 ; |
| 92 | } |
| 93 | close F ; |
| 94 | |
| 95 | if ( keys %names ) |
| 96 | { |
| 97 | my $missing = join ("\n\t", sort keys %names) ; |
| 98 | die "The following names are missing from \@EXPORT in Bzip2.pm\n" . |
| 99 | "\t$missing\n" ; |
| 100 | } |
| 101 | |
| 102 | #push @names, {name => 'BZ_VERSION', type => 'PV' }; |
| 103 | |
| 104 | ExtUtils::Constant::WriteConstants( |
| 105 | NAME => 'Bzip2', |
| 106 | NAMES => \@names, |
| 107 | C_FILE => 'constants.h', |
| 108 | XS_FILE => 'constants.xs', |
| 109 | |
| 110 | ); |
| 111 | } |
| 112 | else { |
| 113 | foreach my $name (qw( constants.h constants.xs )) |
| 114 | { |
| 115 | my $from = catfile('fallback', $name); |
| 116 | copy ($from, $name) |
| 117 | or die "Can't copy $from to $name: $!"; |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | |
| 122 | sub bzip2_files |
| 123 | { |
| 124 | my $dir = shift ; |
| 125 | |
| 126 | my @c_files = qw( |
| 127 | blocksort.c |
| 128 | huffman.c |
| 129 | crctable.c |
| 130 | randtable.c |
| 131 | compress.c |
| 132 | decompress.c |
| 133 | bzlib.c |
| 134 | ); |
| 135 | |
| 136 | my @h_files = qw( bzlib.h bzlib_private.h ); |
| 137 | |
| 138 | foreach my $file (@c_files, @h_files) |
| 139 | { copy(catfile($dir, $file), '.') } |
| 140 | |
| 141 | |
| 142 | @h_files = map { catfile($dir, $_) } @h_files ; |
| 143 | my @o_files = map { "$_\$(OBJ_EXT)" } 'Bzip2', @c_files; |
| 144 | push @c_files, 'Bzip2.c' ; |
| 145 | |
| 146 | return ( |
| 147 | #'H' => [ @h_files ], |
| 148 | 'C' => [ @c_files ] , |
| 149 | #'OBJECT' => qq[ @o_files ], |
| 150 | 'OBJECT' => q[ $(O_FILES) ], |
| 151 | |
| 152 | |
| 153 | ) ; |
| 154 | } |
| 155 | |
| 156 | |
| 157 | |