--- pkg_tree.orig 2001-12-12 11:44:40 UTC +++ pkg_tree @@ -26,7 +26,7 @@ # updated by a newer version. In case of tcl-8.3.3_3, this is tcl-8.3.3_4. # # PKG-TREE is (c) Edwin Groothuis, edwin@mavetju.org -# For license issues, see the file LICESE. +# For license issues, see the file LICENSE. # For more information, see the website: http://www.mavetju.org # @@ -34,31 +34,95 @@ use strict; use Getopt::Std; -use vars qw/ $opt_v /; +use vars qw/ $opt_b $opt_q $opt_t $opt_v /; $opt_v=0; -getopts("v"); +$opt_t=0; +$opt_b=0; +$opt_q=0; +getopts("bqtv"); + +my @args=@ARGV; +my $hasargs=$#ARGV>=0; + +my %required; # this key is required by other packages +my %requires; # this key requires other packages +my @dirs; +my $pkg; + +`pkg -N 2>&1`; +my $child_error_pkg_N = $?; + +if ($child_error_pkg_N == 0) { # begin pkgng + + my $re_trim = qr/^\s+|\s+$/o; + my $re_rtrim = qr/:\s*$/o; + my $re_pkg = qr/^\s+/o; + my $line; + + $line = `pkg info -r -a`; + if ($? == 0) { + my @lines = split(/^/, $line); + $pkg = ''; + foreach $line (@lines) { + if ($line !~ $re_pkg) { + $pkg = $line; + $pkg =~ s/$re_rtrim//; + $required{$pkg}[0] = 0; + } elsif ($pkg ne '') { + $line =~ s/$re_trim//g; + $required{$pkg}[++$required{$pkg}[0]] = $line; + } + } + } + + $line = `pkg info -d -a`; + if ($? == 0) { + my @lines = split(/^/, $line); + $pkg = ''; + foreach $line (@lines) { + if ($line !~ $re_pkg) { + $pkg = $line; + $pkg =~ s/$re_rtrim//; + $requires{$pkg}[0] = 0; + } elsif ($pkg ne '') { + $line =~ s/$re_trim//g; + $requires{$pkg}[++$requires{$pkg}[0]] = $line; + } + } + } + + $line = `pkg info -q`; + if ($? == 0) { + @dirs = split(/^/, $line); + foreach $pkg (@dirs) { + $pkg =~ s/$re_trim//g; + unless (exists $required{$pkg}) { + $required{$pkg}[0] = 0; + } + unless (exists $requires{$pkg}) { + $requires{$pkg}[0] = 0; + } + } + } + +} # end pkgng +elsif (-e '/usr/sbin/pkg_info') { # begin pkg_install my $PKGDIR="/var/db/pkg"; opendir DIR,$PKGDIR or die "Couldn't open $PKGDIR"; -my @dirs=readdir DIR; +@dirs=readdir DIR; closedir DIR; @dirs=grep !/^\./,@dirs; +@dirs=grep !/^pkgdb.db$/,@dirs; @dirs=sort @dirs; -my @args=@ARGV; -my $hasargs=$#ARGV>=0; - -my %required; # this key is required by other packages -my %requires; # this key requires other packages - # # Read from every package the +REQUIRED_BY file. This file contains # info about the packages which require this package. # -my $pkg; foreach $pkg (@dirs) { $required{$pkg}[0]=0; if (open FILE,$PKGDIR."/".$pkg."/+REQUIRED_BY") { @@ -101,6 +165,11 @@ foreach $pkg (@dirs) { } } +} # end pkg_install +else { + die; +} + # # Print the dependancies (recursive) of the packages @@ -150,8 +219,10 @@ foreach $pkg (@dirs) { } next if (!$found); } + next if ($opt_t && $required{$pkg}[0]!=0); + next if ($opt_b && $requires{$pkg}[0]!=0); print "$pkg\n"; - if ($requires{$pkg}[0]!=0) { + if (!$opt_q && $requires{$pkg}[0]!=0) { print_deps("|"," ",1,$pkg); } }