#!/usr/bin/perl -w

use strict;
my ($name, $path, $req, %visited, @fringe);

open F, "dependency.txt" or die;
while (<F>) {
    chomp;
    my ($p, $r);
    ($p, $r) = /(.*):requires:(.*)/;
    if (defined $p and ($name) = $p =~ m#.*/(.*)/setup.hint#) {
	$path->{$name} = $p;
	@{ $req->{$name} } = split " ", $r;
    } else {
	print STDERR "? line $.: $_\n";
    }
}

@fringe = @ARGV;
while ($name = shift @fringe) {
    if (not defined $path->{$name}) {
	print STDERR "? cannot find package '$name'\n";
	next;
    }
    $visited{$name} = 1;
    my ($dep);
    foreach $dep (@{ $req->{$name} }) {
	next if (
	    grep { $_ eq $dep } @fringe or
	    exists $visited{$dep}
	);
	push @fringe, $dep;
    }
}

foreach $name (keys %visited) {
    print "$name\n";
}

