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 )