Message ID | 1311634718-32588-1-git-send-email-mmarek@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 --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);
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