• Li Zefan's avatar
    kconfig: fix to tag NEW symbols correctly · 3fb9acb3
    Li Zefan authored
    Those configs are not new:
    
      $ cat .config
      ...
      CONFIG_NAMESPACES=y
      ...
      CONFIG_BLOCK=y
      ...
    
    But are tagged as NEW:
    
      $ yes "" | make config > myconf
      $ cat myconf | grep '(NEW)'
      Namespaces support (NAMESPACES) [Y/?] (NEW) y
      ...
      Enable the block layer (BLOCK) [Y/?] (NEW) y
      ...
    
    You can also notice this bug when using gconfig/xconfig.
    
    It's because the SYMBOL_DEF_USER bit of an invisible symbol is cleared
    when the config file is read:
    
    int conf_read(const char *name)
    {
    	...
    	for_all_symbols(i, sym) {
    		if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
    			/* Reset values of generates values, so they'll appear
    			 * as new, if they should become visible, but that
    			 * doesn't quite work if the Kconfig and the saved
    			 * configuration disagree.
    			 */
    			if (sym->visible == no && !conf_unsaved)
    				sym->flags &= ~SYMBOL_DEF_USER;
    	...
    }
    
    But a menu item which represents an invisible symbol is still
    visible, if it's sub-menu is visible, so its SYMBOL_DEF_USER
    bit should be set to indicate it's not NEW.
    Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
    Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
    3fb9acb3
menu.c 13.9 KB