a11c0f7879
the location of the interpreter.
133 lines
3.2 KiB
Perl
133 lines
3.2 KiB
Perl
#!@PERL5@
|
|
|
|
# $NetBSD: builddb.pl,v 1.2 2006/01/06 17:10:58 joerg Exp $
|
|
#
|
|
# builddb -- build .byfile.db from tgz files or directory hierarchies.
|
|
# Copyright (C) 2000, 2003 Dieter Baron
|
|
#
|
|
# This file is part of img2eps, an image to EPS file converter.
|
|
# The author can be contacted at <dillo@giga.or.at>
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in
|
|
# the documentation and/or other materials provided with the
|
|
# distribution.
|
|
# 3. The name of the author may not be used to endorse or promote
|
|
# products derived from this software without specific prior
|
|
# written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY DIETER BARON ``AS IS'' AND ANY EXPRESS
|
|
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
#
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL DIETER BARON BE LIABLE FOR ANY
|
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
|
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
use strict;
|
|
use Getopt::Std;
|
|
use DB_File;
|
|
|
|
my $prg;
|
|
my $options = 'hvo:';
|
|
my $usage = '[-hv] [-o db-file] tar-file|directory ...';
|
|
my %opt;
|
|
my ($verbose, $dbfile);
|
|
my %db;
|
|
my ($file, $pkg, $opkg);
|
|
|
|
#
|
|
# defaults
|
|
#
|
|
|
|
$verbose = 0;
|
|
$dbfile = '/var/db/pkg/xdb.byfile.db';
|
|
|
|
#
|
|
# command line handling
|
|
#
|
|
|
|
($prg) = ($0 =~ /([^\/]+)$/);
|
|
|
|
getopts($options, \%opt);
|
|
|
|
if ($opt{h}) {
|
|
print <<EOF;
|
|
usage: $prg $usage
|
|
-h display this help message
|
|
-o DB-FILE output to DB-FILE
|
|
-v verbose mode
|
|
EOF
|
|
exit 0;
|
|
}
|
|
|
|
if (@ARGV == 0) {
|
|
print STDERR "usage: $prg $usage\n";
|
|
exit 1;
|
|
}
|
|
|
|
$verbose = $opt{v} if ($opt{v});
|
|
$dbfile = $opt{o} if ($opt{o});
|
|
|
|
#
|
|
# setup
|
|
#
|
|
|
|
tie %db, 'DB_File', $dbfile, O_RDWR|O_CREAT, 0666, $DB_BTREE
|
|
or die "cannot open db `$dbfile': $!\n";
|
|
|
|
#
|
|
# process tar files
|
|
#
|
|
|
|
foreach $file (@ARGV) {
|
|
if (-f $file) {
|
|
unless (open LST, "tar -tzf $file |") {
|
|
warn "cannot list `$file': $!\n";
|
|
next;
|
|
}
|
|
|
|
($pkg) = ($file =~ m/([^\/]+)\.tgz$/);
|
|
}
|
|
elsif (-d $file) {
|
|
$pkg = $file;
|
|
|
|
$file = "`pwd`/$file" unless ($file =~ m!^/!);
|
|
unless (open LST, "find $file -type f |") {
|
|
warn "cannot list `$file': $!\n";
|
|
next;
|
|
}
|
|
}
|
|
else {
|
|
warn "no such file or directory: `$file'";
|
|
next;
|
|
}
|
|
|
|
while (<LST>) {
|
|
chomp;
|
|
if (exists($db{"$_\0"})) {
|
|
($opkg = $db{"$_\0"}) =~ s/\0//;
|
|
warn "overwriting `$_' (old: $opkg, new: $pkg)\n";
|
|
}
|
|
print "$pkg: $_\n" if ($verbose);
|
|
$db{"$_\0"} = "$pkg\0";
|
|
}
|
|
|
|
close LST;
|
|
}
|
|
|
|
#
|
|
# cleanup
|
|
#
|
|
|
|
untie %db;
|