History

kconfig: allow symbols implied by y to become m

The 'imply' keyword restricts a symbol to y or n, excluding m when it is implied by y. This is the original behavior since commit 237e3ad0f195 ("Kconfig: Introduce the "imply" keyword"). However, the author of this feature, Nicolas Pitre, stated that the 'imply' keyword should not impose any restrictions. (https://lkml.org/lkml/2020/2/19/714) I agree, and want to get rid of this tricky behavior.

Masahiro Yamada committed 6 years ago

Commit def2fbf1 parent 1cd9b3a2 files · +12 −5Browse files

Unified · Split

2 files
  1. Documentation/kbuild/kconfig-language.rst +11 −1
  2. scripts/kconfig/symbol.c +1 −4
Documentation/kbuild/kconfig-language.rst+11−1
@@ -173,7 +173,7 @@ applicable everywhere (see syntax). · 172 unmodified lines
173 === === ============= ==============173 === === ============= ==============
174 n y n N/m/y174 n y n N/m/y
175 m y m M/y/n175 m y m M/y/n
176 y y y Y/n176 y y y Y/m/n
177 y n * N177 y n * N
178 === === ============= ==============178 === === ============= ==============
179 179
@@ -181,6 +181,16 @@ applicable everywhere (see syntax). · 1 unmodified line
181 ability to hook into a secondary subsystem while allowing the user to181 ability to hook into a secondary subsystem while allowing the user to
182 configure that subsystem out without also having to unset these drivers.182 configure that subsystem out without also having to unset these drivers.
183 183
184 Note: If the combination of FOO=y and BAR=m causes a link error,
185 you can guard the function call with IS_REACHABLE()::
186
187 foo_init()
188 {
189 if (IS_REACHABLE(CONFIG_BAZ))
190 baz_register(&foo);
191 ...
192 }
193
184- limiting menu display: "visible if" <expr>194- limiting menu display: "visible if" <expr>
185 195
186 This attribute is only applicable to menu blocks, if the condition is196 This attribute is only applicable to menu blocks, if the condition is
scripts/kconfig/symbol.c+1−4
@@ -401,8 +401,7 @@ void sym_calc_value(struct symbol *sym) · 400 unmodified lines
401 sym_warn_unmet_dep(sym);401 sym_warn_unmet_dep(sym);
402 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);402 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
403 }403 }
404 if (newval.tri == mod &&404 if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
405 (sym_get_type(sym) == S_BOOLEAN || sym->implied.tri == yes))
406 newval.tri = yes;405 newval.tri = yes;
407 break;406 break;
408 case S_STRING:407 case S_STRING:
@@ -484,8 +483,6 @@ bool sym_tristate_within_range(struct symbol *sym, tristate val) · 75 unmodified lines
484 return false;483 return false;
485 if (sym->visible <= sym->rev_dep.tri)484 if (sym->visible <= sym->rev_dep.tri)
486 return false;485 return false;
487 if (sym->implied.tri == yes && val == mod)
488 return false;
489 if (sym_is_choice_value(sym) && sym->visible == yes)486 if (sym_is_choice_value(sym) && sym->visible == yes)
490 return val == yes;487 return val == yes;
491 return val >= sym->rev_dep.tri && val <= sym->visible;488 return val >= sym->rev_dep.tri && val <= sym->visible;