Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux...
[linux/fpc-iii.git] / Documentation / kbuild / Kconfig.recursion-issue-01
blobe8877db0461fb45ed939bd859df9d7bc0ef7077e
1 # Simple Kconfig recursive issue
2 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 # Test with:
6 # make KBUILD_KCONFIG=Documentation/kbuild/Kconfig.recursion-issue-01 allnoconfig
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.
13 #  * What values are possible for CORE?
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.
19 #  * What influences CORE_BELL_A_ADVANCED ?
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.
25 #   * What influences CORE_BELL_A ?
27 # CORE_BELL_A depends on CORE, so CORE influences CORE_BELL_A.
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.
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.
45 mainmenu "Simple example to demo kconfig recursive dependency issue"
47 config CORE
48         tristate
50 config CORE_BELL_A
51         tristate
52         depends on CORE
54 config CORE_BELL_A_ADVANCED
55         tristate
56         depends on CORE_BELL_A
57         select CORE