Re: [PATCH 2/3] kconfig: doc: document behavior of 'select' and 'imply' followed by 'if'

From: Randy Dunlap
Date: Mon Jun 03 2024 - 17:28:25 EST




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