kconfig: fix IS_ENABLED to not require all options to be defined
authorPaul Gortmaker <paul.gortmaker@windriver.com>
Thu, 12 Apr 2012 23:46:32 +0000 (19:46 -0400)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 19 Mar 2018 18:58:25 +0000 (18:58 +0000)
commit987bf4393be157151fd8fedbfd8d33be37e1369e
treea7c5bcd97c5429e0b3f6e91728fe916831450fdf
parent4ea24f0e267ab7667a802d18f91f1d611f16a526
kconfig: fix IS_ENABLED to not require all options to be defined

commit 69349c2dc01c489eccaa4c472542c08e370c6d7e upstream.

Using IS_ENABLED() within C (vs.  within CPP #if statements) in its
current form requires us to actually define every possible bool/tristate
Kconfig option twice (__enabled_* and __enabled_*_MODULE variants).

This results in a huge autoconf.h file, on the order of 16k lines for a
x86_64 defconfig.

Fixing IS_ENABLED to be able to work on the smaller subset of just
things that we really have defined is step one to fixing this.  Which
means it has to not choke when fed non-enabled options, such as:

  include/linux/netdevice.h:964:1: warning: "__enabled_CONFIG_FCOE_MODULE" is not defined [-Wundef]

The original prototype of how to implement a C and preprocessor
compatible way of doing this came from the Google+ user "comex ." in
response to Linus' crowdsourcing challenge for a possible improvement on
his earlier C specific solution:

#define config_enabled(x)       (__stringify(x)[0] == '1')

In this implementation, I've chosen variable names that hopefully make
how it works more understandable.

Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
include/linux/kconfig.h