--- dpkg-checkbuilddeps.pl.orig	2009-12-04 23:43:02.000000000 +0200
+++ dpkg-checkbuilddeps.pl	2009-12-04 23:43:05.000000000 +0200
@@ -41,6 +41,7 @@
                  retrieving them from control file
   -c build-conf  use given string for build conflicts instead of
                  retrieving them from control file
+  -f frontend    show frontend friendly list for build-depends and build-conflicts
   --admindir=<directory>
                  change the administrative directory.
   -h             show this help message.
@@ -49,15 +50,28 @@
 
 my $binary_only=0;
 my $want_help=0;
-my ($bd_value, $bc_value);
+my ($bd_value, $bc_value, $frontend);
 if (! GetOptions('-B' => \$binary_only,
 		 '-h' => \$want_help,
 		 '-d=s' => \$bd_value,
 		 '-c=s' => \$bc_value,
+                 '-f' => \$frontend,
 		 '--admindir=s' => \$admindir)) {
 	usage();
 	exit(2);
 }
+
+if ($frontend) {
+    eval { require AptPkg };
+    if ( $@ )  { 
+	die "-f requires libapt-pkg-perl package to be installed\n"; 
+    }
+    use AptPkg::Config '$_config';
+    use AptPkg::System '$_system';
+    use AptPkg::Cache;
+    use AptPkg::Version;
+}
+
 if ($want_help) {
 	usage();
 	exit(0);
@@ -70,6 +84,8 @@
 
 my $facts = parse_status("$admindir/status");
 
+my ($_cache, $_sysver);
+
 unless (defined($bd_value) or defined($bc_value)) {
     $bd_value = 'build-essential';
     $bd_value .= ", " . $fields->{"Build-Depends"} if defined $fields->{"Build-Depends"};
@@ -85,6 +101,17 @@
 	}
     }
 }
+
+sub init_aptpkg() {
+    $_config->init;
+    $_config->{quiet} = 2;
+    $_system = $_config->system;
+    $_sysver = $_system->versioning;
+    $_cache = AptPkg::Cache->new;    
+}
+
+init_aptpkg if ($frontend);
+
 my (@unmet, @conflicts);
 
 if ($bd_value) {
@@ -96,15 +123,115 @@
 		Dpkg::Deps::parse($bc_value, reduce_arch => 1, union => 1), $facts);
 }
 
+my @feed_frontend;
+
+sub eval_ver_rel($ $ $) {
+# returns true if VER1 REL VER2 is true
+    
+    my ($ver1, $rel, $ver2) = @_;
+    my $cmp = $_sysver->compare($ver1, $ver2);
+
+    return 1 
+      if ( ( ($rel eq "<=") && ( $cmp <= 0 ) )
+        or ( ($rel eq ">=") && ( $cmp >= 0 ) )
+	or ( ($rel eq "<<") && ( $cmp <  0 ) )
+	or ( ($rel eq ">>") && ( $cmp >  0 ) )
+	or ( ($rel eq "=")  && ( $cmp == 0 ) )
+    );
+
+    return 0;
+}
+
+sub feed_bd_list($) {
+    my $rf = shift;
+    my @ar = @$rf;
+    for (@ar) {
+	if ( /(^\S+)\s*\(\s*([><=]{1,2})\s*(\S+)\)\s*$/ ) { # package (relation version)
+	    my ($pkg, $rel, $ver_control) = ($1, $2, $3);
+            my $pc = $_cache->{$pkg};
+	    unless ($pc) { printf STDERR _g("Unknown package %s\n"), $pkg; next; }
+	    my $current_state = $pc->{CurrentState};
+	    my $available     = $pc->{VersionList};
+	    if ( $available && ($current_state ne "Installed") ) {
+		my $found_avail = 0;
+		for my $v (@$available) { # walk thru avail versions of that package
+		    if ( eval_ver_rel($v->{VerStr}, $rel, $ver_control) ) {
+			$found_avail = 1;
+			last;
+		    }
+		}
+		if ($found_avail) {
+		    push @feed_frontend, $pkg;
+		}
+		else {
+		    printf STDERR _g("Can not satisfy build dependency %s %s %s\n"), $pkg, $rel, $ver_control;
+		}		
+	    }
+
+        }
+	elsif ( /(^\S+)$/ )  { # package without relation and version
+	    my $pc = $_cache->{$_};
+	    unless ($pc) { printf STDERR _g("Unknown package %s\n"), $_; next; }
+	    push @feed_frontend, $_;
+	}
+	else {
+	    printf STDERR _g("Unknown Build-Depends format\n");
+	}
+    }
+}
+
+sub feed_bc_list($) {
+    my $rf = shift;
+    my @ar = @$rf;
+    # No need to yell for unknown packages listed in Build-Conflicts
+    for (@ar) {
+	if ( /(^\S+)\s*\(\s*([><=]{1,2})\s*(\S+)\)\s*$/ ) { # package (relation version)
+	    my ($pkg, $rel, $ver_control) = ($1, $2, $3);
+            my $pc = $_cache->{$pkg};
+	    my $current_state = $pc->{CurrentState};
+	    if ($pc->{CurrentVer}) {
+		my $ver_system = $pc->{CurrentVer}{VerStr};
+		push @feed_frontend, $pkg."-" if ( eval_ver_rel($ver_system, $rel, $ver_control)
+		    && ( $current_state ne "NotInstalled" )
+		)
+	    }
+        }
+	elsif ( /(^\S+)$/ )  { # package without relation and version
+	    push @feed_frontend, $_."-";
+	}
+	else {
+	    printf STDERR _g("Unknown Build-Conflicts format\n");	    
+	}	
+    }
+}
+
 if (@unmet) {
+    if ($frontend) {
+	my @pv_pairs = map { $_->dump() } @unmet;
+	feed_bd_list(\@pv_pairs);
+    }
+    else {
 	printf STDERR _g("%s: Unmet build dependencies: "), $progname;
-	print STDERR join(" ", map { $_->dump() } @unmet), "\n";
+	print STDERR join(" ", map { $_->dump() } @unmet), "\n";	
+    }
 }
 if (@conflicts) {
+    if ($frontend) {
+	my @pv_pairs = map { $_->dump() } @conflicts;
+	feed_bc_list(\@pv_pairs);
+    }
+    else {
 	printf STDERR _g("%s: Build conflicts: "), $progname;
 	print STDERR join(" ", map { $_->dump() } @conflicts), "\n";
+    }
 }
-exit 1 if @unmet || @conflicts;
+if ($frontend and scalar @feed_frontend) {
+    print STDOUT join (" ", @feed_frontend), "\n";
+    exit 0;
+}
+else { 
+    exit 1 if @unmet || @conflicts;
+};
 
 # Silly little status file parser that returns a Dpkg::Deps::KnownFacts
 sub parse_status {
