#!/usr/bin/perl -w

use strict;
use warnings;
use Carp;
use Getopt::Long;
use File::Basename;
use RPM::Header;

my $ROOT='/var/ftp/pub/Linux/ALT/Sisyphus/files';
if (-d '/ALT/Sisyphus/files') {
    $ROOT='/ALT/Sisyphus/files';
} elsif (-d '/var/ftp/pub/Linux/ALT/Sisyphus/files') {
    $ROOT='/var/ftp/pub/Linux/ALT/Sisyphus/files';
} else {
    die "Sisyphus not found!"
}

my $SRPMSPATH="$ROOT/SRPMS";
my @RPMSPATH=("$ROOT/noarch/RPMS","$ROOT/i586/RPMS","$ROOT/x86_64/RPMS");

my %whitelist=map {$_=>1} qw/
trackballs-music
pidgin-mini
hasher-priv
shared-color-profiles
/;
my %blacklist=map {$_=>1} qw/
binutils rpm
fglrx_glx
php5
php5-cgi
php-base
alsa-tools
alsa-utils
/;

my %srpmyes;
my %srpmno;

my %devel_pkg_used;
&load_map('list.devel.buildreq',\%devel_pkg_used);
&load_map('list.autoported',\%whitelist);

for my $path (@RPMSPATH) {
    for my $rpmfile (glob "$path/*.rpm") {
	# if already deleted
	next unless -e $rpmfile;
	my $href = new RPM::Header $rpmfile;
	unless ($href) {
	    warn "can't read rpm header for $rpmfile";
	    next;
	}
	my $srpmfile=$href->{SOURCERPM};
	my $name=$href->{NAME};
#	$srpmno{$srpmfile}=1 if $name=~/^lib.+-devel$/;
	$srpmno{$srpmfile}=1 if $devel_pkg_used{$name};

	my $filenames=$href->filenames();
	next unless $filenames;
	foreach (@$filenames) {
	    #print "$_\n";
	    $srpmyes{$srpmfile}=1 if m!^/usr/share/applications/.+desktop$!;
	    $srpmyes{$srpmfile}=1 if m!^/usr/bin/!;
	    $srpmno{$srpmfile}=1 if m!^/etc(?:/xinit.d|rc.d)!;
	    $srpmno{$srpmfile}=1 if m!^/usr/share/java!;
	}
    }
}

foreach my $srpmpath (glob "$SRPMSPATH/*.src.rpm") {
    my $href = new RPM::Header $srpmpath;
    my $srpmfile=basename($srpmpath);
    my $yes=0;
    $yes=1 if $srpmyes{$srpmfile};
    $yes=0 if $srpmno{$srpmfile};
    $yes=1 if $href->{GROUP}=~/^Games/;
    $yes=0 if $href->{GROUP}=~m!^(?:System/X11|Development/Haskell|Development/Erlang)!;
    

    my $name=$href->{NAME};
    $yes=0 if $name=~/^(?:branding-|design-|alterator|appliance-|perl|python-module|ruby|rails|eclipse|emacs|xemacs|pear|pike|rpm-build|rpm-macros)/;
    $yes=0 if $name=~/^(?:java-|xfce|lxde|lxdm|gnome|nautilus|kde)/;

    $yes=1 if $name=~/^fonts-(?:ttf|type1)/;
    $yes=1 if $name=~/^claws-mail/;
    $yes=1 if $name=~/^(?:uqm|p6014)/;

    $yes=1 if $whitelist{$name};
    $yes=0 if $blacklist{$name};
    print $name,"\n" if $yes;
}

sub load_list {
    my ($filename,$listptr)=@_;
    unless( -e $filename) {
	warn "$filename not found";
	return;
    }
    open my $fn, '<', $filename or die "open $filename failed: $!";
    while (<$fn>) {
	chomp;
	push @$listptr, $_;
    }
    close ($fn) or die "close $filename failed: $!";
}

sub load_map {
    my ($filename,$mapptr)=@_;
    unless( -e $filename) {
	warn "$filename not found";
	return;
    }
    open my $fn, '<', $filename or die "open $filename failed: $!";
    while (<$fn>) {
	chomp;
	$mapptr->{$_}=1;
    }
    close ($fn) or die "close $filename failed: $!";
}
