Kconfig.recursion-issue-01 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. mainmenu "Simple example to demo kconfig recursive dependency issue"
  45. config CORE
  46. tristate
  47. config CORE_BELL_A
  48. tristate
  49. depends on CORE
  50. config CORE_BELL_A_ADVANCED
  51. tristate
  52. depends on CORE_BELL_A
  53. select CORE