Received: by 10.192.165.156 with SMTP id m28csp287859imm; Thu, 12 Apr 2018 22:16:09 -0700 (PDT) X-Google-Smtp-Source: AIpwx494J4kwHA9aCYZCSgIk+xoBnduHBmM7X5fzTHKSTJd9EcKiNkoDepyw+rIBYJ7GFYHacrBe X-Received: by 10.99.180.65 with SMTP id n1mr2930066pgu.342.1523596569771; Thu, 12 Apr 2018 22:16:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523596569; cv=none; d=google.com; s=arc-20160816; b=g1GWMXmB9y8ErC24bnhYwJ19HDfB6evMISxl6qcOVa0hrkWMscfZVust0FYW8w4d/j wDGRvrkcumJIpIIEE6My8pVaQj2zWe8J5sR9TLM3P15IbqeCWFNLe+yQEAzmewUN/oVK k2D3rrb2WGBZlm6/hyxV8JmcEYzXfdrLaQKptnHbk4kYqJlsRWaOxSYhLHoSJOJaRpdn +o6ioklrcVsXH9PCDGLvdNRvRqbZzGfDW5hjWqQFgGQnRqo4eveSBnG1YkCwN1h5qxFI zbjswncUvNNjQ1OBwDuMELZ+Gfx6GnzdMevIVPXT4cINQFRNGeNfp5Lbc4Ite4z28Qhd w1BQ== 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 i71si3463620pgc.718.2018.04.12.22.15.56; Thu, 12 Apr 2018 22:16:09 -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 S1753775AbeDMFOE (ORCPT + 99 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(-) 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(""); }; -- 2.7.4