kconfig: Document SYMBOL_OPTIONAL logic
[carl9170fw.git] / config / menu.c
index d061a4d4e2030e6ea801119c2173f07f1e782bb1..7634d567e77949d2f7a71d05a5de8d9e96403500 100644 (file)
@@ -62,13 +62,8 @@ void menu_add_entry(struct symbol *sym)
                menu_add_symbol(P_SYMBOL, sym, NULL);
 }
 
-void menu_end_entry(void)
-{
-}
-
 struct menu *menu_add_menu(void)
 {
-       menu_end_entry();
        last_entry_ptr = &current_entry->list;
        return current_menu = current_entry;
 }
@@ -274,13 +269,13 @@ static void sym_check_prop(struct symbol *sym)
                        if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)
                                prop_warn(prop,
                                    "config symbol '%s' uses %s, but is "
-                                   "not boolean or tristate", sym->name, use);
+                                   "not bool or tristate", sym->name, use);
                        else if (sym2->type != S_UNKNOWN &&
                                 sym2->type != S_BOOLEAN &&
                                 sym2->type != S_TRISTATE)
                                prop_warn(prop,
                                    "'%s' has wrong type. '%s' only "
-                                   "accept arguments of boolean and "
+                                   "accept arguments of bool and "
                                    "tristate type", sym2->name, use);
                        break;
                case P_RANGE:
@@ -554,6 +549,15 @@ void menu_finalize(struct menu *parent)
                sym->flags |= SYMBOL_WARNED;
        }
 
+       /*
+        * For non-optional choices, add a reverse dependency (corresponding to
+        * a select) of '<visibility> && m'. This prevents the user from
+        * setting the choice mode to 'n' when the choice is visible.
+        *
+        * This would also work for non-choice symbols, but only non-optional
+        * choices clear SYMBOL_OPTIONAL as of writing. Choices are implemented
+        * as a type of symbol.
+        */
        if (sym && !sym_is_optional(sym) && parent->prompt) {
                sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr,
                                expr_alloc_and(parent->prompt->visible.expr,