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