linux/scripts/kconfig
Masahiro Yamada 5e8c5299d3 kconfig: report recursive dependency involving 'imply'
Currently, Kconfig does not complain about the recursive dependency
where 'imply' keywords are involved.

[Test Code]

  config A
          bool "a"

  config B
          bool "b"
          imply A
          depends on A

In the code above, Kconfig cannot calculate the symbol values correctly
due to the circular dependency.  For example, allyesconfig followed by
syncconfig results in an odd behavior because CONFIG_B becomes visible
in syncconfig.

  $ make allyesconfig
  scripts/kconfig/conf  --allyesconfig Kconfig
  #
  # configuration written to .config
  #
  $ cat .config
  #
  # Automatically generated file; DO NOT EDIT.
  # Main menu
  #
  CONFIG_A=y
  $ make syncconfig
  scripts/kconfig/conf  --syncconfig Kconfig
  *
  * Restart config...
  *
  *
  * Main menu
  *
  a (A) [Y/n/?] y
    b (B) [N/y/?] (NEW)

To detect this correctly, sym_check_expr_deps() should recurse to
not only sym->rev_dep.expr but also sym->implied.expr .

At this moment, sym_check_print_recursive() cannot distinguish
'select' and 'imply' since it does not know the precise context
where the recursive dependency has been hit.  This will be solved
by the next commit.

In fact, even the document and the unit-test are confused.  Using
'imply' does not solve recursive dependency since 'imply' addresses
the unmet direct dependency, which 'select' could cause.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Dirk Gouders <dirk@gouders.net>
2018-08-22 23:21:39 +09:00
..
lxdialog kconfig: drop localization support 2018-05-28 18:25:21 +09:00
tests kconfig: report recursive dependency involving 'imply' 2018-08-22 23:21:39 +09:00
.gitignore kconfig: drop localization support 2018-05-28 18:25:21 +09:00
check-pkgconfig.sh kconfig: check for pkg-config on make {menu,n,g,x}config 2018-07-18 01:18:09 +09:00
conf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
confdata.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
expr.c kconfig: make unmet dependency warnings readable 2018-03-26 02:04:06 +09:00
expr.h kconfig: remove P_ENV property type 2018-08-14 09:01:47 +09:00
gconf-cfg.sh kconfig: refactor GTK+ package checks for building gconf 2018-05-28 18:25:21 +09:00
gconf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
gconf.glade scripts/kconfig/gconf.glade Update broken web addresses. 2010-09-17 16:54:42 +02:00
images.c
kconf_id.c kconfig: reference environment variables directly and remove 'option env=' 2018-05-29 03:28:58 +09:00
list.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkc_proto.h kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
lkc.h kconfig: remove unused sym_get_env_prop() function 2018-08-14 08:59:57 +09:00
Makefile kconfig: add build-only configurator targets 2018-08-22 23:21:37 +09:00
mconf-cfg.sh kconfig: refactor ncurses package checks for building mconf and nconf 2018-05-28 18:25:21 +09:00
mconf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
menu.c kconfig: rename SYMBOL_AUTO to SYMBOL_NO_WRITE 2018-07-18 01:18:09 +09:00
merge_config.sh kconfig/merge_config.sh: Accept a single file 2015-10-14 16:19:37 +02:00
nconf-cfg.sh kconfig: refactor ncurses package checks for building mconf and nconf 2018-05-28 18:25:21 +09:00
nconf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
nconf.gui.c kconfig: add xrealloc() helper 2018-02-10 11:26:04 +09:00
nconf.h kconfig: drop localization support 2018-05-28 18:25:21 +09:00
preprocess.c kconfig: loop boundary condition fix 2018-06-28 22:48:08 +09:00
qconf-cfg.sh kconfig: refactor Qt package checks for building qconf 2018-05-28 18:25:21 +09:00
qconf.cc kconfig: remove P_ENV property type 2018-08-14 09:01:47 +09:00
qconf.h Port xconfig to Qt5 - Source format. 2015-10-14 14:59:03 +02:00
streamline_config.pl kconfig: fix localmodconfig 2018-06-11 09:16:30 +09:00
symbol.c kconfig: report recursive dependency involving 'imply' 2018-08-22 23:21:39 +09:00
util.c kconfig: rename file_write_dep and move it to confdata.c 2018-07-25 23:25:28 +09:00
zconf.l kconfig: expand lefthand side of assignment statement 2018-05-29 03:31:19 +09:00
zconf.y kconfig: fix the rule of mainmenu_stmt symbol 2018-08-13 12:04:51 +09:00