#!/usr/bin/perl #--once per text line from rpm query all installed # foreach $rpmpkg (`rpm -q -a`) { chomp ($rpmpkg); print "\nPACKAGE:\n$rpmpkg\n"; print "> Provides:\n"; #--once for each item the package provides # foreach $provide (`rpm -q --provides $rpmpkg`){ chomp ($provide);chop ($provide);chop ($provide); print " - $provide\n"; } print "> Requires:\n"; #--once for each item the package requires # foreach $require (`rpm -q -R $rpmpkg 2>&1`){ chomp ($require);chop ($require);chop ($require); $require =~ s/\(.*?\)$//; #--provider is what provides the requirement #--package could be a full package name # $provider = `rpm -q --whatprovides $require 2>&1`; #--if there's a space in $require, only use the first word # if ($require =~ " ") { ($first,@trash) = split(/ /, $require); $package = `rpm -q $first 2>&1`; } else { $package = `rpm -q $require 2>&1`; } #--if $require starts with a / and is a file on the filesystem # if ((substr($require, 0, 1) eq "/") && -e $require) { printf " - %-32s -- File Exists\n", $require; #--if $require is a package name which is installed # } elsif ($package ne "package $require is not installed\n" && $package ne "") { if ($require =~ " ") { printf " ? %-32s -- check vers: $package", $require; } else { printf " - %-32s -- provided by: $package", $require; } #--if $require is not provided by a package # } elsif ($provider eq "no package provides $require\n") { printf " ! %-32s -- (not installed)\n", $require; #--if $require was a garbled thing that caused errors # } elsif ($provider eq "") { #--this means we needed to properly filter out parenthesis after $require print " #PARSE!# $require\n"; } else { printf " - %-32s -- provided by: $provider", $require; } } }