From patchwork Thu May 17 06:16:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 136094 Delivered-To: patch@linaro.org Received: by 2002:a2e:9706:0:0:0:0:0 with SMTP id r6-v6csp1878007lji; Wed, 16 May 2018 23:20:04 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrtSzMKeRHvmHiUNdRWmijIUnOm9woFwVMEPpbgnZr6jp3KoLwHNazPXWRsasz9Vf8h1oBU X-Received: by 2002:a65:6354:: with SMTP id p20-v6mr3141431pgv.437.1526538004416; Wed, 16 May 2018 23:20:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526538004; cv=none; d=google.com; s=arc-20160816; b=Ji3yqrYV3+858ctXyqzB1DSd79W6S9BWOx9aNpql8PyxDRu2ulpFwb9s90mgQhWVCf I3Gwh3A5xkmKxluBdYFuZslBLLgWe/JV7EAINacr/g8ZwblFEJoTMPjsqABRrOwGWdEc nhVRZ2yrflImDEwBn3jEpY8GELv4UDXXNN2SPO3dHpYURNRhRdPfRSGD+0/cKnU+EsTT WpF7026fyPQRvHZQt8DzfzvZx39Q27sKR4UPmSrwaMJ4e+8IhXOnLIxno5g2zhy2OG2/ w68yV1NX9cCVzhBLavnWumLebJJCnlOwYjxINodgiDy38teoXAyHXF6naFQph33uUq12 CMFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-filter :arc-authentication-results; bh=eN63OgcqlXUVueYHzqXoXiKxpHd+JOkDs4lPMTTlXFY=; b=cM7leE01OETcYoAkbrzLDcivV/M/c184cN7J6UvzB0ZuG6I+h7J88NM6F9/RS9WFSB MapWTFf8B47XyMxSXjqq3IS4feJMN64HsvRXjRMVwKhFC85tUUFXu9aVcgtVzhozIwrC B3I8jO2wiX2q2OKGnuO05T+sb6Lm3zBdl6V20lBjK4t+W/XmR/Fg8pi1oqkeLFXGOKJ+ SA7/oATHAj9mecFCKlvmiZirDhAemYY6tp13sMZpe1U1n5eQAhByFSq3xlzVZzs7HCfi fQJdLjiyIgqH39WLOTW7eLhpy3yOXc/siskymvFORMiQmkUFgukbD6ekHX9SaTujyWh+ M+4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=VWtzxIqy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i6-v6si4676984pfc.186.2018.05.16.23.20.04; Wed, 16 May 2018 23:20:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=VWtzxIqy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752425AbeEQGUC (ORCPT + 29 others); Thu, 17 May 2018 02:20:02 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:26319 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752383AbeEQGUA (ORCPT ); Thu, 17 May 2018 02:20:00 -0400 Received: from pug.e01.socionext.com (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-10.nifty.com with ESMTP id w4H6HbUA002841; Thu, 17 May 2018 15:17:50 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com w4H6HbUA002841 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1526537870; bh=eN63OgcqlXUVueYHzqXoXiKxpHd+JOkDs4lPMTTlXFY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VWtzxIqyqdo7l0Yo9hFGlfSPqNnKbQkLSs0RmrrdDmTtri9ccmHiCmnLUkokc7Q/s VqBWUtELNJwBPyhORvjzDmNX0PHqHMlU5CmkWYsgFMNuC3JRdOpQX4xK/fYxW8T+uc XmlcbzISaKHWl8iASVdnNX+TQ2vE1H4k/eaGdln0/zHMEcl36CKxtHpHmWKLRpGB6S V1H6hvQFTVvDTPcebVrjPoPIDbRKAaxRp2yOZuMWkpOsemKuTdhjFhLwDN8Ua0OrAj EyOB4z8SEVbEMOzwYbIz0jzFYBP5UQaD5nl4ur3AjegwcvfxhRU5bCgq9quhWpG5KU 4aJasR8eKV8rw== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Linus Torvalds , Sam Ravnborg , Ulf Magnusson , "Luis R . Rodriguez" , linux-kernel@vger.kernel.org, Nicholas Piggin , Kees Cook , Emese Revfy , x86@kernel.org, Masahiro Yamada Subject: [PATCH v4 12/31] kconfig: support simply expanded variable Date: Thu, 17 May 2018 15:16:51 +0900 Message-Id: <1526537830-22606-13-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1526537830-22606-1-git-send-email-yamada.masahiro@socionext.com> References: <1526537830-22606-1-git-send-email-yamada.masahiro@socionext.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The previous commit added variable and user-defined function. They work similarly in the sense that the evaluation is deferred until they are used. This commit adds another type of variable, simply expanded variable, as we see in Make. The := operator defines a simply expanded variable, expanding the righthand side immediately. This works like traditional programming language variables. Signed-off-by: Masahiro Yamada --- Changes in v4: None Changes in v3: - newly added Changes in v2: None scripts/kconfig/lkc_proto.h | 7 ++++++- scripts/kconfig/preprocess.c | 6 ++++-- scripts/kconfig/zconf.l | 3 ++- scripts/kconfig/zconf.y | 5 +++-- 4 files changed, 15 insertions(+), 6 deletions(-) -- 2.7.4 diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h index 2b16d6e..6303193 100644 --- a/scripts/kconfig/lkc_proto.h +++ b/scripts/kconfig/lkc_proto.h @@ -49,8 +49,13 @@ const char * sym_get_string_value(struct symbol *sym); const char * prop_get_type_name(enum prop_type type); /* preprocess.c */ +enum variable_flavor { + VAR_SIMPLE, + VAR_RECURSIVE, +}; void env_write_dep(FILE *f, const char *auto_conf_name); -void variable_add(const char *name, const char *value); +void variable_add(const char *name, const char *value, + enum variable_flavor flavor); void variable_all_del(void); char *expand_string(const char *in); char *expand_dollar(const char **str); diff --git a/scripts/kconfig/preprocess.c b/scripts/kconfig/preprocess.c index 88580c4..5d7bd9d 100644 --- a/scripts/kconfig/preprocess.c +++ b/scripts/kconfig/preprocess.c @@ -246,7 +246,8 @@ static char *variable_expand(const char *name, int argc, char *argv[], return res; } -void variable_add(const char *name, const char *value) +void variable_add(const char *name, const char *value, + enum variable_flavor flavor) { struct variable *v; @@ -259,7 +260,8 @@ void variable_add(const char *name, const char *value) list_add_tail(&v->node, &variable_list); } - v->value = xstrdup(value); + v->value = (flavor == VAR_SIMPLE) ? expand_string(value) : + xstrdup(value); } static void variable_del(struct variable *v) diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l index 19e5ebf..aa76942 100644 --- a/scripts/kconfig/zconf.l +++ b/scripts/kconfig/zconf.l @@ -114,7 +114,8 @@ n [A-Za-z0-9_-] yylval.string = text; return T_VARIABLE; } - "=" { BEGIN(ASSIGN_VAL); return T_ASSIGN; } + "=" { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_RECURSIVE; return T_ASSIGN; } + ":=" { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_SIMPLE; return T_ASSIGN; } [[:blank:]]+ . warn_ignored_character(*yytext); \n { diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index 6201119..16432d0 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y @@ -41,6 +41,7 @@ static struct menu *current_menu, *current_entry; struct expr *expr; struct menu *menu; const struct kconf_id *id; + enum variable_flavor flavor; } %token T_MAINMENU @@ -78,7 +79,7 @@ static struct menu *current_menu, *current_entry; %token T_OPEN_PAREN %token T_EOL %token T_VARIABLE -%token T_ASSIGN +%token T_ASSIGN %token T_ASSIGN_VAL %left T_OR @@ -517,7 +518,7 @@ word_opt: /* empty */ { $$ = NULL; } /* assignment statement */ -assignment_stmt: T_VARIABLE T_ASSIGN assign_val T_EOL { variable_add($1, $3); free($1); free($3); } +assignment_stmt: T_VARIABLE T_ASSIGN assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); } assign_val: /* empty */ { $$ = xstrdup(""); };