Re: [RFC][PATCH 1/2] kconfig: Introduce KCONFIG(), KCONFIG_BUILTIN() and KCONFIG_MODULE()

Arnaud Lacombe
2011-07-27T15:18:55Z

Hi,

On Wed, Jul 27, 2011 at 11:16 AM, Michal Marek <mmarek@suse.cz> wrote:
> On 27.7.2011 17:09, Arnaud Lacombe wrote:
>>
>> Hi,
>>
>> On Mon, Jul 25, 2011 at 6:58 PM, Michal Marek<mmarek@suse.cz>  wrote:
>>>
>>> Replace the config_is_*() macros with a variant that allows for grepping
>>> for usage of CONFIG_* options in the code. Usage:
>>>
>>>  if (KCONFIG(CONFIG_NUMA))
>>>
>>> or
>>>
>>>  #if KCONFIG(CONFIG_NUMA)
>>>
>>> The KCONFIG() macro evaluates to 1 if the argument is set (to either 'y'
>>> or 'm'), KCONFIG_BUILTIN() and KCONFIG_MODULE() test if the respective
>>> option is 'y' and 'm', respectively.
>>>
>>> Signed-off-by: Michal Marek<mmarek@suse.cz>
>>> ---
>>>  Makefile                   |    2 +-
>>>  include/linux/kconfig.h    |   24 +++++++++++++++
>>>  scripts/kconfig/confdata.c |   70
>>> ++++++++-----------------------------------
>>>  3 files changed, 38 insertions(+), 58 deletions(-)
>>>  create mode 100644 include/linux/kconfig.h
>>>
>>> diff --git a/Makefile b/Makefile
>>> index afb8e0d..bd7629b 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
>>>  LINUXINCLUDE    := -I$(srctree)/arch/$(hdr-arch)/include \
>>>                    -Iarch/$(hdr-arch)/include/generated -Iinclude \
>>>                    $(if $(KBUILD_SRC), -I$(srctree)/include) \
>>> -                   -include include/generated/autoconf.h
>>> +                   -include $(srctree)/include/linux/kconfig.h
>>>
>>>  KBUILD_CPPFLAGS := -D__KERNEL__
>>>
>>> diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
>>> new file mode 100644
>>> index 0000000..fe80348
>>> --- /dev/null
>>> +++ b/include/linux/kconfig.h
>>> @@ -0,0 +1,24 @@
>>> +#ifndef __LINUX_KCONFIG_H
>>> +#define __LINUX_KCONFIG_H
>>> +
>>> +#include<generated/autoconf.h>
>>> +
>>> +/*
>>> + * Evaluates to 1 if CONFIG_option is set to 'y', 0 otherwise
>>> + */
>>> +#define KCONFIG_BUILTIN(option) __enabled_ ## option
>>> +
>>> +/*
>>> + * Evaluates to 1 if CONFIG_option is set to 'm', 0 otherwise
>>> + */
>>> +#define KCONFIG_MODULE(option) __enabled_ ## option ## _MODULE
>>> +
>>> +/*
>>> + * Evaluates to 1 if CONFIG_option is set to 'y' or 'm', 0 otherwise
>>> + *
>>> + */
>>> +#define KCONFIG(option) \
>>> +       (__enabled_ ## option || __enabled_ ## option ## _MODULE)
>>> +
>>> +
>>> +#endif /* __LINUX_KCONFIG_H */
>>> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
>>> index df629ec..3bab40a 100644
>>> --- a/scripts/kconfig/confdata.c
>>> +++ b/scripts/kconfig/confdata.c
>>> @@ -495,15 +495,24 @@ header_print_symbol(FILE *fp, struct symbol *sym,
>>> const char *value, void *arg)
>>>
>>>                switch (*value) {
>>>                case 'n':
>>> -                       return;
>>> +                       break;
>>>                case 'm':
>>>                        suffix = "_MODULE";
>>>                        /* fall through */
>>>                default:
>>> -                       value = "1";
>>> +                       fprintf(fp, "#define %s%s%s 1\n",
>>> +                           CONFIG_, sym->name, suffix);
>>>                }
>>> -               fprintf(fp, "#define %s%s%s %s\n",
>>> -                   CONFIG_, sym->name, suffix, value);
>>> +               /*
>>> +                * Generate the __enabled_CONFIG_* and
>>> +                * __enabled_CONFIG_*_MODULE macros for use by the
>>> KCONFIG*()
>>> +                * macros. The _MODULE variant is generated even for
>>> booleans
>>> +                * so that the KCONFIG() macro works.
>>> +                */
>>> +               fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n",
>>> +                               sym->name, (*value == 'y'));
>>> +               fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE
>>> %d\n",
>>> +                               sym->name, (*value == 'm'));
>>>                break;
>>>        }
>>>        case S_HEX: {
>>
>> Just to comment on the patch itself, it will certainly not apply
>> against kbuild/kconfig as I changed header_print_symbol() to fix the
>> S_HEX prefix issue.
>
> If course it applies, the "case S_HEX: {" context line you are quoting was
> added by your commit:
> http://git.kernel.org/?p=linux/kernel/git/mmarek/kbuild-2.6.git;a=commitdiff;h=eb4cf5a642f6430cffff7ba5d8d9bd46ea409281
>
@#$... morning... I was looking at the wrong place, sorry.

- Arnaud