• Masahiro Yamada's avatar
    kconfig: do not write choice values when their dependency becomes n · cb67ab2c
    Masahiro Yamada authored
    "# CONFIG_... is not set" for choice values are wrongly written into
    the .config file if they are once visible, then become invisible later.
    
      Test case
      ---------
    
    ---------------------------(Kconfig)----------------------------
    config A
    	bool "A"
    
    choice
    	prompt "Choice ?"
    	depends on A
    
    config CHOICE_B
    	bool "Choice B"
    
    config CHOICE_C
    	bool "Choice C"
    
    endchoice
    ----------------------------------------------------------------
    
    ---------------------------(.config)----------------------------
    CONFIG_A=y
    ----------------------------------------------------------------
    
    With the Kconfig and .config above,
    
      $ make config
      scripts/kconfig/conf  --oldaskconfig Kconfig
      *
      * Linux Kernel Configuration
      *
      A (A) [Y/n] n
      #
      # configuration written to .config
      #
      $ cat .config
      #
      # Automatically generated file; DO NOT EDIT.
      # Linux Kernel Configuration
      #
      # CONFIG_A is not set
      # CONFIG_CHOICE_B is not set
      # CONFIG_CHOICE_C is not set
    
    Here,
    
      # CONFIG_CHOICE_B is not set
      # CONFIG_CHOICE_C is not set
    
    should not be written into the .config file because their dependency
    "depends on A" is unmet.
    
    Currently, there is no code that clears SYMBOL_WRITE of choice values.
    
    Clear SYMBOL_WRITE for all symbols in sym_calc_value(), then set it
    again after calculating visibility.  To simplify the logic, set the
    flag if they have non-n visibility, regardless of types, and regardless
    of whether they are choice values or not.
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
    cb67ab2c
symbol.c 30.4 KB