RPM4

 view release on metacpan or  search on metacpan

bin/hrpmreb  view on Meta::CPAN


=head2 %createrpmsdir

If set, it will try to create rpms build directory

=head2 %sortbybuilddate

If define, sort srpms by builddate before build

=head2 %livestat

if set, hrpmreb use IPC to store his status, then you'll be able
to use hrpmreb --stat to immediatelly get status of the current build. 

=cut

require RPM4;
RPM4::setverbosity($verbose || "INFO");

my $hlog = undef;

RPM4::setlogcallback(
    sub {
        my %arg = @_;
        loging("%s", $arg{msg});
    }
);

sub loging {
    my ($fmt, @var) = @_;
    printf STDERR $fmt, @var;
    if ($hlog) {
        printf $hlog $fmt, @var;
    }
}

config_macros();

if (RPM4::expandnumeric("%livestat")) {
    require IPC::ShareLite;
    foreach my $k (1000 .. 1020) {
        $ipcstat = new IPC::ShareLite (
            -key => $k,
            -create => 'yes',
            -destroy => 'no',
            -mode => 0644,
        ) and last;
    }
    $ipcstat or die "no IPC availlable\n";
}

my %status = (
    srpmdone => 0,
    srpmfailure => 0,
    srpmtotal => 0,
    steptime => time,
    currentsrpms => 'Preparing build',
    currentstep => '',
);
    
my $passphrase = RPM4::expand('%{?gpgpass}');

my @srcdir = split(':', RPM4::expand('%{?srcdir}'));
print RPM4::expand("Source dir: %{?srcdir}%{?!srcdir:(none)}\n") if ($batch);

!@srcdir && $batch and die "No src dir, please define \%srcdir\n";

my @bindir = split(':', RPM4::expand('%{?bindir}'));
if (RPM4::expandnumeric('%checkbinary')) {
    if (@bindir) {
        print RPM4::expand("Using binary dir: %{?bindir}%{?!bindir:(none)}\n");
    } else {
        die "No bin dir, please define \%bindir or unset \%checkbinary\n";
    }
}

if ($dumpconfig) {
    RPM4::dumprc(\*STDOUT);
    exit 0;
}

-d RPM4::expand("%{?logdir}%{!?logdir:.}") or mkdir RPM4::expand("%{?logdir}%{!?logdir:.}")
    or die "Can't create logdir ". RPM4::expand("%{?logdir}%{!?logdir:.}") . " $!\n";

if (RPM4::expandnumeric('%createrpmsdir')) {
    foreach my $macro (qw(%_topdir %_sourcedir %_builddir %_srpmdir %_rpmdir %_rpmdir/noarch %_rpmdir/%_target_cpu %_specdir %_tmppath)) {
        -d RPM4::expand($macro) or mkdir RPM4::expand($macro)
	    or die "Can't create dir " .  RPM4::expand($macro) . "($macro): $!";
    }
}

set_ipc_status(currentstep => "searching srpms");

my @srpmstobuild;
my @specstobuild;

if($batch) {
   @srpmstobuild = map { glob("$_/*.src.rpm") } @srcdir;
}

foreach my $arg (@ARGV) {
    -f $arg or do {
        push(@srpmstobuild, map { glob("$_/$arg") } @srcdir);
        next;
    };
    if ($arg =~ /\.src\.rpm$/) {
        push @srpmstobuild, $arg;
    } else {
        push @specstobuild, $arg;
    };
}

$status{srpmtotal} = scalar(@srpmstobuild) + scalar(@specstobuild);

if (! $status{srpmtotal}) {
    die sprintf("Nothing to do, %s\n", $batch ? "check \%srcdir value" : "give src.rpm too rebuild or use -b");
}

if (RPM4::expandnumeric("%sortbybuilddate")) {
    loging("Sorting srpms by buildate\n");
    set_ipc_status(currentstep => "sorting srpms");



( run in 0.903 second using v1.01-cache-2.11-cpan-df04353d9ac )