#!/usr/bin/perl -w
use strict;
use LockFile::Simple;

my $HOME      = $ENV{HOME};
my $SRC_DIR   = $HOME . "/RPM/SRPMS";
my $LOG_DIR   = $HOME . "/RPM/SRPMS/logs";
my $ERROR_DIR = $HOME . "/RPM/SRPMS/error";

my $lockmgr = LockFile::Simple->make(
    -autoclean => 1,
    -stale     => 1
);
$lockmgr->trylock( $HOME . "/tmp/.build-daemon" )
  || die "build-daemon already running";

mkdir $LOG_DIR;
mkdir $ERROR_DIR;

chdir $SRC_DIR;

sub build_pkg($$);


sub build_all_packages()
{
    my @srpms = glob("$SRC_DIR/*.src.rpm");
    foreach my $pkg (@srpms) {
        my $rc1 = build_pkg( $pkg, 'i586' );
        my $rc2 = build_pkg( $pkg, 'x86_64' );

        if ( $rc1 and $rc2 ) {
            unlink $pkg;
        }
        else {
            my $fn = $pkg;
            $fn =~ s/^.*\///;
            unlink "$ERROR_DIR/$fn";
            rename( $pkg, "$ERROR_DIR/$fn" ) || die "$@$!";
        }
    }
}

build_all_packages();

#while (1) {
#    sleep 1;
#}

sub get_logname($$) {
    my $pkg  = shift;
    my $arch = shift;
    my $fn   = $pkg;
    $fn =~ s/^.*\///;
    my $name = $fn;
    $name =~ s/.src.rpm$//;
    my $date = `date -I`;
    chomp $date;
    return "$name.$arch.$date.log";
}

sub build_pkg($$) {
    local $| = 1;
    my $pkg  = shift;
    my $arch = shift;
    my $fn   = $pkg;
    $fn =~ s/^.*\///;
    my $name = $fn;
    $name =~ s/.src.rpm$//;
    my $date = `date -I`;
    chomp $date;
    my $logfile = get_logname( $pkg, $arch );
    my $rc = 1;

    my $license = `rpm -qp --qf '%{LICENSE}' "$pkg"`;
    chomp $license;
    my $pocket = 'sisyphus';
    if ( $license =~ /internal/i ) {
        $pocket = 'internal';
    }

    my $repo = $ENV{HOME} . "/repo/" . $pocket;

    print "$name ($arch) into $pocket pocket...";

    if ( $arch eq 'x86_64' ) {
`hsh --repo="$repo" -v "$pkg" 2>> $LOG_DIR/$logfile >> $LOG_DIR/$logfile`;
        $rc = $?;
    }
    else {
`i586 hsh --repo="$repo" -v "$pkg" 2>> $LOG_DIR/$logfile >> $LOG_DIR/$logfile`;
        $rc = $?;
    }
    if ( $rc == 0 ) {
        print "Ok\n";
        print `h-cleanup-dups -f ~/repo/$pocket > /dev/null`;
        print `h-cleanup-pocket ~/repo/$pocket`;
        print `h-gen ~/repo/$pocket`;
        return 1;
    }
    unlink "$ERROR_DIR/$logfile";
    rename "$LOG_DIR/$logfile", "$ERROR_DIR/$logfile";
    print "Error\n";
    return '';
}

