Hi Kurt,

On Mon, Feb 01, 2010 at 10:51:59PM +0100, Kurt Roeckx wrote:
> Package: edos-distcheck
> Version: 1.4.2-8

> We currently see this as result of edos-builddebcheck for plplot
> on ia64 and mipsel:
>    BD-Problem          : plplot (= 5.9.2-3) build-depends on one of:
>      - itcl3-dev (= 3.4~b1-2)
>      source---plplot (= 5.9.2-3) and tcl8.5-dev (= 8.5.8-2) conflict
>      itcl3-dev (= 3.4~b1-2) depends on one of:
>      - tcl8.5-dev (= 8.5.8-2)
> 
> Notice the "source---plplot" part.

This is very strange. I do not understand how this can happen. Do
you, by any chance, use a non-standard edos-builddebcheck script ?
I attach the script from the 1.4.2-8 package so that you can compare.

If you are indeed using the script from the package then I'll need
your input data (packages and source file). I just crafted by hand
a test case from the description in your bug report but couldn't
reproduce the bug with that.

-Ralf.
#!/usr/bin/perl -w

# Copyright (C) 2008 Ralf Treinen <[email protected]>
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, version 2 of the License.

$debug=0;

# the prefix used to encode source packages
$sourceprefix="source---";

$architecture="";
$binexplain=0;
$edosoptions = "-failures -explain";
while ( $arg = shift @ARGV ) {
    if ( $arg eq '-a' || $arg eq '--architecture' ) {
        if ($#ARGV == -1) {
            die "-a option needs a value";
        } else {
            $architecture = shift @ARGV;
        }
    } elsif ( $arg =~ "--binexplain" || $arg =~ "-be" ) {
        $binexplain = 1;
    } elsif ( $arg =~ /^-.*/ ) {
        die "unrecognized option: $arg";
    } else {
        last;
    }
}

if ($#ARGV != 0) {
    die "Usage: edos-debbuildcheck [options] Packages Sources"
} else {
    $packagefile = $arg;
    $sourcesfile = shift(@ARGV);
}

if ($debug) {
    print "Arch: $architecture\n";
    print "Packages: $packagefile\n";
    print "Sources:  $sourcesfile\n";
    print "Edos options: $edosoptions\n";
}

# check that all stanzas in the binary package file have the same
# architecture.
$packagearch="";
open(P,$packagefile);
while (<P>) {
    next unless /^Architecture/;
    next if /^Architecture:\s*all/;
    /Architecture:\s*([^\s]*)/;
    if ($packagearch eq "") {
        $packagearch = $1;
    } elsif ( $packagearch ne $1) {
        die "Package file contains different architectures: $packagearch, $1";
    }
}
close P;

if ( $architecture eq "" ) {
    if ( $packagearch eq "" ) {
        die "No architecture option given, " .
            "and no non-all architecture found in the Packages file";
    } else {
        $architecture = $packagearch;
    }
} else {
    if ( $packagearch ne "" & $architecture ne $packagearch) {
        die "Architecture option is $architecture ".
            "but the package file contains architecture $packagearch";
    }
}

open(RESULT,"python /usr/share/edos-distcheck/add-sources.py ".
     "--prefix \"$sourceprefix\" < $packagefile $sourcesfile $architecture ".
     "| edos-debcheck $edosoptions|");

$sourcestanza=0;
$explanation="";
$binpackage="";

while (<RESULT>) {
    if (/^\s+/) {
        if ($sourcestanza) {
            s/^(\s*)$sourceprefix(.*)depends on/$1$2build-depends on/o;
            s/^(\s*)$sourceprefix(.*) and (.*) conflict/$1$2 build-conflicts 
with $3/o;
            print;
            if (/depends on ([^\s]*) .*\{.*\}/) {
                push(@binqueue,$1);
            }
        } else {
            $explanation .= $_;
        }
    } else {
        if ($binpackage ne ""){
            $binfailures{$binpackage} = $explanation;
            $binpackage="";
        }
        if (/^$sourceprefix.*: FAILED/o) {
            s/^$sourceprefix//o;
            print;
            
            $sourcestanza=1;
        } elsif (/^([^\s]*) .*: FAILED/) {
            $binpackage=$1;
            $explanation=$_;
            $explanation.=<RESULT>;
            $sourcestanza=0;
        } else {
            # we have someting strange here
            $sourcestanza=0;
        }
    }
}

close RESULT;

if ($binexplain) {
    while (@binqueue) {
        $p=pop(@binqueue);
        $v=$binfailures{$p};
        next unless defined $v;
        $binfailures{$p}="";
        print "$v" if $v ne "";
        if ($v=~/depends on ([^\s]*) .*\{.*\}/) {
            push(@binqueue,$1);
        }
    }
}

Reply via email to