#!/usr/bin/perl
# Generates from the package-list a dependency file, suitable to be fed to
# tsort. The file has the base package name on the left, and the package it
# depends on is on the right. It is sorted.

my $arch=`dpkg-architecture -qDEB_HOST_ARCH`;
chomp $arch;

my $defconfigdir = $ENV{KW_DEFCONFIG_DIR};
if (!defined($defconfigdir)) {
	die "Required environment variable \$KW_DEFCONFIG_DIR is not defined";
}
my $configdir = ($ENV{KW_CONFIG_DIR} || '.');

my $flavour=$ARGV[0];

my @out;

sub read_package_list
{
	my $file = shift;
	open(LIST, $file) || die "package-list: $!";
	my $package;
	while (<LIST>) {
		chomp;
		next if /^#/;

		if (/^Package:\s*(.*)/) {
			$package=$1;
		}
		elsif (/Depends:\s*(.*)/) {
			my @depends=split(", ", $1);
			# Skip packages that are not built for this architecture.
			my $modlistdir="";
			if (-d "$configdir/modules/$arch-$flavour") {
				$modlistdir = "$configdir/modules/$arch-$flavour";
			}
			elsif (-d "$configdir/modules/$flavour") {
				$modlistdir = "$configdir/modules/$flavour";
			}
			else {
				$modlistdir = "$configdir/modules/$arch";
			}

			my $fwlistdir="";
			if (-d "$configdir/firmware/$arch-$flavour") {
				$fwlistdir="$configdir/firmware/$arch-$flavour";
			}
			elsif (-d "$configdir/firmware/$flavour") {
				$fwlistdir="$configdir/firmware/$flavour";
			}
			else {
				$fwlistdir="$configdir/firmware/$arch";
			}

			next unless -e "$modlistdir/$package" or -e "$fwlistdir/$package";

			# Override previously defined dependencies
			@out = grep(!/^$package\t/, @out);

			foreach my $dep (@depends) {
				# Skip depends that are not built for this
				# architecture.
				next unless -e "$modlistdir/$dep" or -e "$fwlistdir/$dep";
				push @out, "$package\t$dep\n";
			}
		}
	}
	close LIST;
}

read_package_list("$defconfigdir/package-list");
read_package_list("$configdir/package-list");
print sort @out;
