#!/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 '') {
		warn "$query is required but cannot be found.\n";
		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() {
	#my ($package,$version);
	$_ = shift;
	if (/(.*)([<>=]{0,2}.*)?/) {
		my $package = "$1";
		my $version = "$2" || '';
		$depList{$package} = "$version";
		return 0;
	}
	return 2;
}