]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - Documentation/kbuild/Kconfig.recursion-issue-01
Merge remote-tracking branch 'drivers-x86/for-next'
[karo-tx-linux.git] / Documentation / kbuild / Kconfig.recursion-issue-01
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