From patchwork Fri Apr 13 05:06:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 133337 Delivered-To: patch@linaro.org Received: by 10.46.84.18 with SMTP id i18csp348067ljb; Thu, 12 Apr 2018 22:14:22 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/iqJYH26EYl2flRRRYhKSW+9IlJgrIy9jCtWmUYanrQ1MCcvPilBpkwwWaBZyxfLhW2yhp X-Received: by 10.101.97.163 with SMTP id i3mr2987505pgv.447.1523596461891; Thu, 12 Apr 2018 22:14:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523596461; cv=none; d=google.com; s=arc-20160816; b=dncgMnKtnpC7vBgl42AewW50WSrynR2f1M8mGwM7WjaHluiDSCQJF9g8QEMQgW5muU NTz3jT3l2j7jP64v43CwlSiVKgn+VQ6XjuxukOJyzHpi2zlaIdiQU7fjOVWWzOVvc333 DbIXVBGiKgIAb/YUOmK4M39WabLtxEAKNIMZrmzOLUzi+PKtwlPWklHwm4To+oTkp5bu C+Dt3bMtjySpGprM89aKBrRoCVlPNf1+OZFP/HUF1B3iEAGHGcKahqmrecZGINVTlOcO gF+zGBVhNajtJGn01fga7zxTaYDAj+vvPoNe8oim8aizyqnspFCJfWABCNhi4XFDs2+Y TUrw== 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=VAG5iCc6jHOtEIQTn1rcxEg20e/EVSb+6WS1yw9L78E=; b=Uc9iWvMcwPOfb7zGlylGySK9wZDBUppcDU/RUNUjMXR5Esam/kz2HoIFad4/1lQ6nW zd8lGREBYLuqkjZ/hzdu3AAultkMqSxKlBx3oGePNyhuSU0eHy9PbLqQbK+3BGNYkjjI 04xj3ZfKIgofsZIElT66l8O2t4LcX70GuGBf1FJPQSLBGclrtT09njuJwpi0r028lcEm 2AArAIwxLuAYYmgngKN6gX6vvI0qZZWKy+Cz/Azmtr73190FW41A6rHLnvh7urMHf3aR yA1hiwg0U0O0lQWsCz6Nl5AoR+Pu5Ivtz/aBvfSQhQEzCJV1g5FgjcBENVFEwq1hKdmK HRRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=q0E81I9t; 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 33-v6si4738149pla.452.2018.04.12.22.14.21; Thu, 12 Apr 2018 22:14:21 -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=q0E81I9t; 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 S1753688AbeDMFOE (ORCPT + 29 others); Fri, 13 Apr 2018 01:14:04 -0400 Received: from conuserg-07.nifty.com ([210.131.2.74]:54462 "EHLO conuserg-07.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751036AbeDMFIP (ORCPT ); Fri, 13 Apr 2018 01:08:15 -0400 Received: from pug.e01.socionext.com (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-07.nifty.com with ESMTP id w3D56lg7029209; Fri, 13 Apr 2018 14:06:59 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-07.nifty.com w3D56lg7029209 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1523596020; bh=VAG5iCc6jHOtEIQTn1rcxEg20e/EVSb+6WS1yw9L78E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q0E81I9ttBbopurt3SBwtfQl4Wi16WdisBO/CTONzTrpP5lbdu/fDcKM1auFgpI8G h+aru5spw78s/OHIUJTuhcDcvDIvckJ2s17I4/1xUQfX3veZRPTPvi8fAFZHEQktJ9 z61Edb1I6bttMsL0YfwaFe4lf+7JZX9/69seZo3w+Zkl0VPW3cfxT7DA6mB+jQeTbF 00pGhEraMUL3+yt4JpqJaOCWPwfiZ/gRVbnCpqoczDAYT7l48m7lFI5my6ND+trrLB yIorSFKBuzThrnzV1+xMEkO8Dy0iVqmFD+L/W2UYbZZe0bPi5oMz9aPGTXp9vG2WFm BUQm1Q0Ze7EOQ== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Linus Torvalds , Sam Ravnborg , Ulf Magnusson , Nicholas Piggin , Kees Cook , Emese Revfy , x86@kernel.org, Masahiro Yamada , linux-kernel@vger.kernel.org Subject: [PATCH 13/30] kconfig: support simply expanded variable Date: Fri, 13 Apr 2018 14:06:22 +0900 Message-Id: <1523595999-27433-14-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1523595999-27433-1-git-send-email-yamada.masahiro@socionext.com> References: <1523595999-27433-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 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 1b746e0..a835c94 100644 --- a/scripts/kconfig/preprocess.c +++ b/scripts/kconfig/preprocess.c @@ -112,7 +112,8 @@ static char *variable_expand(const char *name, int argc, char *argv[]) return expand_string_with_args(v->value, argc, argv); } -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; @@ -125,7 +126,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 493388c..1ebbf9e 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(""); };