Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932168Ab1EFQTF (ORCPT ); Fri, 6 May 2011 12:19:05 -0400 Received: from mail-iy0-f174.google.com ([209.85.210.174]:49863 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756420Ab1EFQTC convert rfc822-to-8bit (ORCPT ); Fri, 6 May 2011 12:19:02 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=lG/9ZimcymwK8No8xBTSjcKMOO0yq/2Wte2EV/3pekPa/fTj4hlo4CWYMktueRXpBn zuxR2b1ZMZ2pEmivxMRjWPwyG5TM5jYld0A3Hm59cdYae/3bUzAvZ3Jfxpl+uNUH0jWm 346DjtCfup/1gtFFEpQ70eIHGPjFF6njtWN28= MIME-Version: 1.0 In-Reply-To: <1304658229-30820-1-git-send-email-plagnioj@jcrosoft.com> References: <1304658229-30820-1-git-send-email-plagnioj@jcrosoft.com> Date: Fri, 6 May 2011 12:19:01 -0400 Message-ID: Subject: Re: [PATCH v2] kconfig: autogenerated config_is_xxx macro From: Arnaud Lacombe To: Jean-Christophe PLAGNIOL-VILLARD Cc: linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org 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 Content-Length: 4603 Lines: 140 Hi, On Fri, May 6, 2011 at 1:03 AM, Jean-Christophe PLAGNIOL-VILLARD wrote: > this will allow to use to use > > ? ? ? ?if(config_is_xxx()) > ? ? ? ?if(config_is_xxx_module()) > > in the code instead of > > ? ? ? ?#ifdef CONFIG_xxx > ? ? ? ?#ifdef CONFIG_xxx_MODULE > > and now let the compiler remove the non usefull code and not the > pre-processor > Why would it be a good thing ? Most configuration-dependent code inside functions tends to be moved to a static inline already, which get conditionally defined based on the CONFIG_. If it is not, then the code is badly architectured (-> bad). Using that if(xxx) notation would also lead to yet more heavily indented function (-> bad). Moreover, this introduces yet-another way to check for an information (-> bad), and you will end up with mixing the config_is_ notation inside a function declaration, and CONFIG_ when not inside a function (-> bad) Actually, this is even worse than that as you'll not be able to hide structure (or structure members) inside CONFIG_ and use that structure (or structure members) in config_is_ protected block without causing compile-time failure. Thanks, - Arnaud > as done in the mach-types for arm as exmaple > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD > --- > v2: > > ? ? ? ?use config_is > > ? ? ? ?add support of config_is_xxxx_module > > Best Regards, > J. > ?scripts/kconfig/confdata.c | ? 29 +++++++++++++++++++++++++++++ > ?1 files changed, 29 insertions(+), 0 deletions(-) > > diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c > index 61c35bf..11b8b31 100644 > --- a/scripts/kconfig/confdata.c > +++ b/scripts/kconfig/confdata.c > @@ -778,6 +778,29 @@ out: > ? ? ? ?return res; > ?} > > +static void conf_write_function_autoconf(FILE *out, char* conf, char* name, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int val) > +{ > + ? ? ? char c; > + ? ? ? char *tmp, *d; > + > + ? ? ? d = strdup(conf); > + ? ? ? tmp = d; > + ? ? ? while ((c = *conf++)) > + ? ? ? ? ? ? ? *d++ = tolower(c); > + > + ? ? ? fprintf(out, "#define %sis_", tmp); > + ? ? ? free(tmp); > + > + ? ? ? d = strdup(name); > + ? ? ? tmp = d; > + ? ? ? while ((c = *name++)) > + ? ? ? ? ? ? ? *d++ = tolower(c); > + ? ? ? fprintf(out, "%s%s() %d\n", tmp, (val > 1) ? "_module" : "", > + ? ? ? ? ? ? ? ? ? ? val ? 1 : 0); > + ? ? ? free(tmp); > +} > + > ?int conf_write_autoconf(void) > ?{ > ? ? ? ?struct symbol *sym; > @@ -786,6 +809,7 @@ int conf_write_autoconf(void) > ? ? ? ?FILE *out, *tristate, *out_h; > ? ? ? ?time_t now; > ? ? ? ?int i; > + ? ? ? int fct_val; > > ? ? ? ?sym_clear_all_valid(); > > @@ -829,6 +853,7 @@ int conf_write_autoconf(void) > ? ? ? ? ? ? ? ? ? ? ? rootmenu.prompt->text, ctime(&now)); > > ? ? ? ?for_all_symbols(i, sym) { > + ? ? ? ? ? ? ? fct_val = 1; > ? ? ? ? ? ? ? ?sym_calc_value(sym); > ? ? ? ? ? ? ? ?if (!(sym->flags & SYMBOL_WRITE) || !sym->name) > ? ? ? ? ? ? ? ? ? ? ? ?continue; > @@ -842,12 +867,14 @@ int conf_write_autoconf(void) > ? ? ? ? ? ? ? ?case S_TRISTATE: > ? ? ? ? ? ? ? ? ? ? ? ?switch (sym_get_tristate_value(sym)) { > ? ? ? ? ? ? ? ? ? ? ? ?case no: > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fct_val = 0; > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break; > ? ? ? ? ? ? ? ? ? ? ? ?case mod: > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fprintf(tristate, "%s%s=M\n", > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CONFIG_, sym->name); > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fprintf(out_h, "#define %s%s_MODULE 1\n", > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CONFIG_, sym->name); > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fct_val = 2; > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break; > ? ? ? ? ? ? ? ? ? ? ? ?case yes: > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (sym->type == S_TRISTATE) > @@ -874,8 +901,10 @@ int conf_write_autoconf(void) > ? ? ? ? ? ? ? ? ? ? ? ? ? ?CONFIG_, sym->name, str); > ? ? ? ? ? ? ? ? ? ? ? ?break; > ? ? ? ? ? ? ? ?default: > + ? ? ? ? ? ? ? ? ? ? ? fct_val = 0; > ? ? ? ? ? ? ? ? ? ? ? ?break; > ? ? ? ? ? ? ? ?} > + ? ? ? ? ? ? ? conf_write_function_autoconf(out_h, CONFIG_, sym->name, fct_val); > ? ? ? ?} > ? ? ? ?fclose(out); > ? ? ? ?fclose(tristate); > -- > 1.7.4.1 > > -- > 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/