mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-12 01:47:27 +00:00
Update Kconfiglib to get upstream commit ca89ca0c0c420 ("Add dependency loop detection") in. Upstream commit message ======================= Pretty long overdue. Until now, dependency loops have raised a hard-to-debug Python RecursionError during evaluation. A Kconfiglib exception is raised now instead, with a message that lists all the items in the loop. See the comment at the start of _check_dep_loop_sym() for an overview of the algorithm. At a high level, it's loop detection in a directed graph by keeping track of unvisited/visited nodes during depth-first search. (A third "visited, known to not be in a dependency loop" state is used as well.) Choices complicate things, as they're inherently loopy: The choice depends on the choice symbols and vice versa, and the choice symbols in a sense all depend on each other. Add the choice-to-choice-symbol dependencies separately after dependency loop detection, so that there's just the choice-symbol-to-choice dependencies to deal with. It simplifies things, as it makes it possible to tell dependencies from 'prompt' and 'default' conditions on the choice from choice symbol dependencies. Do some flag shenanigans to prevent the choice from being "re-entered" while looping through the choice symbols. Maybe this could be cleaned up a bit somehow... Example exception message: Dependency loop =============== A (defined at tests/Kdeploop10:1), with definition... config A bool depends on B ...depends on B (defined at tests/Kdeploop10:5), with definition... config B bool depends on C = 7 ...depends on C (defined at tests/Kdeploop10:9), with definition... config C int range D 8 ...depends on D (defined at tests/Kdeploop10:13), with definition... config D int default 3 if E default 8 ...depends on E (defined at tests/Kdeploop10:18), with definition... config E bool (select-related dependencies: F && G) ...depends on G (defined at tests/Kdeploop10:25), with definition... config G bool depends on H ...depends on the choice symbol H (defined at tests/Kdeploop10:32), with definition... config H bool prompt "H" if I && <choice> depends on I && <choice> ...depends on the choice symbol I (defined at tests/Kdeploop10:41), with definition... config I bool prompt "I" if <choice> depends on <choice> ...depends on <choice> (defined at tests/Kdeploop10:38), with definition... choice bool prompt "choice" if J ...depends on J (defined at tests/Kdeploop10:46), with definition... config J bool depends on A ...depends again on A (defined at tests/Kdeploop10:1) Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no> |
||
---|---|---|
.. | ||
checkpatch | ||
ci | ||
cmake | ||
cross_compiler | ||
dts | ||
footprint | ||
gitlint | ||
kconfig | ||
meta/west | ||
sanity_chk | ||
support | ||
.gitignore | ||
check_host_is_ok.py | ||
check_link_map.py | ||
checkpatch.pl | ||
checkstack.pl | ||
dir_is_writeable.py | ||
elf_helper.py | ||
file2hex.py | ||
filter-known-issues.py | ||
gen_alignment_script.py | ||
gen_gdt.py | ||
gen_idt.py | ||
gen_kobject_list.py | ||
gen_mmu_x86.py | ||
gen_offset_header.py | ||
gen_priv_stacks.py | ||
gen_syscall_header.py | ||
gen_syscalls.py | ||
parse_syscalls.py | ||
process_gperf.py | ||
py2-requirements.txt | ||
qemu-machine-hack.py | ||
requirements.txt | ||
sanitycheck | ||
spelling.txt | ||
subfolder_list.py | ||
tags.sh | ||
waitpid | ||
west | ||
west-win.py |