diff mbox

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

Message ID 1311634718-32588-1-git-send-email-mmarek@suse.cz (mailing list archive)
State New, archived
Headers show

Commit Message

Michal Marek July 25, 2011, 10:58 p.m. UTC
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

Comments

Cong Wang July 26, 2011, 1:01 p.m. UTC | #1
On Tue, Jul 26, 2011 at 6:58 AM, 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.

I think it's better to let KCONFIG_MODULE() returns true only for =m, so that
KCONFIG() will equal to KCONFIG_BUILTIN() || KCONFIG_MODULE().

BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek July 26, 2011, 1:21 p.m. UTC | #2
On 26.7.2011 15:01, Américo Wang wrote:
> On Tue, Jul 26, 2011 at 6:58 AM, 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.
>
> I think it's better to let KCONFIG_MODULE() returns true only for =m, so that
> KCONFIG() will equal to KCONFIG_BUILTIN() || KCONFIG_MODULE().

This is how it's done.


> BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.

Suggest a better one :). The proposals so far:
config_is_numa() (breaks grep)
CONFIGURED(CONFIG_NUMA)
ENABLED(CONFIG_NUMA)
KCONFIG(CONFIG_NUMA)

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Randy Dunlap July 26, 2011, 3:04 p.m. UTC | #3
On Tue, 26 Jul 2011 15:21:39 +0200 Michal Marek wrote:

> On 26.7.2011 15:01, Américo Wang wrote:
> > On Tue, Jul 26, 2011 at 6:58 AM, 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.
> >
> > I think it's better to let KCONFIG_MODULE() returns true only for =m, so that
> > KCONFIG() will equal to KCONFIG_BUILTIN() || KCONFIG_MODULE().
> 
> This is how it's done.
> 
> 
> > BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
> 
> Suggest a better one :). The proposals so far:
> config_is_numa() (breaks grep)

explain, please.

> CONFIGURED(CONFIG_NUMA)
> ENABLED(CONFIG_NUMA)
> KCONFIG(CONFIG_NUMA)

CONFIG(NUMA) || CONFIG(NUMA_BUILTIN) || CONFIG(NUMA_MODULE)

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek July 26, 2011, 6:28 p.m. UTC | #4
Dne 26.7.2011 17:04, Randy Dunlap napsal(a):
> On Tue, 26 Jul 2011 15:21:39 +0200 Michal Marek wrote:
>> On 26.7.2011 15:01, Américo Wang wrote:
>>> BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
>>
>> Suggest a better one :). The proposals so far:
>> config_is_numa() (breaks grep)
> 
> explain, please.

If you grep for CONFIG_FOO usage, you'll miss this alternate syntax.


>> CONFIGURED(CONFIG_NUMA)
>> ENABLED(CONFIG_NUMA)
>> KCONFIG(CONFIG_NUMA)
> 
> CONFIG(NUMA) || CONFIG(NUMA_BUILTIN) || CONFIG(NUMA_MODULE)

same problem.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Randy Dunlap July 26, 2011, 6:28 p.m. UTC | #5
On Tue, 26 Jul 2011 20:28:05 +0200 Michal Marek wrote:

> Dne 26.7.2011 17:04, Randy Dunlap napsal(a):
> > On Tue, 26 Jul 2011 15:21:39 +0200 Michal Marek wrote:
> >> On 26.7.2011 15:01, Américo Wang wrote:
> >>> BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
> >>
> >> Suggest a better one :). The proposals so far:
> >> config_is_numa() (breaks grep)
> > 
> > explain, please.
> 
> If you grep for CONFIG_FOO usage, you'll miss this alternate syntax.
> 

Ack.

> 
> >> CONFIGURED(CONFIG_NUMA)
> >> ENABLED(CONFIG_NUMA)
> >> KCONFIG(CONFIG_NUMA)
> > 
> > CONFIG(NUMA) || CONFIG(NUMA_BUILTIN) || CONFIG(NUMA_MODULE)
> 
> same problem.

Yes, I sorta got that after I sent the email.

I guess I prefer your ENABLED() syntax then.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnaud Lacombe July 26, 2011, 6:48 p.m. UTC | #6
Hi,

