#!/usr/bin/env perl use strict; my $target = shift @ARGV; # Which package do we want to follow? my %depList; # All of the dependencies. find_deps("$target"); ## # Return Codes: # 0: Dep found and processed OK. # 1: Dep already found # 2: No deps found # 3: Error while searching for package sub find_deps() { my $query = shift; $query =~ s/[<>=].*//; return 1 if exists $depList{$query}; # If it's found once it is added to %depList, no use checking twice. record_deps("$query"); my $result = `pacman -Si $query 2>&1| grep '^Depends' | head -n 1`; chomp $result; if ("$result" eq '') { print STDERR "$query is required but cannot be found. It is probably provided by another package"; return 3; } print "$query\n"; $result =~ s/Depends On\s+ :\s+//; $result =~ s/\s+$//; #print "$result\n"; my @deps = split(/ /, $result); return 2 if ("$deps[0]" eq 'None'); foreach my $nextdep (@deps) { find_deps("$nextdep") } } sub record_deps() { $_ = shift; if (/(.*)([<>=]{0,2}.*)?/) { my $package = "$1"; my $version = "$2" || ''; $depList{$package} = "$version"; return 0; } return 1; }