⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makefile.pl

📁 关于Berkelay数据库的共享源码
💻 PL
字号:
#! perl -wuse strict ;use ExtUtils::MakeMaker 5.16 ;use Config ;die "DB_File needs Perl 5.004_05 or better. This is $]\n"     if $] <= 5.00404; my $VER_INFO ;my $LIB_DIR ;my $INC_DIR ;my $DB_NAME ;my $LIBS ;my $COMPAT185 = "" ;ParseCONFIG() ;my @files = ('DB_File.pm', glob "t/*.t") ;UpDowngrade(@files);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' ;# AIX is special.$LIBS .= " -lpthread" if $^O eq 'aix' ;# OS2 is a special case, so check for it now.my $OS2 = "" ;$OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ;my $WALL = '' ;#$WALL = ' -Wall ';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		=> "-D_NOT_CORE $OS2 $VER_INFO $COMPAT185 $WALL",	OBJECT		=> 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',	#OPTIMIZE	=> '-g',	'depend'	=> { 'Makefile'          => 'config.in',                             'version$(OBJ_EXT)' => 'version.c'},	'clean'		=> { FILES => 'constants.h constants.xs' },	'macro'		=> { INSTALLDIRS => 'perl', my_files => "@files" },        'dist'          => { COMPRESS => 'gzip', SUFFIX => 'gz',			     DIST_DEFAULT => 'MyDoubleCheck tardist'},    	);my @names = qw(	BTREEMAGIC	BTREEVERSION	DB_LOCK	DB_SHMEM	DB_TXN	HASHMAGIC	HASHVERSION	MAX_PAGE_NUMBER	MAX_PAGE_OFFSET	MAX_REC_NUMBER	RET_ERROR	RET_SPECIAL	RET_SUCCESS	R_CURSOR	R_DUP	R_FIRST	R_FIXEDLEN	R_IAFTER	R_IBEFORE	R_LAST	R_NEXT	R_NOKEY	R_NOOVERWRITE	R_PREV	R_RECNOSYNC	R_SETCURSOR	R_SNAPSHOT	__R_UNUSED	);if (eval {require ExtUtils::Constant; 1}) {    # Check the constants above all appear in @EXPORT in DB_File.pm    my %names = map { $_, 1} @names;    open F, "<DB_File.pm" or die "Cannot open DB_File.pm: $!\n";    while (<F>)    {        last if /^\s*\@EXPORT\s+=\s+qw\(/ ;    }    while (<F>)    {        last if /^\s*\)/ ;        /(\S+)/ ;        delete $names{$1} if defined $1 ;    }    close F ;    if ( keys %names )    {        my $missing = join ("\n\t", sort keys %names) ;        die "The following names are missing from \@EXPORT in DB_File.pm\n" .            "\t$missing\n" ;    }        ExtUtils::Constant::WriteConstants(                                     NAME => 'DB_File',                                     NAMES => \@names,                                     C_FILE  => 'constants.h',                                     XS_FILE  => 'constants.xs',                                                                                                           );} else {    use File::Copy;    copy ('fallback.h', 'constants.h')      or die "Can't copy fallback.h to constants.h: $!";    copy ('fallback.xs', 'constants.xs')      or die "Can't copy fallback.xs to constants.xs: $!";}exit;sub MY::libscan{    my $self = shift ;    my $path = shift ;    return undef        if $path =~ /(~|\.bak)$/ ||            $path =~ /^\..*\.swp$/ ;    return $path;    }sub MY::postamble { <<'EOM' } ;MyDoubleCheck:	@echo Checking config.in is setup for a release	@(grep "^LIB.*/usr/local/BerkeleyDB" config.in && 	\	grep "^INCLUDE.*/usr/local/BerkeleyDB" config.in &&	\	grep "^#DBNAME.*" config.in) >/dev/null ||		\	    (echo config.in needs fixing ; exit 1)	@echo config.in is ok	@echo 	@echo Checking DB_File.xs is ok for a release.	@(perl -ne ' exit 1 if /^\s*#\s*define\s+TRACE/ ; ' DB_File.xs || \	    (echo DB_File.xs needs fixing ; exit 1))	@echo DB_File.xs is ok	@echo 	@echo Checking for $$^W in files: $(my_files)	@perl -ne '						\	    exit 1 if /^\s*local\s*\(\s*\$$\^W\s*\)/;' $(my_files) ||	\	  (echo found unexpected $$^W ; exit 1)	@echo No $$^W found.	@echo 	@echo Checking for 'use vars' in files: $(my_files)	@perl -ne '						\	    exit 0 if /^__(DATA|END)__/;               	\	    exit 1 if /^\s*use\s+vars/;' $(my_files) ||	\	  (echo found unexpected "use vars"; exit 1)	@echo No 'use vars' found.	@echo 	@echo All files are OK for a release.	@echo EOMsub 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 = $ENV{'DB_FILE_NAME'} || $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 UpDowngrade{    my @files = @_ ;    # our      is stable from 5.6.0 onward    # warnings is stable from 5.6.1 onward    # Note: this code assumes that each statement it modifies is not    #       split across multiple lines.    my $warn_sub ;    my $our_sub ;    if ($] < 5.006001) {        # From: use|no warnings "blah"        # To:   local ($^W) = 1; # use|no warnings "blah"        #        # and        #        # From: warnings::warnif(x,y);        # To:   $^W && carp(y); # warnif -- x        $warn_sub = sub {	    s/^(\s*)(no\s+warnings)/${1}local (\$^W) = 0; #$2/ ;	    s/^(\s*)(use\s+warnings)/${1}local (\$^W) = 1; #$2/ ;	    s/^(\s*)warnings::warnif\s*\((.*?)\s*,\s*(.*?)\)\s*;/${1}\$^W && carp($3); # warnif - $2/ ;          };    }    else {        # From: local ($^W) = 1; # use|no warnings "blah"        # To:   use|no warnings "blah"        #        # and        #        # From: $^W && carp(y); # warnif -- x        # To:   warnings::warnif(x,y);        $warn_sub = sub {	    s/^(\s*)local\s*\(\$\^W\)\s*=\s*\d+\s*;\s*#\s*((no|use)\s+warnings.*)/$1$2/ ;	    s/^(\s*)\$\^W\s+\&\&\s*carp\s*\((.*?)\)\s*;\s*#\s*warnif\s*-\s*(.*)/${1}warnings::warnif($3, $2);/ ;          };    }    if ($] < 5.006000) {        $our_sub = sub {	    if ( /^(\s*)our\s+\(\s*([^)]+\s*)\)/ ) {                my $indent = $1;                my $vars = join ' ', split /\s*,\s*/, $2;                $_ = "${indent}use vars qw($vars);\n";            }          };    }    else {        $our_sub = sub {	    if ( /^(\s*)use\s+vars\s+qw\((.*?)\)/ ) {                my $indent = $1;                my $vars = join ', ', split ' ', $2;                $_ = "${indent}our ($vars);\n";            }          };    }    foreach (@files)      { doUpDown($our_sub, $warn_sub, $_) }}sub doUpDown{    my $our_sub = shift;    my $warn_sub = shift;    local ($^I) = ".bak" ;    local (@ARGV) = shift;    while (<>)    {	print, last if /^__(END|DATA)__/ ;	&{ $our_sub }();	&{ $warn_sub }();	print ;    }    return if eof ;    while (<>)      { print }}# end of file Makefile.PL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -