Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prompt shown even when expected to be disable. #117

Open
tejlmand opened this issue Feb 17, 2022 · 0 comments
Open

Prompt shown even when expected to be disable. #117

tejlmand opened this issue Feb 17, 2022 · 0 comments

Comments

@tejlmand
Copy link

Problem description

When a symbol is double defined but with different prompts, where the active prompt is depending on a common setting both prompts may show.
For example to indicate to users that a given setting is EXPERIMENTAL under some circumstances, one prompt is shown when FOO is enabled also, and the other prompt is shown when FOO is disabled.

This happens when configs right below the second symbol is guarded (depends on) with an if.

Code that reproduces this:

config FOO
        bool "FOO"
        default n
        bool

config BAR
        bool "bar" if !FOO

config BAR
        bool "bar [EXPERIMENTAL]" if FOO

if BAR

config BAZ
        bool "Baz is here"

endif

As expected
image

Unexpected, both prompts are now shown:
image

Expected behavior

Only a sing prompt should be shown when FOO=n and BAR=y

Workaround

Add a DUMMY config between the last config and the if, like this:

config FOO
        bool "FOO"

config BAR
        bool "bar" if !FOO

config BAR
        bool "bar [EXPERIMENTAL]" if FOO

config DUMMY
        bool

if BAR

config BAZ
        bool "Baz is here"

endif

Almost as before:
image

Now working as expected:
image

Cons on the workaround

BAZ setting is no longer indented as it is no longer seen as a submenu to BAR.

Additional info

This code is believed to be responsible for the observed behavior:

Kconfiglib/menuconfig.py

Lines 1504 to 1513 in 061e71f

elif node.list and isinstance(node.item, Symbol):
# Show invisible symbols if they have visible children. This
# can happen for an m/y-valued symbol with an optional prompt
# ('prompt "foo" is COND') that is currently disabled. Note
# that it applies to both 'config' and 'menuconfig' symbols.
shown_children = rec(node.list)
if shown_children:
res.append(node)
if not node.is_menuconfig:
res += shown_children

rugeGerritsen added a commit to rugeGerritsen/zephyr that referenced this issue Mar 15, 2022
carlescufi pushed a commit to zephyrproject-rtos/zephyr that referenced this issue Mar 31, 2022
coreboot-org-bot pushed a commit to coreboot/zephyr-cros that referenced this issue Mar 31, 2022
Uses the proposed workaround in

ulfalizer/Kconfiglib#117
Signed-off-by: Rubin Gerritsen <[email protected]>
GitOrigin-RevId: 8649eb1
Change-Id: I422eb6d09d9bfdbcfff19bcbc462f8132ebe2393
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/zephyr/+/3562860
Tested-by: CopyBot Service Account <[email protected]>
Reviewed-by: Keith Short <[email protected]>
Commit-Queue: Keith Short <[email protected]>
Tested-by: Keith Short <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant