summaryrefslogtreecommitdiff
path: root/scripts/kconfig/zconf.y
Side-by-side diff
Diffstat (limited to 'scripts/kconfig/zconf.y') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/kconfig/zconf.y230
1 files changed, 134 insertions, 96 deletions
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index 996b10a..2468068 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -29,3 +29,3 @@ struct symbol *symbol_hash[257];
%}
-%expect 36
+%expect 40
@@ -48,2 +48,3 @@ struct symbol *symbol_hash[257];
%token T_CONFIG
+%token T_MENUCONFIG
%token T_HELP
@@ -58,3 +59,6 @@ struct symbol *symbol_hash[257];
%token T_TRISTATE
+%token T_DEF_TRISTATE
%token T_BOOLEAN
+%token T_DEF_BOOLEAN
+%token T_STRING
%token T_INT
@@ -62,3 +66,3 @@ struct symbol *symbol_hash[257];
%token <string> T_WORD
-%token <string> T_STRING
+%token <string> T_WORD_QUOTE
%token T_UNEQUAL
@@ -69,2 +73,4 @@ struct symbol *symbol_hash[257];
%token T_ON
+%token T_SELECT
+%token T_RANGE
@@ -105,2 +111,3 @@ common_block:
| config_stmt
+ | menuconfig_stmt
| source_stmt
@@ -110,5 +117,5 @@ common_block:
-/* config entry */
+/* config/menuconfig entry */
-config_entry_start: T_CONFIG T_WORD
+config_entry_start: T_CONFIG T_WORD T_EOL
{
@@ -120,3 +127,3 @@ config_entry_start: T_CONFIG T_WORD
-config_stmt: config_entry_start T_EOL config_option_list
+config_stmt: config_entry_start config_option_list
{
@@ -126,11 +133,29 @@ config_stmt: config_entry_start T_EOL config_option_list
+menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
+{
+ struct symbol *sym = sym_lookup($2, 0);
+ sym->flags |= SYMBOL_OPTIONAL;
+ menu_add_entry(sym);
+ printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2);
+};
+
+menuconfig_stmt: menuconfig_entry_start config_option_list
+{
+ if (current_entry->prompt)
+ current_entry->prompt->type = P_MENU;
+ else
+ zconfprint("warning: menuconfig statement without prompt");
+ menu_end_entry();
+ printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
+};
+
config_option_list:
/* empty */
- | config_option_list config_option T_EOL
- | config_option_list depends T_EOL
+ | config_option_list config_option
+ | config_option_list depends
| config_option_list help
| config_option_list T_EOL
-{ };
+;
-config_option: T_TRISTATE prompt_stmt_opt
+config_option: T_TRISTATE prompt_stmt_opt T_EOL
{
@@ -140,3 +165,10 @@ config_option: T_TRISTATE prompt_stmt_opt
-config_option: T_BOOLEAN prompt_stmt_opt
+config_option: T_DEF_TRISTATE expr if_expr T_EOL
+{
+ menu_add_expr(P_DEFAULT, $2, $3);
+ menu_set_type(S_TRISTATE);
+ printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_BOOLEAN prompt_stmt_opt T_EOL
{
@@ -146,3 +178,10 @@ config_option: T_BOOLEAN prompt_stmt_opt
-config_option: T_INT prompt_stmt_opt
+config_option: T_DEF_BOOLEAN expr if_expr T_EOL
+{
+ menu_add_expr(P_DEFAULT, $2, $3);
+ menu_set_type(S_BOOLEAN);
+ printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_INT prompt_stmt_opt T_EOL
{
@@ -152,3 +191,3 @@ config_option: T_INT prompt_stmt_opt
-config_option: T_HEX prompt_stmt_opt
+config_option: T_HEX prompt_stmt_opt T_EOL
{
@@ -158,3 +197,3 @@ config_option: T_HEX prompt_stmt_opt
-config_option: T_STRING prompt_stmt_opt
+config_option: T_STRING prompt_stmt_opt T_EOL
{
@@ -164,5 +203,5 @@ config_option: T_STRING prompt_stmt_opt
-config_option: T_PROMPT prompt if_expr
+config_option: T_PROMPT prompt if_expr T_EOL
{
- menu_add_prop(P_PROMPT, $2, NULL, $3);
+ menu_add_prompt(P_PROMPT, $2, $3);
printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
@@ -170,5 +209,5 @@ config_option: T_PROMPT prompt if_expr
-config_option: T_DEFAULT symbol if_expr
+config_option: T_DEFAULT expr if_expr T_EOL
{
- menu_add_prop(P_DEFAULT, NULL, $2, $3);
+ menu_add_expr(P_DEFAULT, $2, $3);
printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
@@ -176,5 +215,17 @@ config_option: T_DEFAULT symbol if_expr
+config_option: T_SELECT T_WORD if_expr T_EOL
+{
+ menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);
+ printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
+};
+
+config_option: T_RANGE symbol symbol if_expr T_EOL
+{
+ menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4);
+ printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
+};
+
/* choice entry */
-choice: T_CHOICE
+choice: T_CHOICE T_EOL
{
@@ -183,3 +234,3 @@ choice: T_CHOICE
menu_add_entry(sym);
- menu_add_prop(P_CHOICE, NULL, NULL, NULL);
+ menu_add_expr(P_CHOICE, NULL, NULL);
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
@@ -187,3 +238,3 @@ choice: T_CHOICE
-choice_entry: choice T_EOL choice_option_list
+choice_entry: choice choice_option_list
{
@@ -202,3 +253,3 @@ choice_end: end
choice_stmt:
- choice_entry choice_block choice_end T_EOL
+ choice_entry choice_block choice_end
| choice_entry choice_block
@@ -211,4 +262,4 @@ choice_option_list:
/* empty */
- | choice_option_list choice_option T_EOL
- | choice_option_list depends T_EOL
+ | choice_option_list choice_option
+ | choice_option_list depends
| choice_option_list help
@@ -217,5 +268,5 @@ choice_option_list:
-choice_option: T_PROMPT prompt if_expr
+choice_option: T_PROMPT prompt if_expr T_EOL
{
- menu_add_prop(P_PROMPT, $2, NULL, $3);
+ menu_add_prompt(P_PROMPT, $2, $3);
printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
@@ -223,3 +274,15 @@ choice_option: T_PROMPT prompt if_expr
-choice_option: T_OPTIONAL
+choice_option: T_TRISTATE prompt_stmt_opt T_EOL
+{
+ menu_set_type(S_TRISTATE);
+ printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
+};
+
+choice_option: T_BOOLEAN prompt_stmt_opt T_EOL
+{
+ menu_set_type(S_BOOLEAN);
+ printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
+};
+
+choice_option: T_OPTIONAL T_EOL
{
@@ -229,5 +292,5 @@ choice_option: T_OPTIONAL
-choice_option: T_DEFAULT symbol if_expr
+choice_option: T_DEFAULT T_WORD if_expr T_EOL
{
- menu_add_prop(P_DEFAULT, NULL, $2, $3);
+ menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
@@ -242,3 +305,3 @@ choice_block:
-if: T_IF expr
+if: T_IF expr T_EOL
{
@@ -260,4 +323,4 @@ if_end: end
if_stmt:
- if T_EOL if_block if_end T_EOL
- | if T_EOL if_block
+ if if_block if_end
+ | if if_block
{
@@ -276,3 +339,3 @@ if_block:
-menu: T_MENU prompt
+menu: T_MENU prompt T_EOL
{
@@ -283,3 +346,3 @@ menu: T_MENU prompt
-menu_entry: menu T_EOL depends_list
+menu_entry: menu depends_list
{
@@ -298,3 +361,3 @@ menu_end: end
menu_stmt:
- menu_entry menu_block menu_end T_EOL
+ menu_entry menu_block menu_end
| menu_entry menu_block
@@ -313,3 +376,3 @@ menu_block:
-source: T_SOURCE prompt
+source: T_SOURCE prompt T_EOL
{
@@ -319,3 +382,3 @@ source: T_SOURCE prompt
-source_stmt: source T_EOL
+source_stmt: source
{
@@ -326,3 +389,3 @@ source_stmt: source T_EOL
-comment: T_COMMENT prompt
+comment: T_COMMENT prompt T_EOL
{
@@ -333,3 +396,3 @@ comment: T_COMMENT prompt
-comment_stmt: comment T_EOL depends_list
+comment_stmt: comment depends_list
{
@@ -354,7 +417,7 @@ help: help_start T_HELPTEXT
depends_list: /* empty */
- | depends_list depends T_EOL
+ | depends_list depends
| depends_list T_EOL
-{ };
+;
-depends: T_DEPENDS T_ON expr
+depends: T_DEPENDS T_ON expr T_EOL
{
@@ -363,3 +426,3 @@ depends: T_DEPENDS T_ON expr
}
- | T_DEPENDS expr
+ | T_DEPENDS expr T_EOL
{
@@ -368,3 +431,3 @@ depends: T_DEPENDS T_ON expr
}
- | T_REQUIRES expr
+ | T_REQUIRES expr T_EOL
{
@@ -378,9 +441,5 @@ prompt_stmt_opt:
/* empty */
- | prompt
-{
- menu_add_prop(P_PROMPT, $1, NULL, NULL);
-}
- | prompt T_IF expr
+ | prompt if_expr
{
- menu_add_prop(P_PROMPT, $1, NULL, $3);
+ menu_add_prop(P_PROMPT, $1, NULL, $2);
};
@@ -388,8 +447,8 @@ prompt_stmt_opt:
prompt: T_WORD
- | T_STRING
+ | T_WORD_QUOTE
;
-end: T_ENDMENU { $$ = T_ENDMENU; }
- | T_ENDCHOICE { $$ = T_ENDCHOICE; }
- | T_ENDIF { $$ = T_ENDIF; }
+end: T_ENDMENU nl_or_eof { $$ = T_ENDMENU; }
+ | T_ENDCHOICE nl_or_eof { $$ = T_ENDCHOICE; }
+ | T_ENDIF nl_or_eof { $$ = T_ENDIF; }
;
@@ -413,3 +472,3 @@ expr: symbol { $$ = expr_alloc_symbol($1); }
symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
- | T_STRING { $$ = sym_lookup($1, 1); free($1); }
+ | T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); }
;
@@ -420,2 +479,5 @@ void conf_parse(const char *name)
{
+ struct symbol *sym;
+ int i;
+
zconf_initscan(name);
@@ -424,3 +486,4 @@ void conf_parse(const char *name)
menu_init();
- rootmenu.prompt = menu_add_prop(P_MENU, "Configuration", NULL, NULL);
+ modules_sym = sym_lookup("MODULES", 0);
+ rootmenu.prompt = menu_add_prop(P_MENU, "Build Configuration", NULL, NULL);
@@ -431,4 +494,8 @@ void conf_parse(const char *name)
menu_finalize(&rootmenu);
-
- modules_sym = sym_lookup("MODULES", 0);
+ for_all_symbols(i, sym) {
+ if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
+ printf("\n");
+ else
+ sym->flags |= SYMBOL_CHECK_DONE;
+ }
@@ -448,3 +515,3 @@ const char *zconf_tokenname(int token)
return "<token>";
-}
+}
@@ -470,3 +537,3 @@ static void zconfprint(const char *err, ...)
- fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
+ fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
va_start(ap, err);
@@ -479,3 +546,3 @@ static void zconferror(const char *err)
{
- fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno(), err);
+ fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
}
@@ -504,4 +571,2 @@ void print_symbol(FILE *out, struct menu *menu)
- //sym->flags |= SYMBOL_PRINTED;
-
if (sym_is_choice(sym))
@@ -530,9 +595,2 @@ void print_symbol(FILE *out, struct menu *menu)
}
-#if 0
- if (!expr_is_yes(sym->dep)) {
- fputs(" depends ", out);
- expr_fprint(sym->dep, out);
- fputc('\n', out);
- }
-#endif
for (prop = sym->prop; prop; prop = prop->next) {
@@ -544,12 +602,5 @@ void print_symbol(FILE *out, struct menu *menu)
print_quoted_string(out, prop->text);
- if (prop->def) {
- fputc(' ', out);
- if (prop->def->flags & SYMBOL_CONST)
- print_quoted_string(out, prop->def->name);
- else
- fputs(prop->def->name, out);
- }
- if (!expr_is_yes(E_EXPR(prop->visible))) {
+ if (!expr_is_yes(prop->visible.expr)) {
fputs(" if ", out);
- expr_fprint(E_EXPR(prop->visible), out);
+ expr_fprint(prop->visible.expr, out);
}
@@ -559,6 +610,6 @@ void print_symbol(FILE *out, struct menu *menu)
fputs( " default ", out);
- print_quoted_string(out, prop->def->name);
- if (!expr_is_yes(E_EXPR(prop->visible))) {
+ expr_fprint(prop->expr, out);
+ if (!expr_is_yes(prop->visible.expr)) {
fputs(" if ", out);
- expr_fprint(E_EXPR(prop->visible), out);
+ expr_fprint(prop->visible.expr, out);
}
@@ -585,3 +636,2 @@ void zconfdump(FILE *out)
{
- //struct file *file;
struct property *prop;
@@ -596,7 +646,2 @@ void zconfdump(FILE *out)
switch (prop->type) {
- //case T_MAINMENU:
- // fputs("\nmainmenu ", out);
- // print_quoted_string(out, prop->text);
- // fputs("\n", out);
- // break;
case P_COMMENT:
@@ -611,9 +656,2 @@ void zconfdump(FILE *out)
break;
- //case T_SOURCE:
- // fputs("\nsource ", out);
- // print_quoted_string(out, prop->text);
- // fputs("\n", out);
- // break;
- //case T_IF:
- // fputs("\nif\n", out);
default:
@@ -621,5 +659,5 @@ void zconfdump(FILE *out)
}
- if (!expr_is_yes(E_EXPR(prop->visible))) {
+ if (!expr_is_yes(prop->visible.expr)) {
fputs(" depends ", out);
- expr_fprint(E_EXPR(prop->visible), out);
+ expr_fprint(prop->visible.expr, out);
fputc('\n', out);