瀏覽代碼

kconfig: implement the `mainmenu' directive

If specified, the directive must be placed at the top of the Kconfig file.

We need to change the grammar to make the mainmenu directive set the
`rootmenu' prompt. This reflect how menu_add_prompt() works internally, ie.
set the prompt of the `current_entry', pointing originally to `rootmenu'.

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Michal Marek <mmarek@suse.cz>
Arnaud Lacombe 15 年之前
父節點
當前提交
8ea13e2c87
共有 2 個文件被更改,包括 13 次插入4 次删除
  1. 2 1
      Documentation/kbuild/kconfig-language.txt
  2. 11 3
      scripts/kconfig/zconf.y

+ 2 - 1
Documentation/kbuild/kconfig-language.txt

@@ -322,7 +322,8 @@ mainmenu:
 	"mainmenu" <prompt>
 	"mainmenu" <prompt>
 
 
 This sets the config program's title bar if the config program chooses
 This sets the config program's title bar if the config program chooses
-to use it.
+to use it. It should be placed at the top of the configuration, before any
+other statement.
 
 
 
 
 Kconfig hints
 Kconfig hints

+ 11 - 3
scripts/kconfig/zconf.y

@@ -36,7 +36,7 @@ static struct menu *current_menu, *current_entry;
 #define YYERROR_VERBOSE
 #define YYERROR_VERBOSE
 #endif
 #endif
 %}
 %}
-%expect 26
+%expect 28
 
 
 %union
 %union
 {
 {
@@ -104,14 +104,15 @@ static struct menu *current_menu, *current_entry;
 %}
 %}
 
 
 %%
 %%
-input: stmt_list;
+input: nl start | start;
+
+start: mainmenu_stmt stmt_list | stmt_list;
 
 
 stmt_list:
 stmt_list:
 	  /* empty */
 	  /* empty */
 	| stmt_list common_stmt
 	| stmt_list common_stmt
 	| stmt_list choice_stmt
 	| stmt_list choice_stmt
 	| stmt_list menu_stmt
 	| stmt_list menu_stmt
-	| stmt_list T_MAINMENU prompt nl
 	| stmt_list end			{ zconf_error("unexpected end statement"); }
 	| stmt_list end			{ zconf_error("unexpected end statement"); }
 	| stmt_list T_WORD error T_EOL	{ zconf_error("unknown statement \"%s\"", $2); }
 	| stmt_list T_WORD error T_EOL	{ zconf_error("unknown statement \"%s\"", $2); }
 	| stmt_list option_name error T_EOL
 	| stmt_list option_name error T_EOL
@@ -342,6 +343,13 @@ if_block:
 	| if_block choice_stmt
 	| if_block choice_stmt
 ;
 ;
 
 
+/* mainmenu entry */
+
+mainmenu_stmt: T_MAINMENU prompt nl
+{
+	menu_add_prompt(P_MENU, $2, NULL);
+};
+
 /* menu entry */
 /* menu entry */
 
 
 menu: T_MENU prompt T_EOL
 menu: T_MENU prompt T_EOL