137 lines
3.9 KiB
Perl
137 lines
3.9 KiB
Perl
#!@PERL@ -w
|
|
# -*- perl -*-
|
|
#
|
|
# $NetBSD: finddepends,v 1.8 2013/10/21 10:43:28 wiz Exp $
|
|
#
|
|
# Copyright (c) 2006 The NetBSD Foundation, Inc.
|
|
#
|
|
# This code was originally contributed to the NetBSD Foundation, Inc.
|
|
# by Thomas Klausner <wiz@NetBSD.org>.
|
|
#
|
|
# 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. Neither the name of author nor the names of its contributors may
|
|
# be used to endorse or promote products derived from this software
|
|
# without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
|
|
# CONTRIBUTORS ``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 THE FOUNDATION OR CONTRIBUTORS 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;
|
|
|
|
my ($PKGSRCDIR, $arg, $bl3, %bl3content, @bl3files, @bl3result,
|
|
$content, $found, $key, $makefile, @makefiles, %opt,
|
|
@optionfiles, $pattern, @searchlist);
|
|
|
|
$PKGSRCDIR = $ENV{PKGSRCDIR};
|
|
if (! $PKGSRCDIR) {
|
|
$PKGSRCDIR = "/usr/pkgsrc";
|
|
}
|
|
|
|
sub usage {
|
|
print STDERR "usage: finddepends [-h] [-p pkgsrcdir] package\n\n";
|
|
print STDERR "Find all packages that depend on the argument package.\n";
|
|
exit 0;
|
|
}
|
|
|
|
getopts('hp:', \%opt);
|
|
usage() if $opt{h};
|
|
if ($opt{p}) {
|
|
$PKGSRCDIR = $opt{p};
|
|
}
|
|
|
|
usage if (1 ne @ARGV);
|
|
$arg = shift;
|
|
|
|
@searchlist = ();
|
|
push @searchlist, $arg;
|
|
|
|
if (! -d $PKGSRCDIR || ! -d "$PKGSRCDIR/doc" || ! -d "$PKGSRCDIR/mk") {
|
|
print STDERR "Invalid pkgsrc directory $PKGSRCDIR\n";
|
|
exit 1;
|
|
}
|
|
|
|
@bl3files = <$PKGSRCDIR/*/*/buildlink3.mk>;
|
|
%bl3content = ();
|
|
foreach $bl3 (@bl3files) {
|
|
open OUT, $bl3 or die "can't open $bl3";
|
|
$content = "";
|
|
while (<OUT>) {
|
|
chomp($_);
|
|
$content .= $_ unless $_ =~ m"^#";
|
|
}
|
|
close OUT;
|
|
$bl3content{$bl3} = $content;
|
|
}
|
|
|
|
@bl3result = ();
|
|
while ($pattern = pop @searchlist) {
|
|
# print "* Looking for $pattern\n";
|
|
for $key (keys %bl3content) {
|
|
# print "searching $key ($bl3content{$key})\n\n";
|
|
if ($bl3content{$key} =~ m/\Q$pattern/) {
|
|
# print "\n\n ******** MATCH $key \n\n";
|
|
# print "** $pattern found in $key\n";
|
|
# print "** BUMP $key\n";
|
|
delete($bl3content{$key});
|
|
# print "\n\n **** ADDING $key \n\n";
|
|
$key =~ s,$PKGSRCDIR/,,;
|
|
# print "** Adding $key\n";
|
|
print "$key\n";
|
|
push @searchlist, $key;
|
|
push @bl3result, $key;
|
|
}
|
|
}
|
|
}
|
|
|
|
print "\n";
|
|
|
|
@makefiles = <$PKGSRCDIR/*/*/Makefile*>;
|
|
@optionfiles = <$PKGSRCDIR/*/*/options.mk>;
|
|
push(@makefiles, @optionfiles);
|
|
@optionfiles = <$PKGSRCDIR/*/*/mozilla-common.mk>;
|
|
push(@makefiles, @optionfiles);
|
|
|
|
for $makefile (@makefiles) {
|
|
# print "* reading $makefile\n";
|
|
open OUT, $makefile or die "can't open $makefile";
|
|
$content = "";
|
|
while (<OUT>) {
|
|
chomp($_);
|
|
$content .= $_;
|
|
}
|
|
close OUT;
|
|
$found = 0;
|
|
for $pattern (@bl3result) {
|
|
if ($content =~ m/\Q$pattern/) {
|
|
$found = 1;
|
|
last;
|
|
}
|
|
}
|
|
# print "** BUMP $makefile\n" if ($found);
|
|
if ($found) {
|
|
$makefile =~ s,$PKGSRCDIR/,,;
|
|
print "$makefile\n";
|
|
}
|
|
}
|
|
|
|
exit 0;
|