X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=scripts%2Fmetadata.pl;h=cfda69351bfc1240c616da304e18c6e43cc55baf;hp=32370d50c16567aebf928564ba467547f7d81b69;hb=243fb9ec3fa9113202a12dbcae5c50de8eb1080f;hpb=71959e7b7be2b739c99bc005d060e9a6024c788c diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 32370d50c1..cfda69351b 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 <