From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754368Ab1G0PS4 (ORCPT ); Wed, 27 Jul 2011 11:18:56 -0400 Received: from mail-pz0-f42.google.com ([209.85.210.42]:59152 "EHLO mail-pz0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750879Ab1G0PSz convert rfc822-to-8bit (ORCPT ); Wed, 27 Jul 2011 11:18:55 -0400 MIME-Version: 1.0 In-Reply-To: <4E302BC4.5060003@suse.cz> References: <4E1D9C25.8080300@suse.cz> <1311634718-32588-1-git-send-email-mmarek@suse.cz> <4E302BC4.5060003@suse.cz> Date: Wed, 27 Jul 2011 11:18:54 -0400 Message-ID: Subject: Re: [RFC][PATCH 1/2] kconfig: Introduce KCONFIG(), KCONFIG_BUILTIN() and KCONFIG_MODULE() From: Arnaud Lacombe To: Michal Marek Cc: linux-kbuild@vger.kernel.org, sam@ravnborg.org, linux-kernel@vger.kernel.org, plagnioj@jcrosoft.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Wed, Jul 27, 2011 at 11:16 AM, Michal Marek wrote: > On 27.7.2011 17:09, Arnaud Lacombe wrote: >> >> Hi, >> >> On Mon, Jul 25, 2011 at 6:58 PM, Michal Marek  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 >>> --- >>>  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 >>> + >>> +/* >>> + * 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