|
4 | 4 | #include <generated/autoconf.h>
|
5 | 5 |
|
6 | 6 | /*
|
7 |
| - * Helper macros to use CONFIG_ options in C expressions. Note that |
| 7 | + * Helper macros to use CONFIG_ options in C/CPP expressions. Note that |
8 | 8 | * these only work with boolean and tristate options.
|
9 | 9 | */
|
10 | 10 |
|
| 11 | +/* |
| 12 | + * Getting something that works in C and CPP for an arg that may or may |
| 13 | + * not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1" |
| 14 | + * we match on the placeholder define, insert the "0," for arg1 and generate |
| 15 | + * the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one). |
| 16 | + * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when |
| 17 | + * the last step cherry picks the 2nd arg, we get a zero. |
| 18 | + */ |
| 19 | +#define __ARG_PLACEHOLDER_1 0, |
| 20 | +#define config_enabled(cfg) _config_enabled(cfg) |
| 21 | +#define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value) |
| 22 | +#define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0) |
| 23 | +#define ___config_enabled(__ignored, val, ...) val |
| 24 | + |
11 | 25 | /*
|
12 | 26 | * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
13 | 27 | * 0 otherwise.
|
14 | 28 | *
|
15 | 29 | */
|
16 | 30 | #define IS_ENABLED(option) \
|
17 |
| - (__enabled_ ## option || __enabled_ ## option ## _MODULE) |
| 31 | + (config_enabled(option) || config_enabled(option##_MODULE)) |
18 | 32 |
|
19 | 33 | /*
|
20 | 34 | * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
|
21 | 35 | * otherwise. For boolean options, this is equivalent to
|
22 | 36 | * IS_ENABLED(CONFIG_FOO).
|
23 | 37 | */
|
24 |
| -#define IS_BUILTIN(option) __enabled_ ## option |
| 38 | +#define IS_BUILTIN(option) config_enabled(option) |
25 | 39 |
|
26 | 40 | /*
|
27 | 41 | * IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0
|
28 | 42 | * otherwise.
|
29 | 43 | */
|
30 |
| -#define IS_MODULE(option) __enabled_ ## option ## _MODULE |
| 44 | +#define IS_MODULE(option) config_enabled(option##_MODULE) |
31 | 45 |
|
32 | 46 | #endif /* __LINUX_KCONFIG_H */
|
0 commit comments