diff options
Diffstat (limited to 'Makefile.PL')
-rw-r--r-- | Makefile.PL | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..98209fa --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,220 @@ +#! perl -w + +use strict; +use 5.006; + +use ExtUtils::MakeMaker; +use Config ; +use File::Copy ; + +BEGIN { + eval { require File::Spec::Functions ; File::Spec::Functions->import( catfile rel2abs ) } ; + *catfile = sub { return join( '/', @_ ) } if $@; +} + +require VMS::Filespec if $^O eq 'VMS'; + +my $BZLIB_BIN ; +my $BZLIB_LIB ; +my $BZLIB_INCLUDE ; +my $BUILD_BZLIB = 0 ; + +ParseCONFIG() ; + +my %Bzip2 = ( pm => catfile( qw( lib Compress Bzip2.pm ) ), + lib => catfile( 'bzlib-src', 'libbz2'.$Config{_a} ) ); + +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +WriteMakefile( + NAME => 'Compress::Bzip2', + VERSION_FROM => $Bzip2{pm}, + PREREQ_PM => { + 'constant' => 1.04, # for constant => {} + 'Test::More' => 0, + 'File::Spec' => 0, + 'File::Copy' => 0, + 'Config' => 0, + 'Carp' => 0, + 'Getopt::Std'=> 0, + 'Fcntl' => 0, + }, + XS => { 'Bzip2.xs' => 'Bzip2.c' }, + ($] >= 5.005 ? + (ABSTRACT_FROM => $Bzip2{pm}, + AUTHOR => 'Rob Janes <arjay@cpan.org>') : ()), + LIBS => $BUILD_BZLIB ? [] : [ $BZLIB_LIB ? "-L$BZLIB_LIB -lbz2" : '-lbz2' ], + # ccdlflags needed for -R [cpan #68572] + LDDLFLAGS => $Config{lddlflags} . " " . $Config{ccdlflags}, + INC => $BUILD_BZLIB ? '-Ibzlib-src' : $BZLIB_INCLUDE ? "-I$BZLIB_INCLUDE" : '', + clean => { + FILES=> + join(' ', + map { catfile( split( /\//, $_ ) ) } + qw( const-c.inc const-xs.inc junk* bztest show_bzversion t/???-tmp-* )) + }, + depend => { 'Makefile' => 'config.in' }, + NORECURS => $BUILD_BZLIB ? 0 : 1, + ($BUILD_BZLIB ? ( MYEXTLIB => $Bzip2{lib} ) : ()), + ($ExtUtils::MakeMaker::VERSION gt '6.46' ? + ('LICENSE' => 'perl', + 'META_MERGE' => + {"recommends" => + { + 'Compress::Zlib' => '1.19', + 'IO::Compress::Bzip2' => '2.060', + 'Compress::Raw::Bzip2' => '2.060', + }, + resources => + { + license => 'http://dev.perl.org/licenses/', + repository => 'https://github.com/rurban/Compress-Bzip2', + }, + } + ) : ()), + SIGN => 1, +); + +if (eval {require ExtUtils::Constant; 1}) { + # If you edit these definitions to change the constants used by this module, + # you will need to use the generated const-c.inc and const-xs.inc + # files to replace their "fallback" counterparts before distributing your + # changes. + my @names = (qw(BZ_CONFIG_ERROR BZ_DATA_ERROR BZ_DATA_ERROR_MAGIC + BZ_FINISH BZ_FINISH_OK BZ_FLUSH BZ_FLUSH_OK BZ_IO_ERROR + BZ_MAX_UNUSED BZ_MEM_ERROR BZ_OK BZ_OUTBUFF_FULL + BZ_PARAM_ERROR BZ_RUN BZ_RUN_OK BZ_SEQUENCE_ERROR + BZ_STREAM_END BZ_UNEXPECTED_EOF)); + ExtUtils::Constant::WriteConstants( + NAME => 'Compress::Bzip2', + NAMES => \@names, + DEFAULT_TYPE => 'IV', + C_FILE => 'const-c.inc', + XS_FILE => 'const-xs.inc', + ); + +} +else { + use File::Copy; + use File::Spec; + foreach my $file ('const-c.inc', 'const-xs.inc') { + my $fallback = catfile('fallback', $file); + copy ($fallback, $file) or die "Can't copy $fallback to $file: $!"; + } +} + +sub MY::postamble { + !$BUILD_BZLIB ? '' : +' +$(MYEXTLIB): '.catfile( qw( bzlib-src Makefile ) ).' + cd bzlib-src && $(MAKE) $(PASSTHRU) +'; +} + +sub ParseCONFIG { + my ($k, $v) ; + my @badkey = () ; + my %Info = () ; + my @Options = qw( BZLIB_INCLUDE BZLIB_LIB BUILD_BZLIB BZLIB_BIN ) ; + my %ValidOption = map {$_, 1} @Options ; + my %Parsed = %ValidOption ; + my $CONFIG = 'config.in' ; + + print "Parsing $CONFIG...\n" ; + + if (!open(F, "<$CONFIG")) { + warn "warning: failed to open $CONFIG: $!\n"; + } + else { + while (<F>) { + chomp; + s/#.*$//; + next if !/\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 ; + + $BZLIB_INCLUDE = $ENV{'BZLIB_INCLUDE'} || $Info{'BZLIB_INCLUDE'} ; + $BZLIB_LIB = $ENV{'BZLIB_LIB'} || $Info{'BZLIB_LIB'} ; + $BZLIB_BIN = $ENV{'BZLIB_BIN'} || $Info{'BZLIB_BIN'} ; + + if ($^O eq 'VMS') { + $BZLIB_INCLUDE = VMS::Filespec::vmspath($BZLIB_INCLUDE); + $BZLIB_LIB = VMS::Filespec::vmspath($BZLIB_LIB); + $BZLIB_BIN = VMS::Filespec::vmspath($BZLIB_BIN); + } + + my $x = defined($ENV{BUILD_BZLIB}) ? $ENV{BUILD_BZLIB} : $Info{BUILD_BZLIB}; + $x = 'Test' if !defined($x); + + if ( $x =~ /^yes|on|true|1$/i ) { + $BUILD_BZLIB = 1; + + print "Building internal libbz2 enabled\n" ; + } + elsif ( $x =~ /^test$/i ) { + undef $BUILD_BZLIB; + + ## prefix libpth locincpth + my $command = $Config{cc} . + ' '. $Config{ccflags} . + ( $BZLIB_INCLUDE ? " -I$BZLIB_INCLUDE" : '' ) . + ' '. $Config{ccdlflags} . + ' '. $Config{ldflags} . + ' -o show_bzversion show_bzversion.c' . + ( $BZLIB_LIB ? " -L$BZLIB_LIB" : '' ) . + ' -lbz2'; + + #print "command $command\n"; + if ( !system( $command ) ) { + if ( -x 'show_bzversion' && -s 'show_bzversion' ) { + my $version = `./show_bzversion`; + if ( $version ) { + chomp $version; + $BUILD_BZLIB = 0; + print "found bzip2 $version ".($BZLIB_LIB ? "in $BZLIB_LIB" : 'installed')."\n"; + } + else { + $BUILD_BZLIB = 1; + print "compile command '$command' failed\n"; + print "system bzip2 not useable, building internal libbz2\n"; + } + } + else { + $BUILD_BZLIB = 1; + print "compile command '$command' failed\n"; + print "system bzip2 not useable, building internal libbz2\n"; + } + } + else { + $BUILD_BZLIB = 1; + print "compile command '$command' failed\n"; + print "system bzip2 not found, building internal libbz2\n"; + } + } + + print <<EOM if 0 ; +INCLUDE [$BZLIB_INCLUDE] +LIB [$BZLIB_LIB] +BIN [$BZLIB_BIN] + +EOM +; + + print "Looks Good.\n" ; + +} |