diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/metadata.pl | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 963be3f382..7514a17135 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -341,6 +341,39 @@ sub package_depends($$) { return $ret; } +sub mconf_depends($$) { + my $depends = shift; + my $only_dep = shift; + my $res; + + $depends or return; + my @depends = @$depends; + foreach my $depend (@depends) { + my $m = "depends"; + $depend =~ s/^([@\+]+)//; + my $flags = $1; + my $vdep; + + if ($vdep = $package{$depend}->{vdepends}) { + $depend = join("||", map { "PACKAGE_".$_ } @$vdep); + } else { + $flags =~ /\+/ and do { + next if $only_dep; + $m = "select"; + + # Menuconfig will not treat 'select FOO' as a real dependency + # thus if FOO depends on other config options, these dependencies + # will not be checked. To fix this, we simply emit all of FOO's + # depends here as well. + $package{$depend} and $res .= mconf_depends($package{$depend}->{depends}, 1); + }; + $flags =~ /@/ or $depend = "PACKAGE_$depend"; + } + $res .= "\t\t$m $depend\n"; + } + return $res; +} + sub print_package_config_category($) { my $cat = shift; my %menus; @@ -394,20 +427,7 @@ sub print_package_config_category($) { foreach my $default (split /\s*,\s*/, $pkg->{default}) { print "\t\tdefault $default\n"; } - foreach my $depend (@{$pkg->{depends}}) { - my $m = "depends"; - $depend =~ s/^([@\+]+)//; - my $flags = $1; - my $vdep; - - if ($vdep = $package{$depend}->{vdepends}) { - $depend = join("||", map { "PACKAGE_".$_ } @$vdep); - } else { - $flags =~ /@/ or $depend = "PACKAGE_$depend"; - $flags =~ /\+/ and $m = "select"; - } - print "\t\t$m $depend\n"; - } + print mconf_depends($pkg->{depends}, 0); print "\t\thelp\n"; print $pkg->{description}; print "\n"; |