Commit | Line | Data |
---|---|---|
1c199f28 LR |
1 | # Simple Kconfig recursive issue |
2 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
3 | # | |
4 | # Test with: | |
5 | # | |
6 | # make KBUILD_KCONFIG=Documentation/kbuild/Kconfig.recursion-issue-01 allnoconfig | |
7 | # | |
8 | # This Kconfig file has a simple recursive dependency issue. In order to | |
9 | # understand why this recursive dependency issue occurs lets consider what | |
10 | # Kconfig needs to address. We iterate over what Kconfig needs to address | |
11 | # by stepping through the questions it needs to address sequentially. | |
12 | # | |
13 | # * What values are possible for CORE? | |
14 | # | |
15 | # CORE_BELL_A_ADVANCED selects CORE, which means that it influences the values | |
16 | # that are possible for CORE. So for example if CORE_BELL_A_ADVANCED is 'y', | |
17 | # CORE must be 'y' too. | |
18 | # | |
19 | # * What influences CORE_BELL_A_ADVANCED ? | |
20 | # | |
21 | # As the name implies CORE_BELL_A_ADVANCED is an advanced feature of | |
22 | # CORE_BELL_A so naturally it depends on CORE_BELL_A. So if CORE_BELL_A is 'y' | |
23 | # we know CORE_BELL_A_ADVANCED can be 'y' too. | |
24 | # | |
25 | # * What influences CORE_BELL_A ? | |
26 | # | |
27 | # CORE_BELL_A depends on CORE, so CORE influences CORE_BELL_A. | |
28 | # | |
29 | # But that is a problem, because this means that in order to determine | |
30 | # what values are possible for CORE we ended up needing to address questions | |
31 | # regarding possible values of CORE itself again. Answering the original | |
32 | # question of what are the possible values of CORE would make the kconfig | |
33 | # tools run in a loop. When this happens Kconfig exits and complains about | |
34 | # the "recursive dependency detected" error. | |
35 | # | |
36 | # Reading the Documentation/kbuild/Kconfig.recursion-issue-01 file it may be | |
37 | # obvious that an easy to solution to this problem should just be the removal | |
38 | # of the "select CORE" from CORE_BELL_A_ADVANCED as that is implicit already | |
39 | # since CORE_BELL_A depends on CORE. Recursive dependency issues are not always | |
40 | # so trivial to resolve, we provide another example below of practical | |
41 | # implications of this recursive issue where the solution is perhaps not so | |
42 | # easy to understand. Note that matching semantics on the dependency on | |
43 | # CORE also consist of a solution to this recursive problem. | |
44 | ||
45 | mainmenu "Simple example to demo kconfig recursive dependency issue" | |
46 | ||
47 | config CORE | |
48 | tristate | |
49 | ||
50 | config CORE_BELL_A | |
51 | tristate | |
52 | depends on CORE | |
53 | ||
54 | config CORE_BELL_A_ADVANCED | |
55 | tristate | |
56 | depends on CORE_BELL_A | |
57 | select CORE |