On Tue, Jul 26, 2011 at 2:28 PM, Randy Dunlap <rdunlap@xenotime.net> wrote:
> On Tue, 26 Jul 2011 20:28:05 +0200 Michal Marek wrote:
>
>> Dne 26.7.2011 17:04, Randy Dunlap napsal(a):
>> > On Tue, 26 Jul 2011 15:21:39 +0200 Michal Marek wrote:
>> >> On 26.7.2011 15:01, Américo Wang wrote:
>> >>> BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
>> >>
>> >> Suggest a better one :). The proposals so far:
>> >> config_is_numa() (breaks grep)
>> >
>> > explain, please.
>>
>> If you grep for CONFIG_FOO usage, you'll miss this alternate syntax.
>>
>
> Ack.
>
>>
>> >> CONFIGURED(CONFIG_NUMA)
>> >> ENABLED(CONFIG_NUMA)
>> >> KCONFIG(CONFIG_NUMA)
>> >
>> > CONFIG(NUMA) || CONFIG(NUMA_BUILTIN) || CONFIG(NUMA_MODULE)
>>
>> same problem.
>
> Yes, I sorta got that after I sent the email.
>
> I guess I prefer your ENABLED() syntax then.
>
we need to be careful about namespace pollution/collision.

 - Arnaud
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnaud Lacombe July 27, 2011, 12:42 a.m. UTC | #7
Hi,

On Tue, Jul 26, 2011 at 2:48 PM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> Hi,
>
> On Tue, Jul 26, 2011 at 2:28 PM, Randy Dunlap <rdunlap@xenotime.net> wrote:
>> On Tue, 26 Jul 2011 20:28:05 +0200 Michal Marek wrote:
>>
>>> Dne 26.7.2011 17:04, Randy Dunlap napsal(a):
>>> > On Tue, 26 Jul 2011 15:21:39 +0200 Michal Marek wrote:
>>> >> On 26.7.2011 15:01, Américo Wang wrote:
>>> >>> BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
>>> >>
>>> >> Suggest a better one :). The proposals so far:
>>> >> config_is_numa() (breaks grep)
>>> >
>>> > explain, please.
>>>
>>> If you grep for CONFIG_FOO usage, you'll miss this alternate syntax.
>>>
>>
>> Ack.
>>
>>>
>>> >> CONFIGURED(CONFIG_NUMA)
>>> >> ENABLED(CONFIG_NUMA)
>>> >> KCONFIG(CONFIG_NUMA)
>>> >
>>> > CONFIG(NUMA) || CONFIG(NUMA_BUILTIN) || CONFIG(NUMA_MODULE)
>>>
>>> same problem.
>>
>> Yes, I sorta got that after I sent the email.
>>
>> I guess I prefer your ENABLED() syntax then.
>>
> we need to be careful about namespace pollution/collision.
>
For the sake of having numbers:

% git grep -w ENABLED . | wc -l
    116
% git grep -w CONFIGURED . | wc -l
     11
% git grep -w KCONFIG . | wc -l
      1

>  - Arnaud
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Randy Dunlap July 27, 2011, 4:35 a.m. UTC | #8
On Tue, 26 Jul 2011 20:42:04 -0400 Arnaud Lacombe wrote:

