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

📄 w32locatedb.pl

📁 apache的软件linux版本
💻 PL
字号:
#! perl -w## w32locatedb.pl -- Build apr-util with Berkeley DB on Win32## Usage: perl w32locatedb.pl <type> <incdir> <libdir>#    type:   Library type to link with ('lib' or 'dll')#    incdir: BDB includes directory (for db.h)#    libdir: Library directory (for libdbXY[s][d].lib)## This script falls under the Apache License.# See http://www.apache.org/docs/LICENSErequire 5.008;use strict;use File::Spec::Functions qw(canonpath rel2abs                             splitpath catpath splitdir catdir);######### Subroutine prototypessub usage();sub find_srcdir();sub get_lib_name($$);sub edit_header($$);sub edit_project($$);######### Parse program arguments and set globalsdie usage() unless scalar @ARGV >= 3;my $type = lc($ARGV[0]);die "Invalid library type '$type'\n"    unless $type eq 'lib' or $type eq 'dll';my $incdir = $ARGV[1];die "No 'db.h' in $incdir\n" unless -f "$incdir/db.h";my $libdir = $ARGV[2];die "$libdir: $!" unless -d $libdir;my $libname = get_lib_name($type, $incdir);die "No '$libname.lib' in $libdir" unless -f "$libdir/$libname.lib";die "No '${libname}d.lib' in $libdir" unless -f "$libdir/${libname}d.lib";my $srcdir = find_srcdir();my $apu_hw = canonpath("$srcdir/include/apu.hw");my $apu_want_hw = canonpath("$srcdir/include/apu_want.hw");my $apu_select_dbm_hw = canonpath("$srcdir/include/private/apu_select_dbm.hw");my $aprutil_dsp = canonpath("$srcdir/aprutil.dsp");my $libaprutil_dsp = canonpath("$srcdir/libaprutil.dsp");die "Can't find $apu_hw" unless -f $apu_hw;die "Can't find $apu_want_hw" unless -f $apu_want_hw;die "Can't find $apu_select_dbm_hw" unless -f $apu_select_dbm_hw;die "Can't find $aprutil_dsp" unless -f $aprutil_dsp;die "Can't find $libaprutil_dsp" unless -f $libaprutil_dsp;######### Edit the header file templatesmy $db_h = rel2abs(canonpath("$incdir/db.h"));$db_h =~ s/\\/\//g;edit_header($apu_hw,            [['^\s*\#\s*define\s+APU_HAVE_DB\s+0\s*$',              '#define APU_HAVE_DB     1']]);edit_header($apu_want_hw,            [['^\s*\#\s*include\s+\<db\.h\>\s*$',              "#include \"$db_h\""]]);edit_header($apu_select_dbm_hw,            [['^\s*\#\s*define\s+APU_USE_DB\s+0\s*$',              '#define APU_USE_DB      1'],             ['^\s*\#\s*include\s+\<db\.h\>\s*$',              "#include \"$db_h\""]]);######### Edit the .dsp filesmy $libpath = rel2abs(canonpath("$libdir/$libname"));edit_project($aprutil_dsp, $libpath);edit_project($libaprutil_dsp, $libpath);######### Print usagesub usage(){    return ("Usage: perl w32locatedb.pl <type> <incdir> <libdir>\n"            . "    type:   Library type to link with ('lib' or 'dll')\n"            . "    incdir: BDB includes directory (for db.h)\n"            . "    libdir: Library directory (for libdbXY[s][d].lib)\n");}######### Calculate the (possibly relative) path to the top of the apr-util# source dir.sub find_srcdir(){    my $srcdir = rel2abs(canonpath($0));    my ($vol, $dir, $file) = splitpath($srcdir);    my @dirs = splitdir($dir);    die if scalar @dirs < 1;    do { $_ = pop @dirs } while ($_ eq '');    return catpath($vol, catdir(@dirs), '');}######### Construct the name of the BDB library, based on the type and# version information in db.hsub get_lib_name($$){    my ($type, $incdir) = @_;    my $major = undef;    my $minor = undef;    my $patch = undef;    open(DBH, "< $incdir/db.h")        or die "Can't open $incdir/db.h: $!";    while (<DBH>) {        chomp;        m/^\s*\#\s*define\s+DB_VERSION_(MAJOR|MINOR|PATCH)\s+(\d+)\s*$/;        next unless defined $1 and defined $2;        if    ($1 eq 'MAJOR') { $major = $2; }        elsif ($1 eq 'MINOR') { $minor = $2; }        elsif ($1 eq 'PATCH') { $patch = $2; }        last if defined $major and defined $minor and defined $patch;    }    close(DBH);    die "Can't determine BDB version\n"        unless defined $major and defined $minor and defined $patch;    print "Using BDB version $major.$minor.$patch\n";    my $libname = "libdb$major$minor";    $libname .= 's' if $type eq 'lib';    return $libname;}######### Replace a file, keeping a backup copysub maybe_rename_with_backup($$$){    my ($tmpfile, $file, $maybe) = @_;    if ($maybe) {        # Make the file writable by the owner. On Windows, this removes        # any read-only bits.        chmod((stat($file))[2] | 0600, $file);        rename($file, "${file}~");        rename($tmpfile, $file);    } else {        print "No changes in $file\n";        unlink($tmpfile);    }}######### Edit a header template in-place.sub edit_header($$){    my ($file, $pairs) = @_;    my $tmpfile = "$file.tmp";    my $substs = 0;    open(IN, "< $file") or die "Can't open $file: $!";    open(TMP, "> $tmpfile") or die "Can't open $tmpfile: $!";    while (<IN>) {        chomp;        foreach my $pair (@$pairs) {            $substs += s/${$pair}[0]/${$pair}[1]/;        }        print TMP $_, "\n";    }    close(IN);    close(TMP);    maybe_rename_with_backup($tmpfile, $file, $substs > 0);}######### Edit a project file in-placesub edit_project($$){    my ($file, $libpath) = @_;    my $tmpfile = "$file.tmp";    my $substs = 0;    my ($prog, $debug) = (undef, undef);    my $libsearch = $libpath;    $libsearch =~ s/\\/\\\\/g;    open(IN, "< $file") or die "Can't open $file: $!";    open(TMP, "> $tmpfile") or die "Can't open $tmpfile: $!";    while (<IN>) {        chomp;        if (m/^\# TARGTYPE \"[^\"]+\" 0x([0-9A-Za-z]+)/            and defined $1) {            $prog = 'LINK32' if $1 eq '0102';            $prog = 'LIB32' if $1 eq '0104';            die "Unknown project type 0x$1" unless defined $prog;        } elsif (defined $prog                 and m/^\# PROP Use_Debug_Libraries ([01])/                 and defined $1) {            $debug = $1;        } elsif (defined $prog and defined $debug                 and m/^\# ADD $prog (\"$libsearch)?/                 and not defined $1) {            my $fullpath =                ($debug eq '1' ? "${libpath}d.lib" : "$libpath.lib");            $substs += s/^\# ADD $prog /\# ADD $prog \"$fullpath\" /;        } elsif (m/^\# ADD CPP/) {            $substs += s/APU_USE_SDBM/APU_USE_DB/g;        }        print TMP $_, "\n";    }    close(IN);    close(TMP);    maybe_rename_with_backup($tmpfile, $file, $substs > 0);}

⌨️ 快捷键说明

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