#!/usr/bin/perl -w

use strict;
use warnings;

use File::Find;

# packages that have a -devel subpackage
my %develpacks;

# these as BuildRequires are useful on their own
my %ignore_dep = map { $_ => 1 } qw(
	graphviz
	ImageMagick
	postfix
	perl
	python
	php5
	ruby
	aspell
	autotrace
	apache2-mod_perl
	gettext
	devhelp
	libxml2
	libxslt
	texlive
);

# ignore these specs
my %ignore_spec = map { $_ => 1 } qw(
	beagle-index.spec
	collect-desktop-files.spec
	installation-images.spec
);

# populate %develpacks using an internal file
# we are looking for lines with "P:$name-$version-$release-$buildtime:"
open(my $rpmdeps, "<", "/work/CDs/all/full-i386/suse/rpmdeps");
while (<$rpmdeps>) {
	next unless /^P:([^ ]*)-devel-[^ -]*-[^ -]*-[^ -]*:/;
	next if $ignore_dep{$1};
	$develpacks{$1} = 1;
}
close($rpmdeps);


sub examine_spec {
	return unless /^.*\.spec\z/s;
	return if $ignore_spec{$_};

	my %deps;
	my $name = $_;
	open(my $spec, "<", $name);
	while (<$spec>) {
		next unless /^buildrequires:/i;
		my @tok = split(/\s+/);
		shift(@tok);
		foreach my $dep (@tok) {
			$deps{$dep} = 1;
		}
	}
	close($spec);

	foreach my $dep (keys(%deps)) {
		if ($develpacks{$dep}) {
			if ($deps{"$dep-devel"}) {
				print "$name: unnecessary-dep $dep $dep-devel\n"
			} else {
				print "$name: no-dep-on-devel $dep\n";
			}
		}
	}
}

# Traverse desired filesystems
File::Find::find({wanted => \&examine_spec}, '/work/SRC/all', '/work/SRC/arch');