> Hi,
> 
> On Tue, Jul 26, 2011 at 2:48 PM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> > Hi,
> >
> > On Tue, Jul 26, 2011 at 2:28 PM, Randy Dunlap <rdunlap@xenotime.net> wrote:
> >> On Tue, 26 Jul 2011 20:28:05 +0200 Michal Marek wrote:
> >>
> >>> Dne 26.7.2011 17:04, Randy Dunlap napsal(a):
> >>> > On Tue, 26 Jul 2011 15:21:39 +0200 Michal Marek wrote:
> >>> >> On 26.7.2011 15:01, Américo Wang wrote:
> >>> >>> BTW, the name KCONFIG(CONFIG_NUMA) seems ugly.
> >>> >>
> >>> >> Suggest a better one :). The proposals so far:
> >>> >> config_is_numa() (breaks grep)
> >>> >
> >>> > explain, please.
> >>>
> >>> If you grep for CONFIG_FOO usage, you'll miss this alternate syntax.
> >>>
> >>
> >> Ack.
> >>
> >>>
> >>> >> CONFIGURED(CONFIG_NUMA)
> >>> >> ENABLED(CONFIG_NUMA)
> >>> >> KCONFIG(CONFIG_NUMA)
> >>> >
> >>> > CONFIG(NUMA) || CONFIG(NUMA_BUILTIN) || CONFIG(NUMA_MODULE)
> >>>
> >>> same problem.
> >>
> >> Yes, I sorta got that after I sent the email.
> >>
> >> I guess I prefer your ENABLED() syntax then.
> >>
> > we need to be careful about namespace pollution/collision.
> >
> For the sake of having numbers:
> 
> % git grep -w ENABLED . | wc -l
>     116
> % git grep -w CONFIGURED . | wc -l
>      11
> % git grep -w KCONFIG . | wc -l
>       1

OK.  Then I would go back to a predicate like the original patch had,
e.g.:
	IS_ENABLED(CONFIG_NUMA)

I think that using
	KCONFIG(CONFIG_NUMA)
is klunky (a highly technical term).

But Michal can do whatever he likes.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek July 27, 2011, 8:36 a.m. UTC | #9
On 27.7.2011 06:35, Randy Dunlap wrote:
> On Tue, 26 Jul 2011 20:42:04 -0400 Arnaud Lacombe wrote:
>> On Tue, Jul 26, 2011 at 2:48 PM, Arnaud Lacombe<lacombar@gmail.com>  wrote:
>>> On Tue, Jul 26, 2011 at 2:28 PM, Randy Dunlap<rdunlap@xenotime.net>  wrote:
>>>> I guess I prefer your ENABLED() syntax then.
>>>>
>>> we need to be careful about namespace pollution/collision.
>>>
>> For the sake of having numbers:
>>
>> % git grep -w ENABLED . | wc -l
>>      116
>> % git grep -w CONFIGURED . | wc -l
>>       11
>> % git grep -w KCONFIG . | wc -l
>>        1
>
> OK.  Then I would go back to a predicate like the original patch had,
> e.g.:
> 	IS_ENABLED(CONFIG_NUMA)

Good idea. Is anyone against
IS_ENABLED(CONFIG_FOO)
IS_ENABLED_BUILTIN(CONFIG_FOO)
IS_ENABLED_MODULE(CONFIG_FOO)
?

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnaud Lacombe July 27, 2011, 1:31 p.m. UTC | #10
Hi,

On Wed, Jul 27, 2011 at 4:36 AM, Michal Marek <mmarek@suse.cz> wrote:
> On 27.7.2011 06:35, Randy Dunlap wrote:
>>
>> On Tue, 26 Jul 2011 20:42:04 -0400 Arnaud Lacombe wrote:
>>>
>>> On Tue, Jul 26, 2011 at 2:48 PM, Arnaud Lacombe<lacombar@gmail.com>
>>>  wrote:
>>>>
>>>> On Tue, Jul 26, 2011 at 2:28 PM, Randy Dunlap<rdunlap@xenotime.net>
>>>>  wrote:
>>>>>
>>>>> I guess I prefer your ENABLED() syntax then.
>>>>>
>>>> we need to be careful about namespace pollution/collision.
>>>>
>>> For the sake of having numbers:
>>>
>>> % git grep -w ENABLED . | wc -l
>>>     116
>>> % git grep -w CONFIGURED . | wc -l
>>>      11
>>> % git grep -w KCONFIG . | wc -l
>>>       1
>>
>> OK.  Then I would go back to a predicate like the original patch had,
>> e.g.:
>>        IS_ENABLED(CONFIG_NUMA)
>
> Good idea. Is anyone against
> IS_ENABLED(CONFIG_FOO)
> IS_ENABLED_BUILTIN(CONFIG_FOO)
> IS_ENABLED_MODULE(CONFIG_FOO)
> ?
>
I'm good with the naming, but how would you define those ? I may have
trouble to discern between IS_ENABLED() and IS_ENABLED_BUILTIN().

 - Arnaud

