18c2ecf20Sopenharmony_ci# Select broken dependency issue 28c2ecf20Sopenharmony_ci# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38c2ecf20Sopenharmony_ci# 48c2ecf20Sopenharmony_ci# Test with: 58c2ecf20Sopenharmony_ci# 68c2ecf20Sopenharmony_ci# make KBUILD_KCONFIG=Documentation/kbuild/Kconfig.select-break menuconfig 78c2ecf20Sopenharmony_ci# 88c2ecf20Sopenharmony_ci# kconfig will not complain and enable this layout for configuration. This is 98c2ecf20Sopenharmony_ci# currently a feature of kconfig, given select was designed to be heavy handed. 108c2ecf20Sopenharmony_ci# Kconfig currently does not check the list of symbols listed on a symbol's 118c2ecf20Sopenharmony_ci# "select" list, this is done on purpose to help load a set of known required 128c2ecf20Sopenharmony_ci# symbols. Because of this use of select should be used with caution. An 138c2ecf20Sopenharmony_ci# example of this issue is below. 148c2ecf20Sopenharmony_ci# 158c2ecf20Sopenharmony_ci# The option B and C are clearly contradicting with respect to A. 168c2ecf20Sopenharmony_ci# However, when A is set, C can be set as well because Kconfig does not 178c2ecf20Sopenharmony_ci# visit the dependencies of the select target (in this case B). And since 188c2ecf20Sopenharmony_ci# Kconfig does not visit the dependencies, it breaks the dependencies of B 198c2ecf20Sopenharmony_ci# (!A). 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cimainmenu "Simple example to demo kconfig select broken dependency issue" 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ciconfig A 248c2ecf20Sopenharmony_ci bool "CONFIG A" 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ciconfig B 278c2ecf20Sopenharmony_ci bool "CONFIG B" 288c2ecf20Sopenharmony_ci depends on !A 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ciconfig C 318c2ecf20Sopenharmony_ci bool "CONFIG C" 328c2ecf20Sopenharmony_ci depends on A 338c2ecf20Sopenharmony_ci select B 34