Re: kernel coding style for if ... else which cross #ifdef

From: Jeremy Fitzhardinge
Date: Sat May 24 2008 - 06:07:40 EST


Sam Ravnborg wrote:
On Fri, May 23, 2008 at 10:42:58PM -0700, H. Peter Anvin wrote:
Sam Ravnborg wrote:
*However*, the best would really be if we changed Kconfig to emit configuration constants what were 0/1 instead of undefined/defined. That way we could do:

if (CONFIG_SOMETHING && foo) {
/* ... something ... */
} else if ((mode & S_IWUGO) == 0) {
/* ... */
We could do that - but then it would need another
name not to clash with all the places where we rely
on CONFIG_FOO='n' => CONFIG_FOO is not defined.

We could teach kconfig to emit something like:
#define KFOO 0 (for the 'n' value)
And 1 or 2 for the y and m values.

I don't think we want to use "1 or 2"... I suspect we want to use the same booleans we currently have.
I'm a bit dense (or I need more coffe - it's morning here).
What "same booleans"?

They should be plain 0/1 booleans. For a bool/tristate option FOO, it would define:

Enabled y:

#define CONFIG_FOO
#define CFG_FOO 1
#undef CONFIG_FOO_MODULE
#define CFG_FOO_MODULE 0


Enabled m:

#define CONFIG_FOO
#define CFG_FOO 1
#define CONFIG_FOO_MODULE
#define CFG_FOO_MODULE 1


Disabled n:

#undef CONFIG_FOO
#define CFG_FOO 0
#undef CONFIG_FOO_MODULE
#define CFG_FOO_MODULE 0

Not sure what CFG_* should be for string/numeric options. Probably "1" if the value is defined, "0" if not, with CONFIG_* being the actual value (so a CONFIG_ value of 0 is distinguishable from not defined).

J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/