aboutsummaryrefslogtreecommitdiff
path: root/Tools/scripts/portsearch
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/scripts/portsearch')
-rwxr-xr-xTools/scripts/portsearch155
1 files changed, 87 insertions, 68 deletions
diff --git a/Tools/scripts/portsearch b/Tools/scripts/portsearch
index 39ea41a21ff9..60baf764cc2d 100755
--- a/Tools/scripts/portsearch
+++ b/Tools/scripts/portsearch
@@ -50,20 +50,21 @@ my $VERSION = "1.0";
my $file = "/usr/ports/INDEX" . ($osrel <= 4 ? "" : "-$osrel");
my $match = 1;
my $count = 0;
+my $fulldesc = 0;
# We only need 7 of the 10 fields in a record; define which ones in a
# hash slice to ignore the un-needed ones. This also makes it easy to
# add or remove fields in the future.
-@fields{qw(n p i m x b r)} = (0, 1, 3, 5, 6, 7, 8);
+@fields{qw(n p i e m x b r)} = (0, 1, 3, 4, 5, 6, 7, 8);
#
# Print a basic help message
#
sub usage() {
- print(STDERR "
-Usage: portsearch [-h] [-n name] [-p path] [-i info] [-m maint] [-x index]
+ print(STDERR "
+Usage: portsearch [-h] [-e] [-n name] [-p path] [-i info] [-m maint] [-x index]
[-b b_deps] [-r r_deps] [-d deps] [-f file]
");
@@ -74,7 +75,7 @@ Usage: portsearch [-h] [-n name] [-p path] [-i info] [-m maint] [-x index]
#
sub help() {
- print(STDERR "portsearch $VERSION - A utility for searching the ports tree.
+ print(STDERR "portsearch $VERSION - A utility for searching the ports tree.
Options:
@@ -87,6 +88,7 @@ Options:
-r r_deps Search for \"r_deps\" in run depends of ports
-d deps Search for \"deps\" in both build & run depends of ports
-f file Use \"file\" instead of /usr/ports/INDEX
+ -e Show long description for all matching ports
-h Print this message and exit
Report bugs to <marko\@freebsd.org>.
@@ -100,69 +102,86 @@ Report bugs to <marko\@freebsd.org>.
MAIN: {
# No command-line args
- if ($#ARGV == -1) {
- usage();
- exit(1);
- }
+ if ($#ARGV == -1) {
+ usage();
+ exit(1);
+ }
- getopt('fnpimxbrd', \%opts);
+ getopts('ehf:n:p:i:m:x:b:r:d:', \%opts);
+ # Process -e first, as it doesn't take
+ # arguments
+ if (defined($opts{"e"})) {
+ $fulldesc = 1;
+ delete $opts{"e"};
+ }
# Command-line args, but without options
- if (keys(%opts) == 0 ) {
- usage();
- exit(1);
- }
+ if (keys(%opts) == 0 ) {
+ # Default to name search if no constraints
+ # specified
+ if ($#ARGV == 0) {
+ $opts{"n"} = $ARGV[0];
+ } else {
+ usage();
+ exit(1);
+ }
+ }
# If ``-h'', ignore any other options
- if (defined($opts{"h"})) {
- help();
- exit(1);
- }
+ if (defined($opts{"h"})) {
+ help();
+ exit(1);
+ }
# A different INDEX file
- if (defined($opts{"f"})) {
- $file = $opts{"f"};
- }
+ if (defined($opts{"f"})) {
+ $file = $opts{"f"};
+ }
# If ``-d'' used we don't want ``-b'' & ``-r''
- if (defined($opts{"d"})) {
- delete $opts{"b"};
- delete $opts{"r"};
- }
+ if (defined($opts{"d"})) {
+ delete $opts{"b"};
+ delete $opts{"r"};
+ }
# Finished with it now so remove it from hash
- delete $opts{"f"};
+ delete $opts{"f"};
- open(INDEX, "$file") || die "Unable to open $file";
-
- while (<INDEX>) {
- chomp;
- @list = split(/\|/);
-
- $match = 1;
- # All searches are case-insensitive!
- # For ``-d'' search both build & run depends.
- # Only fail to match if not found in either.
- foreach $key (keys (%opts)) {
- if ($key eq "d") {
- if ($list[$fields{"b"}] !~ m#$opts{$key}#i &&
+ open(INDEX, "$file") || die "Unable to open $file";
+
+ while (<INDEX>) {
+ chomp;
+ @list = split(/\|/);
+
+ $match = 1;
+ # All searches are case-insensitive!
+ # For ``-d'' search both build & run depends.
+ # Only fail to match if not found in either.
+ foreach $key (keys (%opts)) {
+ if ($key eq "d") {
+ if ($list[$fields{"b"}] !~ m#$opts{$key}#i &&
$list[$fields{"r"}] !~ m#$opts{$key}#i) {
- $match = 0;
- last;
- }
- } else {
- if ($list[$fields{$key}] !~ m#$opts{$key}#i) {
- $match = 0;
- last;
+ $match = 0;
+ last;
+ }
+ } else {
+ if ($list[$fields{$key}] !~ m#$opts{$key}#i) {
+ $match = 0;
+ last;
+ }
+ }
+ } # foreach
+
+ if ($match == 1) {
+ $count++;
+ write;
+ if ($fulldesc) {
+ open my $pkgdescr, $list[$fields{"e"}] || next;
+ print while <$pkgdescr>; print "\n";
+ close $pkgdescr;
+ }
}
- }
- } # foreach
-
- if ($match == 1) {
- $count++;
- write;
- }
- } # while
+ } # while
- close(INDEX);
+ close(INDEX);
- print ("Number of matching ports = $count\n\n");
+ print ("Number of matching ports = $count\n\n");
} # MAIN
@@ -170,24 +189,24 @@ MAIN: {
format STDOUT =
Port: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[0]
+$list[$fields{"n"}]
Path: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[1]
+$list[$fields{"p"}]
Info: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[3]
-~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[3]
+$list[$fields{"i"}]
+~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$list[$fields{"i"}]
Maint: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[5]
+$list[$fields{"m"}]
Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[6]
+$list[$fields{"x"}]
B-deps: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[7]
-~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[7]
+$list[$fields{"b"}]
+~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$list[$fields{"b"}]
R-deps: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[8]
-~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$list[8]
+$list[$fields{"r"}]
+~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$list[$fields{"r"}]
.