2013-03-21 20:48:17 +01:00
|
|
|
#! /usr/bin/perl -w
|
2013-03-21 11:34:18 +01:00
|
|
|
|
2013-03-21 20:37:23 +01:00
|
|
|
|
2013-03-21 11:34:18 +01:00
|
|
|
use File::Basename;
|
|
|
|
use File::Temp qw/ tempdir /;
|
|
|
|
use XML::Simple;
|
|
|
|
use Data::Dumper;
|
|
|
|
use Cwd;
|
|
|
|
|
2013-03-21 20:48:17 +01:00
|
|
|
use strict;
|
|
|
|
|
2014-04-10 09:01:57 +02:00
|
|
|
BEGIN {
|
|
|
|
my ($wd) = $0 =~ m-(.*)/- ;
|
|
|
|
$wd ||= '.';
|
|
|
|
unshift @INC, $wd;
|
|
|
|
}
|
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
require CreatePackageDescr;
|
|
|
|
|
2013-03-26 16:57:16 +01:00
|
|
|
my $ret = 0;
|
2014-03-28 16:13:52 +01:00
|
|
|
my $dir = shift @ARGV;
|
2013-03-21 20:37:23 +01:00
|
|
|
my %toignore;
|
2014-03-28 16:13:52 +01:00
|
|
|
my $repodir;
|
|
|
|
while (@ARGV) {
|
2014-04-09 17:32:45 +02:00
|
|
|
my $switch = shift @ARGV;
|
|
|
|
if ( $switch eq "-f" ) {
|
|
|
|
my $toignore = shift @ARGV;
|
|
|
|
open( TOIGNORE, $toignore ) || die "can't open $toignore";
|
|
|
|
while (<TOIGNORE>) {
|
|
|
|
chomp;
|
|
|
|
$toignore{$_} = 1;
|
|
|
|
}
|
|
|
|
close(TOIGNORE);
|
|
|
|
}
|
|
|
|
elsif ( $switch eq "-r" ) {
|
|
|
|
$repodir = shift @ARGV;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
print "read the source luke: $switch ? \n";
|
|
|
|
exit(1);
|
2014-03-28 16:13:52 +01:00
|
|
|
}
|
2013-03-21 20:37:23 +01:00
|
|
|
}
|
2013-03-21 11:34:18 +01:00
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
for my $pdir ( glob("$dir/*") ) {
|
|
|
|
if ( !-f "$pdir/rpmlint.log" ) {
|
|
|
|
print
|
|
|
|
"Couldn't find a rpmlint.log in the build results in $pdir. This is mandatory\n";
|
|
|
|
my $name = basename($pdir);
|
|
|
|
if ( $name eq "rpm"
|
|
|
|
|| $name eq "rpm-python"
|
|
|
|
|| $name eq "popt"
|
|
|
|
|| $name eq "rpmlint"
|
|
|
|
|| $name eq "rpmlint-Factory" )
|
|
|
|
{
|
|
|
|
print "ignoring - whitelist\n";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ret = 1;
|
|
|
|
}
|
2013-04-18 13:33:25 +02:00
|
|
|
}
|
2014-04-09 17:32:45 +02:00
|
|
|
else {
|
|
|
|
open( GREP, "grep 'W:.*invalid-license ' $pdir/rpmlint.log |" );
|
|
|
|
while (<GREP>) {
|
|
|
|
print "Found rpmlint warning: ";
|
|
|
|
print $_;
|
|
|
|
$ret = 1;
|
|
|
|
}
|
2013-04-17 20:43:50 +02:00
|
|
|
}
|
2013-03-21 11:34:18 +01:00
|
|
|
}
|
|
|
|
|
2013-03-24 07:48:00 +01:00
|
|
|
my %targets;
|
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
sub write_package($$) {
|
|
|
|
my $ignore = shift;
|
|
|
|
my $package = shift;
|
2013-03-24 07:48:00 +01:00
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
my $out = CreatePackageDescr::package_snippet($package);
|
2013-03-24 07:48:00 +01:00
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
my $name = basename($package);
|
2014-04-22 11:46:43 +02:00
|
|
|
if ($name =~ m/^[a-z0-9]{32}-/) { # repo cache
|
|
|
|
$name =~ s,^[^-]*-(.*)\.rpm,$1,;
|
|
|
|
} else {
|
|
|
|
$name =~ s,^(.*)-[^-]*-[^-]*.rpm,$1,;
|
|
|
|
}
|
2013-03-21 11:34:18 +01:00
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
if ( $ignore == 1 && defined $toignore{$name} ) {
|
|
|
|
return;
|
2013-03-21 20:37:23 +01:00
|
|
|
}
|
2013-06-27 19:31:13 +02:00
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
print PACKAGES $out;
|
|
|
|
return $name;
|
2013-03-21 20:37:23 +01:00
|
|
|
}
|
2013-03-21 20:48:17 +01:00
|
|
|
|
2014-04-09 17:32:45 +02:00
|
|
|
my @rpms = glob("$repodir/*.rpm");
|
2013-03-21 21:07:15 +01:00
|
|
|
my $pfile = $ENV{'HOME'} . "/packages";
|
2014-04-09 17:32:45 +02:00
|
|
|
open( PACKAGES, ">", $pfile ) || die 'can not open';
|
2013-03-21 21:07:15 +01:00
|
|
|
print PACKAGES "=Ver: 2.0\n";
|
|
|
|
|
2013-03-21 20:48:17 +01:00
|
|
|
foreach my $package (@rpms) {
|
2014-04-09 17:32:45 +02:00
|
|
|
write_package( 1, $package );
|
2013-03-21 20:48:17 +01:00
|
|
|
}
|
|
|
|
|
2013-04-17 20:43:50 +02:00
|
|
|
@rpms = glob("$dir/*/*.rpm");
|
2013-03-21 20:48:17 +01:00
|
|
|
foreach my $package (@rpms) {
|
2014-04-09 17:32:45 +02:00
|
|
|
my $name = write_package( 0, $package );
|
|
|
|
$targets{$name} = 1;
|
2013-03-21 20:48:17 +01:00
|
|
|
}
|
|
|
|
|
2013-03-21 20:37:23 +01:00
|
|
|
close(PACKAGES);
|
|
|
|
|
2014-04-22 11:46:43 +02:00
|
|
|
#print STDERR "calling installcheck\n";
|
|
|
|
#print STDERR Dumper(\%targets);
|
2014-04-09 17:32:45 +02:00
|
|
|
open( INSTALL, "/usr/bin/installcheck x86_64 $pfile 2>&1|" )
|
|
|
|
|| die 'exec installcheck';
|
|
|
|
while (<INSTALL>) {
|
2013-03-21 21:07:15 +01:00
|
|
|
chomp;
|
2014-04-22 11:46:43 +02:00
|
|
|
# print STDERR "$_\n";
|
2013-03-24 07:48:00 +01:00
|
|
|
next if (m/unknown line:.*Flx/);
|
2014-04-09 17:32:45 +02:00
|
|
|
if ( $_ =~ m/can't install (.*)-([^-]*)-[^-\.]/ ) {
|
|
|
|
|
2014-04-22 11:46:43 +02:00
|
|
|
# print STDERR "CI $1 " . $targets{$1} . "\n";
|
2014-04-09 17:32:45 +02:00
|
|
|
if ( defined $targets{$1} ) {
|
|
|
|
print "$_\n";
|
|
|
|
while (<INSTALL>) {
|
|
|
|
last if (m/^can't install /);
|
|
|
|
print "$_";
|
|
|
|
}
|
|
|
|
$ret = 1;
|
|
|
|
last;
|
2013-03-24 07:48:00 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
close(INSTALL);
|
|
|
|
|
2014-04-22 11:46:43 +02:00
|
|
|
#print STDERR "checking file conflicts\n";
|
2014-04-09 17:32:45 +02:00
|
|
|
my $cmd = sprintf( "perl %s/findfileconflicts $pfile", dirname($0) );
|
|
|
|
open( INSTALL, "$cmd |" ) || die 'exec fileconflicts';
|
2013-04-02 15:15:42 +02:00
|
|
|
my $inc = 0;
|
2014-04-09 17:32:45 +02:00
|
|
|
while (<INSTALL>) {
|
2013-03-24 07:48:00 +01:00
|
|
|
chomp;
|
2014-04-09 17:32:45 +02:00
|
|
|
|
2014-04-22 11:46:43 +02:00
|
|
|
# print STDERR "$_\n";
|
2014-04-09 17:32:45 +02:00
|
|
|
if ( $_ =~ m/found conflict of (.*)-[^-]*-[^-]* with (.*)-[^-]*-[^-]*:/ ) {
|
2013-04-02 15:15:42 +02:00
|
|
|
$inc = 0;
|
2014-04-09 17:32:45 +02:00
|
|
|
|
2014-04-22 11:46:43 +02:00
|
|
|
# print STDERR "F $1 $2 -$targets{$1}-$targets{$2}-\n";
|
2014-04-09 17:32:45 +02:00
|
|
|
if ( defined $targets{$1} || defined $targets{$2} ) {
|
|
|
|
$inc = 1;
|
|
|
|
$ret = 1;
|
2013-03-24 07:48:00 +01:00
|
|
|
}
|
|
|
|
}
|
2013-04-02 15:15:42 +02:00
|
|
|
if ($inc) {
|
2014-04-09 17:32:45 +02:00
|
|
|
print "$_\n";
|
2013-04-02 15:15:42 +02:00
|
|
|
}
|
2013-03-21 21:07:15 +01:00
|
|
|
}
|
|
|
|
close(INSTALL);
|
|
|
|
|
2014-04-22 11:46:43 +02:00
|
|
|
#print STDERR "RET $ret\n";
|
2013-03-26 16:57:16 +01:00
|
|
|
exit($ret);
|