f498926c | 15-Aug-2018 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: improve the recursive dependency report
This commit improves the messages of the recursive dependency. Currently, sym->dir_dep.expr is not checked. Hence, any dependency in property visibi
kconfig: improve the recursive dependency report
This commit improves the messages of the recursive dependency. Currently, sym->dir_dep.expr is not checked. Hence, any dependency in property visibility is regarded as the dependency of the symbol.
[Test Code 1]
config A bool "a" depends on B
config B bool "b" depends on A
[Test Code 2]
config A bool "a" if B
config B bool "b" depends on A
For both cases above, the same message is displayed:
symbol B depends on A symbol A depends on B
This commit changes the message for the latter, like this:
symbol B depends on A symbol A prompt is visible depending on B
Also, 'select' and 'imply' are distinguished.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Tested-by: Dirk Gouders <dirk@gouders.net>
show more ...
|
5e8c5299 | 15-Aug-2018 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: report recursive dependency involving 'imply'
Currently, Kconfig does not complain about the recursive dependency where 'imply' keywords are involved.
[Test Code]
config A boo
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>
show more ...
|