return \%result;
}
-# for parsing Build-Depends from Sources
-sub parse_srcdeplist {
- my $pkg = shift;
- my $deps = shift;
- my $arch = shift;
- my $dep;
- my @results;
-
- foreach $dep (split( /\s*,\s*/, $deps )) {
- my @alts = split( /\s*\|\s*/, $dep );
- # Anything with an | is ignored, as it can be configured on a
- # per-buildd basis what will be installed
- next if $#alts != 0;
- $_ = shift @alts;
- if (!/^([^\s([]+)\s*(\(\s*([<=>]+)\s*(\S+)\s*\))?(\s*\[([^]]+)\])?/) {
- warn( "parse_srcdeplist: bad dependency $_\n" );
- next;
- }
- my($dep, $rel, $relv, $archlist) = ($1, $3, $4, $6);
- if ($archlist) {
- $archlist =~ s/^\s*(.*)\s*$/$1/;
- my @archs = split( /\s+/, $archlist );
- my ($use_it, $ignore_it, $include) = (0, 0, 0);
- foreach (@archs) {
- if (/^!/) {
- $ignore_it = 1 if substr($_, 1) eq $arch;
- } else {
- $use_it = 1 if $_ eq $arch;
- $include = 1;
- }
- }
- warn "Warning: inconsistent arch restriction on ",
- "$pkg: $dep depedency\n"
- if $ignore_it && $use_it;
- next if $ignore_it || ($include && !$use_it);
- }
- my $neg = 0;
- if ($dep =~ /^!/) {
- $dep =~ s/^!\s*//;
- $neg = 1;
- }
- my $result;
- $result->{'package'} = $dep;
- $result->{'Neg'} = $neg;
- if ($rel && $relv) {
- $result->{'rel'} = $rel;
- $result->{'version'} = $relv;
- }
- push @results, $result;
- }
- return \@results;
-}
-
sub build_deplist {
my $list = shift;
my($key, $result);
return $result;
}
-sub get_unsatisfied_dep {
- my $bd = shift;
- my $pkgs = shift;
- my $dep = shift;
- my $savedep = shift;
-
- my $pkgname = $dep->{'package'};
-
- if (defined $pkgs->{$pkgname}{'Provider'}) {
- # provides. leave them for buildd/sbuild.
- return "";
- }
-
- # check cache
- return $pkgs->{$pkgname}{'Unsatisfied'} if $savedep and defined($pkgs->{$pkgname}{'Unsatisfied'});
-
- # Return unsatisfied deps to a higher caller to process
- if ((!defined($pkgs->{$pkgname})) or
- (defined($dep->{'rel'}) and !version_compare( $pkgs->{$pkgname}{'version'}, $dep->{'rel'}, $dep->{'Version'} ) ) ) {
- my %deplist;
- $deplist{$pkgname} = $dep;
- my $deps = build_deplist(\%deplist);
- $pkgs->{$pkgname}{'Unsatisfied'} = $deps if $savedep;
- return $deps;
- }
-
- # set cache to "" to avoid infinite recursion
- $pkgs->{$pkgname}{'Unsatisfied'} = "" if $savedep;
-
- if (defined $pkgs->{$dep->{'package'}}{'depends'}) {
- my $deps = parse_deplist( $pkgs->{$dep->{'package'}}{'depends'} );
- foreach (keys %$deps) {
- $dep = $$deps{$_};
- # recur on dep.
- my $ret = get_unsatisfied_dep($bd,$pkgs,$dep,1);
- if ($ret ne "") {
- my $retdep = parse_deplist( $ret );
- foreach (keys %$retdep) {
- $dep = $$retdep{$_};
-
- $dep->{'rel'} = '>=' if defined($dep->{'rel'}) and $dep->{'rel'} =~ '^=';
-
- if (defined($dep->{'rel'}) and $dep->{'rel'} =~ '^>' and defined ($pkgs->{$dep->{'package'}}) and
- version_compare($bd->{$pkgs->{$dep->{'package'}}{'Source'}}{'ver'},'>>',$pkgs->{$dep->{'package'}}{'Sourcev'})) {
- if (not defined($merge_binsrc{$dep->{'package'}})) {
- # the uninstallable package doesn't exist in the new source; look for something else that does.
- delete $$retdep{$dep->{'package'}};
- foreach (sort (split( /\s*,\s*/, $bd->{$pkgs->{$dep->{'package'}}{'Source'}}{'bin'}))) {
- next if ($pkgs->{$_}{'all'} or not defined $pkgs->{$_}{'version'});
- $dep->{'package'} = $_;
- $dep->{'rel'} = '>>';
- $dep->{'version'} = $pkgs->{$_}{'Version'};
- $$retdep{$_} = $dep;
- last;
- }
- }
- } else {
- # sanity check to make sure the depending binary still exists, and the depended binary exists and dep-wait on a new version of it
- if ( defined($merge_binsrc{$pkgname}) and defined($pkgs->{$dep->{'package'}}{'version'}) ) {
- delete $$retdep{$dep->{'package'}};
- $dep->{'package'} = $pkgname;
- $dep->{'rel'} = '>>';
- $dep->{'version'} = $pkgs->{$pkgname}{'Version'};
- $$retdep{$pkgname} = $dep;
- }
- delete $$retdep{$dep->{'package'}} if (defined ($dep->{'rel'}) and $dep->{'rel'} =~ '^>');
- }
- }
- $ret = build_deplist($retdep);
- $pkgs->{$pkgname}{'Unsatisfied'} = $ret if $savedep;
- return $ret;
- }
- }
- }
- return "";
-}
-
sub call_edos_depcheck {
my $packagesfile = shift;
my $srcs = shift;