aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/package-ipkg.mk3
-rwxr-xr-xscripts/package-metadata.pl20
2 files changed, 20 insertions, 3 deletions
diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk
index 9ca4879bfa..38252b95cd 100644
--- a/include/package-ipkg.mk
+++ b/include/package-ipkg.mk
@@ -35,7 +35,8 @@ PARENR :=)
dep_split=$(subst :,$(space),$(1))
dep_rem=$(subst !,,$(subst $(strip $(PARENL)),,$(subst $(strip $(PARENR)),,$(word 1,$(call dep_split,$(1))))))
-dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(CONFIG_$(cond))))
+dep_and=dep_and_res:=$$(and $(subst $(space),$(comma),$(foreach cond,$(subst &&, ,$(1)),$$(CONFIG_$(cond)))))
+dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(eval $(call dep_and,$(cond)))$(dep_and_res)))
dep_pos=$(if $(call dep_confvar,$(1)),$(call dep_val,$(1)))
dep_neg=$(if $(call dep_confvar,$(1)),,$(call dep_val,$(1)))
dep_if=$(if $(findstring !,$(1)),$(call dep_neg,$(1)),$(call dep_pos,$(1)))
diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl
index e0cdff1e81..76b09a56eb 100755
--- a/scripts/package-metadata.pl
+++ b/scripts/package-metadata.pl
@@ -358,14 +358,30 @@ sub gen_package_config() {
print_package_overrides();
}
+sub and_condition($) {
+ my $condition = shift;
+ my @spl_and = split('\&\&', $condition);
+ if (@spl_and == 1) {
+ return "\$(CONFIG_$spl_and[0])";
+ }
+ return "\$(and " . join (',', map("\$(CONFIG_$_)", @spl_and)) . ")";
+}
+
+sub gen_condition ($) {
+ my $condition = shift;
+ # remove '!()', just as include/package-ipkg.mk does
+ $condition =~ s/[()!]//g;
+ return join("", map(and_condition($_), split('\|\|', $condition)));
+}
+
sub get_conditional_dep($$) {
my $condition = shift;
my $depstr = shift;
if ($condition) {
if ($condition =~ /^!(.+)/) {
- return "\$(if \$(CONFIG_$1),,$depstr)";
+ return "\$(if " . gen_condition($1) . ",,$depstr)";
} else {
- return "\$(if \$(CONFIG_$condition),$depstr)";
+ return "\$(if " . gen_condition($condition) . ",$depstr)";
}
} else {
return $depstr;