|author||Luis R. Rodriguez <email@example.com>||2015-10-07 16:16:33 -0700|
|committer||Michal Marek <firstname.lastname@example.org>||2015-10-08 15:36:16 +0200|
kbuild: document recursive dependency limitation / resolution
Recursive dependency issues with kconfig are unavoidable due to some limitations with kconfig, since these issues are recurring provide a hint to the user how they can resolve these dependency issues and also document why such limitation exists. While at it also document a bit of future prospects of ways to enhance Kconfig, including providing formal semantics and evaluation of use of a SAT solver. If you're interested in this work or prospects of it check out the kconfig-sat project wiki  and mailing list .  http://kernelnewbies.org/KernelProjects/kconfig-sat  https://groups.google.com/d/forum/kconfig-sat Cc: Geert Uytterhoeven <email@example.com> Cc: James Bottomley <firstname.lastname@example.org> Cc: Josh Triplett <email@example.com> Cc: Paul Bolle <firstname.lastname@example.org> Cc: Herbert Xu <email@example.com> Cc: Takashi Iwai <firstname.lastname@example.org> Cc: "Yann E. MORIN" <email@example.com> Cc: Jonathan Corbet <firstname.lastname@example.org> Cc: Mate Soos <email@example.com> Signed-off-by: Luis R. Rodriguez <firstname.lastname@example.org> Signed-off-by: Michal Marek <email@example.com>
Diffstat (limited to 'Documentation/kbuild/Kconfig.select-break')
1 files changed, 33 insertions, 0 deletions
diff --git a/Documentation/kbuild/Kconfig.select-break b/Documentation/kbuild/Kconfig.select-break
new file mode 100644
@@ -0,0 +1,33 @@
+# Select broken dependency issue
+# Test with:
+# make KBUILD_KCONFIG=Documentation/kbuild/Kconfig.select-break menuconfig
+# kconfig will not complain and enable this layout for configuration. This is
+# currently a feature of kconfig, given select was designed to be heavy handed.
+# Kconfig currently does not check the list of symbols listed on a symbol's
+# "select" list, this is done on purpose to help load a set of known required
+# symbols. Because of this use of select should be used with caution. An
+# example of this issue is below.
+# The option B and C are clearly contradicting with respect to A.
+# However, when A is set, C can be set as well because Kconfig does not
+# visit the dependencies of the select target (in this case B). And since
+# Kconfig does not visit the dependencies, it breaks the dependencies of B
+mainmenu "Simple example to demo kconfig select broken dependency issue"
+ bool "CONFIG A"
+ bool "CONFIG B"
+ depends on !A
+ bool "CONFIG C"
+ depends on A
+ select B