diff options
author | Bryan Hundven <bryanhundven@gmail.com> | 2016-11-30 16:34:39 -0800 |
---|---|---|
committer | Bryan Hundven <bryanhundven@gmail.com> | 2016-11-30 16:34:39 -0800 |
commit | 89a2182f14dec1f8dd2ff633c65449ca5efda95b (patch) | |
tree | 20b8ec7906236c6671c42af3bcc82f1a99d1485d /kconfig/symbol.c | |
parent | 699a54d8cedef2883ca6834feed99f8f2b077332 (diff) | |
download | crosstool-ng-89a2182f14dec1f8dd2ff633c65449ca5efda95b.tar.gz crosstool-ng-89a2182f14dec1f8dd2ff633c65449ca5efda95b.tar.bz2 crosstool-ng-89a2182f14dec1f8dd2ff633c65449ca5efda95b.zip |
kconfig: sync upstream changes
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Diffstat (limited to 'kconfig/symbol.c')
-rw-r--r-- | kconfig/symbol.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kconfig/symbol.c b/kconfig/symbol.c index 25cf0c2c..24322984 100644 --- a/kconfig/symbol.c +++ b/kconfig/symbol.c @@ -209,12 +209,26 @@ static void sym_set_all_changed(void) static void sym_calc_visibility(struct symbol *sym) { struct property *prop; + struct symbol *choice_sym = NULL; tristate tri; /* any prompt visible? */ tri = no; + + if (sym_is_choice_value(sym)) + choice_sym = prop_get_symbol(sym_get_choice_prop(sym)); + for_all_prompts(sym, prop) { prop->visible.tri = expr_calc_value(prop->visible.expr); + /* + * Tristate choice_values with visibility 'mod' are + * not visible if the corresponding choice's value is + * 'yes'. + */ + if (choice_sym && sym->type == S_TRISTATE && + prop->visible.tri == mod && choice_sym->curr.tri == yes) + prop->visible.tri = no; + tri = EXPR_OR(tri, prop->visible.tri); } if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) |