kconfig: make 'imply' obey the direct dependency
authorMasahiro Yamada <masahiroy@kernel.org>
Mon, 2 Mar 2020 06:23:40 +0000 (15:23 +0900)
committerChristian Lamparter <chunkeey@gmail.com>
Fri, 5 Feb 2021 10:53:48 +0000 (11:53 +0100)
commit35b87fb25488f2369ab85be61c68a64f83efb6dd
tree3aa29a88dc05fa6c33f56db0b5b526c522c83cb2
parentf82e10266427f3183c67f2264bd7555066c4e567
kconfig: make 'imply' obey the direct dependency

The 'imply' statement may create unmet direct dependency when the
implied symbol depends on m.

[Test Code]

  config FOO
          tristate "foo"
          imply BAZ

  config BAZ
          tristate "baz"
          depends on BAR

  config BAR
          def_tristate m

  config MODULES
          def_bool y
          option modules

If you set FOO=y, BAZ is also promoted to y, which results in the
following .config file:

  CONFIG_FOO=y
  CONFIG_BAZ=y
  CONFIG_BAR=m
  CONFIG_MODULES=y

This does not meet the dependency 'BAZ depends on BAR'.

Unlike 'select', what is worse, Kconfig never shows the
'WARNING: unmet direct dependencies detected for ...' for this case.

Because 'imply' is considered to be weaker than 'depends on', Kconfig
should take the direct dependency into account.

For clarification, describe this case in kconfig-language.rst too.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
config/symbol.c