> Michal
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek July 27, 2011, 1:38 p.m. UTC | #11
On 27.7.2011 15:31, Arnaud Lacombe wrote:
> Hi,
>
> On Wed, Jul 27, 2011 at 4:36 AM, Michal Marek<mmarek@suse.cz>  wrote:
>> On 27.7.2011 06:35, Randy Dunlap wrote:
>>>
>>> On Tue, 26 Jul 2011 20:42:04 -0400 Arnaud Lacombe wrote:
>>>>
>>>> On Tue, Jul 26, 2011 at 2:48 PM, Arnaud Lacombe<lacombar@gmail.com>
>>>>   wrote:
>>>>>
>>>>> On Tue, Jul 26, 2011 at 2:28 PM, Randy Dunlap<rdunlap@xenotime.net>
>>>>>   wrote:
>>>>>>
>>>>>> I guess I prefer your ENABLED() syntax then.
>>>>>>
>>>>> we need to be careful about namespace pollution/collision.
>>>>>
>>>> For the sake of having numbers:
>>>>
>>>> % git grep -w ENABLED . | wc -l
>>>>      116
>>>> % git grep -w CONFIGURED . | wc -l
>>>>       11
>>>> % git grep -w KCONFIG . | wc -l
>>>>        1
>>>
>>> OK.  Then I would go back to a predicate like the original patch had,
>>> e.g.:
>>>         IS_ENABLED(CONFIG_NUMA)
>>
>> Good idea. Is anyone against
>> IS_ENABLED(CONFIG_FOO)
>> IS_ENABLED_BUILTIN(CONFIG_FOO)
>> IS_ENABLED_MODULE(CONFIG_FOO)
>> ?
>>
> I'm good with the naming, but how would you define those ? I may have
> trouble to discern between IS_ENABLED() and IS_ENABLED_BUILTIN().

IS_ENABLED() would mean not disabled, i.e. either 'y' or 'm'. 
IS_ENABLED_BUILTIN() would mean 'y' and only 'y' and IS_ENABLED_MODULE() 
would mean 'm'. For boolean options, IS_ENABLED() would be equivalent to 
IS_ENABLED_BUILTIN() and IS_ENABLED_MODULE() would be always false.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnaud Lacombe July 27, 2011, 3:09 p.m. UTC | #12
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.

 - Arnaud

