--- fields.new.old	2004-04-01 14:26:33.000000000 +0200
+++ fields.new.new	2004-04-01 14:26:23.000000000 +0200
@@ -195,6 +195,7 @@
 #---- Package relations (binary package)
 
 if ($type eq "binary") {
+	my %deps;
 	for my $field (qw(depends pre-depends recommends suggests conflicts provides replaces)) {
 		if (open(FH, "fields/$field")) {
 			#Get data and clean it
@@ -204,8 +205,10 @@
 
 			my (@seen_libstdcs, @seen_tcls, @seen_tclxs, @seen_tks, @seen_tkxs, @seen_libpngs);
 
+			my $is_dep_field = sub { grep { $_ eq $_[0] } qw(depends pre-depends recommends suggests) };
+
 			print "E: $pkg $type: alternates-not-allowed $field\n"
-			    if ($data =~ /\|/ && ! grep { $_ eq $field } qw(depends pre-depends recommends suggests));
+			    if ($data =~ /\|/ && ! &$is_dep_field($field));
 
 			for my $dep (split /\s*,\s*/, $data) {
 				my @alternatives;
@@ -224,6 +227,12 @@
 				for my $part_d (@alternatives) {
 					my ($d_pkg, $d_version, $d_arch, $rest, $part_d_orig) = @$part_d;
 
+					#Save the type of relationship (<<, <=, ...) and the field name:
+					if (&$is_dep_field($field)) {
+						$deps{$d_pkg} = [] if ! $deps{$d_pkg};
+						push @{$deps{$d_pkg}}, [$field, $d_version];
+					}
+
 					print "E: $pkg $type: versioned-provides $part_d_orig\n"
 					    if ($field eq "provides" && $d_version->[0]);
 
@@ -240,22 +249,22 @@
 					    if $rest;
 
 					print "E: $pkg $type: depends-on-obsolete-package $part_d_orig [$field]\n"
-					    if ($known_obsolete_packages{$d_pkg} && grep {$field eq $_} qw(depends pre-depends recommends suggest));
+					    if ($known_obsolete_packages{$d_pkg} && &$is_dep_field($field));
 
 					print "E: $pkg $type: depends-on-essential-package-without-using-version $part_d_orig [$field]\n"
-					    if ($d_pkg ne "coreutils" && $known_essential{$d_pkg} && ! $d_version->[0]);
+					    if ($d_pkg ne "coreutils" && $known_essential{$d_pkg} && ! $d_version->[0] && &$is_dep_field($field));
 
 					print "E: $pkg $type: package-depends-on-an-x-font-package $part_d_orig [$field]\n"
 					    if ($field =~ /^(pre-)?depends$/ && $d_pkg =~ /^xfont.*/);
 
 					print "E: $pkg $type: needlessly-depends-on-awk $field\n"
-					    if ($d_pkg eq "awk" && $d_version->[0]);
+					    if ($d_pkg eq "awk" && ! $d_version->[0] && &$is_dep_field($field));
 
 					print "E: $pkg $type: depends-on-libdb1-compat $field\n"
-					    if ($d_pkg eq "libdb1-compat" && $pkg !~ /^libc(6|6.1|0.3)/);
+					    if ($d_pkg eq "libdb1-compat" && $pkg !~ /^libc(6|6.1|0.3)/ && $field =~ /^(pre-)depends$/);
 
 					print "W: $pkg $type: doc-package-depends-on-main-package $field\n"
-					    if ("$d_pkg-doc" eq $pkg);
+					    if ("$d_pkg-doc" eq $pkg && $field =~ /^(pre-)depends$/);
 				}
 			}
 			print "E: $pkg $type: package-depends-on-multiple-libstdc-versions", join (" ", @seen_libstdcs), "\n"
@@ -272,6 +281,20 @@
 			    if (scalar @seen_libpngs > 1);
 		}
 	}
+
+	for my $d_pkg_name (keys %deps) {
+		my $d_pkg = $deps{$d_pkg_name};
+		if (scalar @$d_pkg > 1) {
+			#Allow things like Depends: package1 (>= 1.3), package1 (<= 5.2)
+			unless (scalar @$d_pkg == 2 && 
+			        (($d_pkg->[0]->[1]->[0] =~ />=|>>|>/ && $d_pkg->[1]->[1]->[0] =~ /<=|<<|</) or
+					 ($d_pkg->[0]->[1]->[0] =~ /<=|<<|</ && $d_pkg->[1]->[1]->[0] =~ />=|>>|>/))){
+				print "E: $pkg $type: package-has-a-duplicate-relation $d_pkg_name";
+				print " ", $_->[1]->[0], " ", $_->[1]->[1], " (in ",$_->[0],")" for (@$d_pkg);
+				print "\n";
+			}
+		}
+	}
 }
 
 #---- Package relations (source package)
@@ -307,7 +330,13 @@
 					}
 
 					print "E: $pkg $type: depends-on-build-essential-package-without-using-version $d_pkg [$field: $part_d_orig]\n"
-					    if ($known_build_essential{$pkg} && ! $d_version->[1]);
+					    if ($known_build_essential{$d_pkg} && ! $d_version->[1]);
+
+					print "E: $pkg $type: depends-on-essential-package-without-using-version $part_d_orig [$field]\n"
+					    if ($d_pkg ne "coreutils" && $known_essential{$d_pkg} && ! $d_version->[0]);
+
+					print "E: $pkg $type: bad-relation $part_d_orig [$field]\n"
+					    if $rest;
 				}
 			}
 		}
