kconfig: doc: document behavior of 'select' and 'imply' followed by 'if'
authorMasahiro Yamada <masahiroy@kernel.org>
Mon, 3 Jun 2024 16:19:03 +0000 (01:19 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 6 Jun 2024 11:05:15 +0000 (20:05 +0900)
commit45c7f555bf5e716d9c6ffb737e97d4cc9b4c21ef
tree426e7abc7cb9e4b62085222a1675db697c54d1c9
parentbf83266a1eef8251e2f126dba635039de069104a
kconfig: doc: document behavior of 'select' and 'imply' followed by 'if'

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'.

This behavior is kind of weird, and this has arisen several 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 are written
based on this behavior. The same applies to 'imply'.

Document this (but reserve the possibility for a future change).

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Randy Dunlap <rdunlap@infradead.org>
Documentation/kbuild/kconfig-language.rst