#! /usr/bin/perl

# dump the Build-deps of a debian/control file.

use Dpkg::Control::Info;

use Dpkg::Deps;

use Getopt::Long::Descriptive;

my $build_deps = 1;
my $deps = 0;

my $verbose = 0;
my $debug = 0;

#### CMD line processsing:
my ($opt, $usage) = describe_options(
    'my-program %o <some-arg>',
    [ 'deps|s', "installation dependencies only", {  } ],
    [],
    [ 'verbose|v',  "print extra stuff"            ],
    [ 'help|h',     "print usage message and exit", { shortcircuit => 1 } ],
    );

print($usage->text), exit if $opt->help;

$verbose = $opt->verbose;
if ($opt->deps) {
    $build_deps = 0;
    $deps = 1;
}


my $file=shift();
if ( -d $file ) {
    $file=$file . "/debian/control" ;
}

unless  (-f $file) {
    die("non-existent file $file");
}

my $control = Dpkg::Control::Info->new($file);
if ($verbose) {
    print STDERR "parsed $file\n";
}


my $fields = $control->get_source();
my $source_pkg = $fields->{Source};

#   push @bd_list, $fields->{'Build-Depends-Arch'} if not $ignore_bd_arch;
#   push @bd_list, $fields->{'Build-Depends-Indep'} if not $ignore_bd_indep;

sub fun{
    my ($dep) = @_;
    # print $dep, "\n";
    # ignore ' (...)' trailing
    $dep =~ s/ (.*)$//;
    print $source_pkg, "\t", $dep, "\n";
    return 1;
}


if ($build_deps) {
    print STDERR "Build-Depens\n" if $debug;

    # fixme: this is not a string!
    $dep_string = deps_parse($fields->{'Build-Depends'});
    deps_iterate($dep_string, \&fun);
}

print STDERR "dependency string: $dep_string\n";

# mapping:  bdep: source -> binary
#           rel:  binary -> source.
# from this reorder.  possibly a cycle!

my $dep_string ="";
# fixme:
if ($deps) {
    print STDERR "Depends\n" if $debug;

    # $dep_string = deps_parse($fields->{'Depends'});
    # , reduce_restrictions => 1, union => 1,
    # build_dep => 1, build_profiles => \@build_profiles,
    # host_arch => $host_arch

    foreach $_ ($control->get_packages())
    {
        print $_->{Package}, "\t", $source_pkg, "\n";

        my $depends = $_->{'Depends'};
        print STDERR $depends, "\n";

        # my $quoted_name= quotemeta "\${shlibs:Depends}";
        # print STDERR $quoted_name, "\n";
        # $depends =~ s/$quoted_name//;

        $depends =~ s/\$\Q{shlibs:Depends}//;
        $depends =~ s/\$\Q{misc:Depends}//;
        # drop ${shlibs:Depends}, ${misc:Depends},
        # print STDERR $depends, "\n";
        $dep_string = deps_parse($depends);
        deps_iterate($dep_string, \&fun);
    }
}
