diff options
-rwxr-xr-x | scripts/metadata.pl | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 32370d50c..cfda69351 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -374,6 +374,7 @@ sub mconf_depends($$) { my $res; my $dep = shift; my $seen = shift; + my $condition = shift; $dep or $dep = {}; $seen or $seen = {}; @@ -383,11 +384,10 @@ sub mconf_depends($$) { my $m = "depends"; $depend =~ s/^([@\+]+)//; my $flags = $1; - my $condition; my $vdep; if ($depend =~ /^(.+):(.+)$/) { - $condition = $1; + $condition and $condition = "$condition && $1" or $condition = $1; $depend = $2; } next if $seen->{$depend}; @@ -400,13 +400,13 @@ sub mconf_depends($$) { # 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 mconf_depends($package{$depend}->{depends}, 1, $dep, $seen); + $package{$depend} and mconf_depends($package{$depend}->{depends}, 1, $dep, $seen, $condition); $m = "select"; next if $only_dep; }; $flags =~ /@/ or $depend = "PACKAGE_$depend"; - $condition and $depend = "$depend if $condition"; + $condition and ($m =~ /select/ and $depend = "$depend if $condition" or $depend = "!($condition) || $depend"); } $dep->{$depend} =~ /select/ or $dep->{$depend} = $m; } @@ -588,7 +588,11 @@ sub gen_package_mk() { $dep{$pkg->{src}."->".$idx} = 1; } if ($condition) { - $depline .= " \$(if \$(CONFIG_$condition),$depstr)"; + if ($condition =~ /^!(.+)/) { + $depline .= " \$(if \$(CONFIG_$1),,$depstr)"; + } else { + $depline .= " \$(if \$(CONFIG_$condition),$depstr)"; + } } else { $depline .= " $depstr"; } @@ -637,7 +641,7 @@ sub parse_command() { print <<EOF Available Commands: $0 target_config [file] Target metadata in Kconfig format - $0 package_mk [file] Package metadata in makefile format + $0 package_mk [file] Package metadata in makefile format $0 package_config [file] Package metadata in Kconfig format $0 kconfig [file] [config] Kernel config overrides |