Makefile.PL
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
- #! perl -w
- use strict ;
- use ExtUtils::MakeMaker 5.16 ;
- use Config ;
- my $VER_INFO ;
- my $LIB_DIR ;
- my $INC_DIR ;
- my $DB_NAME ;
- my $LIBS ;
- my $COMPAT185 = "" ;
- my @files = ('DB_File.pm', glob "t/*.t") ;
- # See if warnings is available
- eval 'use warnings;';
- if ($@) {
- # not there, so write a dummy warnings.pm
- oldWarnings(@files) ;
- } else {
- # is there,
- newWarnings(@files) ;
- }
- ParseCONFIG() ;
- if (defined $DB_NAME)
- { $LIBS = $DB_NAME }
- else {
- if ($^O eq 'MSWin32')
- { $LIBS = '-llibdb' }
- else
- { $LIBS = '-ldb' }
- }
- # Solaris is special.
- #$LIBS .= " -lthread" if $^O eq 'solaris' ;
- # OS2 is a special case, so check for it now.
- my $OS2 = "" ;
- $OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ;
- WriteMakefile(
- NAME => 'DB_File',
- LIBS => ["-L${LIB_DIR} $LIBS"],
- MAN3PODS => ' ', # Pods will be built by installman.
- INC => "-I$INC_DIR",
- VERSION_FROM => 'DB_File.pm',
- XSPROTOARG => '-noprototypes',
- DEFINE => "$OS2 $VER_INFO $COMPAT185",
- OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
- OPTIMIZE => '-g',
- 'macro' => { INSTALLDIRS => 'perl' },
- 'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'},
- );
- sub MY::postamble {
- '
- version$(OBJ_EXT): version.c
- $(NAME).xs: typemap
- @$(TOUCH) $(NAME).xs
- Makefile: config.in
- ' ;
- }
- sub ParseCONFIG
- {
- my ($k, $v) ;
- my @badkey = () ;
- my %Info = () ;
- my @Options = qw( INCLUDE LIB PREFIX HASH DBNAME COMPAT185 ) ;
- my %ValidOption = map {$_, 1} @Options ;
- my %Parsed = %ValidOption ;
- my $CONFIG = 'config.in' ;
- print "Parsing $CONFIG...n" ;
- # DBNAME & COMPAT185 are optional, so pretend they have
- # been parsed.
- delete $Parsed{'DBNAME'} ;
- delete $Parsed{'COMPAT185'} ;
- $Info{COMPAT185} = "No" ;
- 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 file: [@missing]n"
- if @missing = keys %Parsed ;
- $INC_DIR = $ENV{'DB_FILE_INCLUDE'} || $Info{'INCLUDE'} ;
- $LIB_DIR = $ENV{'DB_FILE_LIB'} || $Info{'LIB'} ;
- $DB_NAME = $Info{'DBNAME'} if defined $Info{'DBNAME'} ;
- $COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API"
- if (defined $ENV{'DB_FILE_COMPAT185'} &&
- $ENV{'DB_FILE_COMPAT185'} =~ /^s*(on|true|1)s*$/i) ||
- $Info{'COMPAT185'} =~ /^s*(on|true|1)s*$/i ;
- my $PREFIX = $Info{'PREFIX'} ;
- my $HASH = $Info{'HASH'} ;
- $VER_INFO = "-DmDB_Prefix_t=${PREFIX} -DmDB_Hash_t=${HASH}" ;
- print <<EOM if 0 ;
- INCLUDE [$INC_DIR]
- LIB [$LIB_DIR]
- HASH [$HASH]
- PREFIX [$PREFIX]
- DBNAME [$DB_NAME]
- EOM
- print "Looks Good.n" ;
- }
- sub oldWarnings
- {
- local ($^I) = ".bak" ;
- local (@ARGV) = @_ ;
- while (<>)
- {
- if (/^__END__/)
- {
- print ;
- my $this = $ARGV ;
- while (<>)
- {
- last if $ARGV ne $this ;
- print ;
- }
- }
- s/^(s*)(nos+warnings)/${1}local ($^W) = 0; #$2/ ;
- s/^(s*)(uses+warnings)/${1}local ($^W) = 1; #$2/ ;
- print ;
- }
- }
- sub newWarnings
- {
- local ($^I) = ".bak" ;
- local (@ARGV) = @_ ;
- while (<>)
- {
- if (/^__END__/)
- {
- my $this = $ARGV ;
- print ;
- while (<>)
- {
- last if $ARGV ne $this ;
- print ;
- }
- }
- s/^(s*)locals*($^W)s*=s*d+s*;s*#s*((no|use)s+warnings.*)/$1$2/ ;
- print ;
- }
- }
- # end of file Makefile.PL