~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/kbuild/Kconfig.recursion-issue-01

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php