android_kernel_xiaomi_sm8450/scripts/kconfig
Ulf Magnusson f467c5640c kconfig: only write '# CONFIG_FOO is not set' for visible symbols
=== Background ===

 - Visible n-valued bool/tristate symbols generate a
   '# CONFIG_FOO is not set' line in the .config file. The idea is to
   remember the user selection without having to set a Makefile
   variable. Having n correspond to the variable being undefined in the
   Makefiles makes for easy CONFIG_* tests.

 - Invisible n-valued bool/tristate symbols normally do not generate a
   '# CONFIG_FOO is not set' line, because user values from .config
   files have no effect on invisible symbols anyway.

Currently, there is one exception to this rule: Any bool/tristate symbol
that gets the value n through a 'default' property generates a
'# CONFIG_FOO is not set' line, even if the symbol is invisible.

Note that this only applies to explicitly given defaults, and not when
the symbol implicitly defaults to n (like bool/tristate symbols without
'default' properties do).

This is inconsistent, and seems redundant:

  - As mentioned, the '# CONFIG_FOO is not set' won't affect the symbol
    once the .config is read back in.

  - Even if the symbol is invisible at first but becomes visible later,
    there shouldn't be any harm in recalculating the default value
    rather than viewing the '# CONFIG_FOO is not set' as a previous
    user value of n.

=== Changes ===

Change sym_calc_value() to only set SYMBOL_WRITE (write to .config) for
non-n-valued 'default' properties.

Note that SYMBOL_WRITE is always set for visible symbols regardless of whether
they have 'default' properties or not, so this change only affects invisible
symbols.

This reduces the size of the x86 .config on my system by about 1% (due
to removed '# CONFIG_FOO is not set' entries).

One side effect of (and the main motivation for) this change is making
the following two definitions behave exactly the same:

	config FOO
		bool

	config FOO
		bool
		default n

With this change, neither of these will generate a
'# CONFIG_FOO is not set' line (assuming FOO isn't selected/implied).
That might make it clearer to people that a bare 'default n' is
redundant.

This change only affects generated .config files and not autoconf.h:
autoconf.h only includes #defines for non-n bool/tristate symbols.

=== Testing ===

The following testing was done with the x86 Kconfigs:

 - .config files generated before and after the change were compared to
   verify that the only difference is some '# CONFIG_FOO is not set'
   entries disappearing. A couple of these were inspected manually, and
   most turned out to be from redundant 'default n/def_bool n'
   properties.

 - The generated include/generated/autoconf.h was compared before and
   after the change and verified to be identical.

 - As a sanity check, the same modification was done to Kconfiglib.
   The Kconfiglib test suite was then run to check for any mismatches
   against the output of the C implementation.

Signed-off-by: Ulf Magnusson <ulfalizer@gmail.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-03-26 02:03:58 +09:00
..
lxdialog kconfig: Update ncurses package names for menuconfig 2018-03-02 09:20:57 +09:00
.gitignore kconfig: remove 'config*' pattern from .gitignnore 2018-02-09 04:10:09 +09:00
check.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
conf.c kconfig: send error messages to stderr 2018-02-09 04:10:10 +09:00
confdata.c kconfig: add xstrdup() helper 2018-03-02 00:26:47 +09:00
expr.c kconfig: Print reverse dependencies in groups 2018-03-26 02:03:58 +09:00
expr.h kconfig: Print reverse dependencies in groups 2018-03-26 02:03:58 +09:00
gconf.c gconfig: remove misleading parentheses around a condition 2017-03-22 02:56:33 +09:00
gconf.glade scripts/kconfig/gconf.glade Update broken web addresses. 2010-09-17 16:54:42 +02:00
images.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kconf_id.c kconfig: drop 'boolean' keyword 2018-01-22 00:49:29 +09:00
kxgettext.c kconfig: add xstrdup() helper 2018-03-02 00:26:47 +09:00
list.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkc_proto.h kconfig: remove const qualifier from sym_expand_string_value() 2018-02-10 11:31:49 +09:00
lkc.h kconfig: add xstrdup() helper 2018-03-02 00:26:47 +09:00
Makefile kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help 2018-01-28 05:48:31 +09:00
mconf.c kconfig: drop 'boolean' keyword 2018-01-22 00:49:29 +09:00
menu.c kconfig: Print reverse dependencies in groups 2018-03-26 02:03:58 +09:00
merge_config.sh kconfig/merge_config.sh: Accept a single file 2015-10-14 16:19:37 +02:00
nconf.c kconfig: fix sparse warnings in nconfig 2017-06-23 06:00:52 +09:00
nconf.gui.c kconfig: add xrealloc() helper 2018-02-10 11:26:04 +09:00
nconf.h scripts/kconfig/nconf: dynamically alloc dialog_input_result 2011-09-09 14:40:08 +02:00
POTFILES.in kconfig: gettext support for lxdialog 2008-01-28 23:14:39 +01:00
qconf.cc xconfig: fix missing suboption and help panels on first run 2016-12-11 21:40:54 +01:00
qconf.h Port xconfig to Qt5 - Source format. 2015-10-14 14:59:03 +02:00
streamline_config.pl scripts: Switch to more portable Perl shebang 2017-05-14 11:20:44 +09:00
symbol.c kconfig: only write '# CONFIG_FOO is not set' for visible symbols 2018-03-26 02:03:58 +09:00
util.c kconfig: add xstrdup() helper 2018-03-02 00:26:47 +09:00
zconf.l kconfig: fix line number in recursive inclusion error message 2018-03-03 00:44:47 +09:00
zconf.y kconfig: Don't leak choice names during parsing 2018-03-02 09:20:55 +09:00