On 6/3/24 9:19 AM, Masahiro Yamada wrote: > Documentation/kbuild/kconfig-language.rst explains the behavior of > 'select' as follows: > > reverse dependencies can be used to force a lower limit of > another symbol. The value of the current menu symbol is used as the > minimal value <symbol> can be set to. > > This is not true when the 'select' property is followed by 'if'. > > [Test Code] > > config MODULES > def_bool y > modules > > config A > def_tristate y > select C if B > > config B > def_tristate m > > config C > tristate > > [Result] > > CONFIG_MODULES=y > CONFIG_A=y > CONFIG_B=m > CONFIG_C=m > > If "the value of A is used as the minimal value C can be set to", > C must be 'y'. > > The actual behavior is "C is selected by (A && B)". The lower limit of > C is downgraded due to B being 'm'. > > I have always thought this behavior was odd, and this ha arisen several has > times in the mailing list. > > I do not know whether it is a bug or intended behavior. Anyway, it is > not feasible to change it now because many Kconfig files rely on this > behavior. The same applies to 'imply'. > > Document this (but reserve the possibility for a future change). > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> Reviewed-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> Thanks. > --- > > Documentation/kbuild/kconfig-language.rst | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst > index 86be5b857cc4..1fb3f5e6193c 100644 > --- a/Documentation/kbuild/kconfig-language.rst > +++ b/Documentation/kbuild/kconfig-language.rst > @@ -150,6 +150,12 @@ applicable everywhere (see syntax). > That will limit the usefulness but on the other hand avoid > the illegal configurations all over. > > + If "select" <symbol> is followed by "if" <expr>, <symbol> will be > + selected by the logical AND of the value of the current menu symbol > + and <expr>. This means, the lower limit can be downgraded due to the > + presence of "if" <expr>. This behavior may seem weird, but we rely on > + it. (The future of this behavior is undecided.) > + > - weak reverse dependencies: "imply" <symbol> ["if" <expr>] > > This is similar to "select" as it enforces a lower limit on another > @@ -202,6 +208,10 @@ applicable everywhere (see syntax). > imply BAR > imply BAZ > > + Note: If "imply" <symbol> is followed by "if" <expr>, the default of <symbol> > + will be the logical AND of the value of the current menu symbol and <expr>. > + (The future of this behavior is undecided.) > + > - limiting menu display: "visible if" <expr> > > This attribute is only applicable to menu blocks, if the condition is -- #Randy https://people.kernel.org/tglx/notes-about-netiquette https://subspace.kernel.org/etiquette.html