Makefile.PL
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #! perl -w
  2. use strict ;
  3. use ExtUtils::MakeMaker 5.16 ;
  4. use Config ;
  5. my $VER_INFO ;
  6. my $LIB_DIR ;
  7. my $INC_DIR ;
  8. my $DB_NAME ;
  9. my $LIBS ;
  10. my $COMPAT185 = "" ;
  11. my @files = ('DB_File.pm', glob "t/*.t") ;
  12. # See if warnings is available
  13. eval 'use warnings;';
  14. if ($@) {
  15.     # not there, so write a dummy warnings.pm
  16.     oldWarnings(@files) ;
  17. } else {
  18.     # is there, 
  19.     newWarnings(@files) ;
  20. }
  21. ParseCONFIG() ;
  22. if (defined $DB_NAME)
  23.   { $LIBS = $DB_NAME }
  24. else {
  25.     if ($^O eq 'MSWin32')
  26.       { $LIBS = '-llibdb' }
  27.     else
  28.       { $LIBS = '-ldb' }
  29. }
  30. # Solaris is special.
  31. #$LIBS .= " -lthread" if $^O eq 'solaris' ;
  32. # OS2 is a special case, so check for it now.
  33. my $OS2 = "" ;
  34. $OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ;
  35. WriteMakefile(
  36. NAME  => 'DB_File',
  37. LIBS  => ["-L${LIB_DIR} $LIBS"],
  38.         MAN3PODS        => ' ',         # Pods will be built by installman.
  39. INC => "-I$INC_DIR",
  40. VERSION_FROM => 'DB_File.pm',
  41. XSPROTOARG => '-noprototypes',
  42. DEFINE => "$OS2 $VER_INFO $COMPAT185",
  43. OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
  44. OPTIMIZE => '-g',
  45. 'macro' => { INSTALLDIRS => 'perl' },
  46.         'dist'          => {COMPRESS=>'gzip', SUFFIX=>'gz'},    
  47. );
  48. sub MY::postamble {
  49. '
  50. version$(OBJ_EXT): version.c
  51. $(NAME).xs: typemap
  52. @$(TOUCH) $(NAME).xs
  53. Makefile: config.in
  54. ' ;
  55. }
  56. sub ParseCONFIG
  57. {
  58.     my ($k, $v) ;
  59.     my @badkey = () ;
  60.     my %Info = () ;
  61.     my @Options = qw( INCLUDE LIB PREFIX HASH DBNAME COMPAT185 ) ;
  62.     my %ValidOption = map {$_, 1} @Options ;
  63.     my %Parsed = %ValidOption ;
  64.     my $CONFIG = 'config.in' ;
  65.     print "Parsing $CONFIG...n" ;
  66.     # DBNAME & COMPAT185 are optional, so pretend they  have 
  67.     # been parsed.
  68.     delete $Parsed{'DBNAME'} ;
  69.     delete $Parsed{'COMPAT185'} ;
  70.     $Info{COMPAT185} = "No" ;
  71.     open(F, "$CONFIG") or die "Cannot open file $CONFIG: $!n" ;
  72.     while (<F>) {
  73. s/^s*|s*$//g ;
  74. next if /^s*$/ or /^s*#/ ;
  75. s/s*#s*$// ;
  76. ($k, $v) = split(/s+=s+/, $_, 2) ;
  77. $k = uc $k ;
  78. if ($ValidOption{$k}) {
  79.     delete $Parsed{$k} ;
  80.     $Info{$k} = $v ;
  81. }
  82. else {
  83.     push(@badkey, $k) ;
  84. }
  85.     }
  86.     close F ;
  87.     print "Unknown keys in $CONFIG ignored [@badkey]n"
  88. if @badkey ;
  89.     # check parsed values
  90.     my @missing = () ;
  91.     die "The following keys are missing from $CONFIG file: [@missing]n" 
  92.         if @missing = keys %Parsed ;
  93.     $INC_DIR = $ENV{'DB_FILE_INCLUDE'} || $Info{'INCLUDE'} ;
  94.     $LIB_DIR = $ENV{'DB_FILE_LIB'} || $Info{'LIB'} ;
  95.     $DB_NAME = $Info{'DBNAME'} if defined $Info{'DBNAME'} ;
  96.     $COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API" 
  97.         if (defined $ENV{'DB_FILE_COMPAT185'} && 
  98. $ENV{'DB_FILE_COMPAT185'} =~ /^s*(on|true|1)s*$/i) ||
  99. $Info{'COMPAT185'} =~ /^s*(on|true|1)s*$/i ; 
  100.     my $PREFIX  = $Info{'PREFIX'} ;
  101.     my $HASH    = $Info{'HASH'} ;
  102.     $VER_INFO = "-DmDB_Prefix_t=${PREFIX} -DmDB_Hash_t=${HASH}" ;
  103.     print <<EOM if 0 ;
  104.     INCLUDE [$INC_DIR]
  105.     LIB [$LIB_DIR]
  106.     HASH [$HASH]
  107.     PREFIX [$PREFIX]
  108.     DBNAME      [$DB_NAME]
  109. EOM
  110.     print "Looks Good.n" ;
  111. }
  112. sub oldWarnings
  113. {
  114.     local ($^I) = ".bak" ;
  115.     local (@ARGV) = @_ ;
  116.     while (<>)
  117.     {
  118. if (/^__END__/)
  119. {
  120.     print ;
  121.     my $this = $ARGV ;
  122.          while (<>)
  123.     {
  124. last if $ARGV ne $this ;
  125. print ;
  126.     }
  127. }
  128. s/^(s*)(nos+warnings)/${1}local ($^W) = 0; #$2/ ;
  129. s/^(s*)(uses+warnings)/${1}local ($^W) = 1; #$2/ ;
  130. print ;
  131.     }
  132. }
  133. sub newWarnings
  134. {
  135.     local ($^I) = ".bak" ;
  136.     local (@ARGV) = @_ ;
  137.     while (<>)
  138.     {
  139. if (/^__END__/)
  140. {
  141.     my $this = $ARGV ;
  142.     print ;
  143.          while (<>)
  144.     {
  145. last if $ARGV ne $this ;
  146. print ;
  147.     }
  148. }
  149. s/^(s*)locals*($^W)s*=s*d+s*;s*#s*((no|use)s+warnings.*)/$1$2/ ;
  150. print ;
  151.     }
  152. }
  153. # end of file Makefile.PL