> @@ -555,58 +564,6 @@ static struct conf_printer header_printer_cb =
>  };
>
>  /*
> - * Function-style header printer
> - *
> - * This printer is used to generate the config_is_xxx() function-style macros
> - * in `include/generated/autoconf.h'
> - */
> -static void
> -header_function_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
> -{
> -       int val = 0;
> -       char c;
> -       char *tmp, *d;
> -
> -       switch (sym->type) {
> -       case S_BOOLEAN:
> -       case S_TRISTATE:
> -               break;
> -       default:
> -               return;
> -       }
> -       if (*value == 'm')
> -               val = 2;
> -       else if (*value == 'y')
> -               val = 1;
> -
> -       d = strdup(CONFIG_);
> -       tmp = d;
> -       while ((c = *d)) {
> -               *d = tolower(c);
> -               d++;
> -       }
> -
> -       fprintf(fp, "#define %sis_", tmp);
> -       free(tmp);
> -
> -       d = strdup(sym->name);
> -       tmp = d;
> -       while ((c = *d)) {
> -               *d = tolower(c);
> -               d++;
> -       }
> -       fprintf(fp, "%s%s() %d\n", tmp, (val > 1) ? "_module" : "",
> -                     val ? 1 : 0);
> -       free(tmp);
> -}
> -
> -static struct conf_printer header_function_printer_cb =
> -{
> -       .print_symbol = header_function_print_symbol,
> -};
> -
> -
> -/*
>  * Tristate printer
>  *
>  * This printer is used when generating the `include/config/tristate.conf' file.
> @@ -997,7 +954,6 @@ int conf_write_autoconf(void)
>                conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
>
>                conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
> -               conf_write_symbol(out_h, sym, &header_function_printer_cb, NULL);
>        }
>        fclose(out);
>        fclose(tristate);
> --
> 1.7.6
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnaud Lacombe July 27, 2011, 3:11 p.m. UTC | #13
Hi,

On Wed, Jul 27, 2011 at 9:38 AM, Michal Marek <mmarek@suse.cz> wrote:
>> [...]
>> I'm good with the naming, but how would you define those ? I may have
>> trouble to discern between IS_ENABLED() and IS_ENABLED_BUILTIN().
>
> IS_ENABLED() would mean not disabled, i.e. either 'y' or 'm'.
> IS_ENABLED_BUILTIN() would mean 'y' and only 'y' and IS_ENABLED_MODULE()
> would mean 'm'. For boolean options, IS_ENABLED() would be equivalent to
> IS_ENABLED_BUILTIN() and IS_ENABLED_MODULE() would be always false.
>
how would IS_ENABLED() behave on CONFIG_FOO, with FOO being S_STRING
or, say, S_HEX ?

 - Arnaud
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek July 27, 2011, 3:16 p.m. UTC | #14
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

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek July 27, 2011, 3:18 p.m. UTC | #15
On 27.7.2011 17:11, Arnaud Lacombe wrote:
> Hi,
>
> On Wed, Jul 27, 2011 at 9:38 AM, Michal Marek<mmarek@suse.cz>  wrote:
>>> [...]
>>> I'm good with the naming, but how would you define those ? I may have
>>> trouble to discern between IS_ENABLED() and IS_ENABLED_BUILTIN().
>>
>> IS_ENABLED() would mean not disabled, i.e. either 'y' or 'm'.
>> IS_ENABLED_BUILTIN() would mean 'y' and only 'y' and IS_ENABLED_MODULE()
>> would mean 'm'. For boolean options, IS_ENABLED() would be equivalent to
>> IS_ENABLED_BUILTIN() and IS_ENABLED_MODULE() would be always false.
>>
> how would IS_ENABLED() behave on CONFIG_FOO, with FOO being S_STRING
> or, say, S_HEX ?

It would fail to compile, because the helper macros are only defined for 
boolean and tristate symbols.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnaud Lacombe July 27, 2011, 3:18 p.m. UTC | #16
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
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Cong Wang July 27, 2011, 4:36 p.m. UTC | #17
On Wed, Jul 27, 2011 at 4:36 PM, Michal Marek <mmarek@suse.cz> wrote:
>
> Good idea. Is anyone against
> IS_ENABLED(CONFIG_FOO)
> IS_ENABLED_BUILTIN(CONFIG_FOO)
> IS_ENABLED_MODULE(CONFIG_FOO)
> ?

How about IS_ENABLED() IS_BUILTIN() IS_MODULE()?

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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: {
@@ -555,58 +564,6 @@  static struct conf_printer header_printer_cb =
 };
 
 /*
- * Function-style header printer
- *
- * This printer is used to generate the config_is_xxx() function-style macros
- * in `include/generated/autoconf.h' 
- */
-static void
-header_function_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-	int val = 0;
-	char c;
-	char *tmp, *d;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		break;
-	default:
-		return;
-	}
-	if (*value == 'm')
-		val = 2;
-	else if (*value == 'y')
-		val = 1;
-
-	d = strdup(CONFIG_);
-	tmp = d;
-	while ((c = *d)) {
-		*d = tolower(c);
-		d++;
-	}
-
-	fprintf(fp, "#define %sis_", tmp);
-	free(tmp);
-
-	d = strdup(sym->name);
-	tmp = d;
-	while ((c = *d)) {
-		*d = tolower(c);
-		d++;
-	}
-	fprintf(fp, "%s%s() %d\n", tmp, (val > 1) ? "_module" : "",
-		      val ? 1 : 0);
-	free(tmp);
-}
-
-static struct conf_printer header_function_printer_cb =
-{
-	.print_symbol = header_function_print_symbol,
-};
-
-
-/*
  * Tristate printer
  *
  * This printer is used when generating the `include/config/tristate.conf' file.
@@ -997,7 +954,6 @@  int conf_write_autoconf(void)
 		conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
 
 		conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
-		conf_write_symbol(out_h, sym, &header_function_printer_cb, NULL);
 	}
 	fclose(out);
 	fclose(tristate);