X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/8e3dcd75f30b2c2055668b80a84b1219cc7b78b7..d9f49b62b28ebd245587854efa484974d90debbf:/scripts/metadata.pl?ds=sidebyside diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 32370d50c..dc6eada12 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 <