aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-28 20:29:43 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-28 20:29:43 -0400
commitf05c463be51898e745c4aa8245b05e25d73fa975 (patch)
tree7a5502f06f113eef9bef25c6a33cc6a419953b4a
parent8da56309f04d76a474791fd27b33ddd52062bcd6 (diff)
parent5a1aa8a1aff6191ecc55f21d8b5f0e47108ed91b (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild: kconfig: add named choice group kconfig: fix choice dependency check kconifg: 'select' considered less evil dontdiff: ignore timeconst.h dontdiff: add modules.order kbuild: fix unportability in gen_initramfs_list.sh kbuild: fix help output to show correct arch kbuild: show defconfig subdirs in make help kconfig: reversed borderlines in inputbox
-rw-r--r--Documentation/dontdiff2
-rw-r--r--Documentation/kbuild/kconfig-language.txt17
-rw-r--r--Makefile27
-rw-r--r--scripts/gen_initramfs_list.sh2
-rw-r--r--scripts/kconfig/lex.zconf.c_shipped25
-rw-r--r--scripts/kconfig/lkc_proto.h2
-rw-r--r--scripts/kconfig/lxdialog/inputbox.c2
-rw-r--r--scripts/kconfig/menu.c64
-rw-r--r--scripts/kconfig/symbol.c118
-rw-r--r--scripts/kconfig/zconf.tab.c_shipped301
-rw-r--r--scripts/kconfig/zconf.y13
11 files changed, 319 insertions, 254 deletions
diff --git a/Documentation/dontdiff b/Documentation/dontdiff
index 354aec047c0e..881e6dd03aea 100644
--- a/Documentation/dontdiff
+++ b/Documentation/dontdiff
@@ -141,6 +141,7 @@ mkprep
141mktables 141mktables
142mktree 142mktree
143modpost 143modpost
144modules.order
144modversions.h* 145modversions.h*
145offset.h 146offset.h
146offsets.h 147offsets.h
@@ -171,6 +172,7 @@ sm_tbl*
171split-include 172split-include
172tags 173tags
173tftpboot.img 174tftpboot.img
175timeconst.h
174times.h* 176times.h*
175tkparse 177tkparse
176trix_boot.h 178trix_boot.h
diff --git a/Documentation/kbuild/kconfig-language.txt b/Documentation/kbuild/kconfig-language.txt
index 649cb8799890..00b950d1c193 100644
--- a/Documentation/kbuild/kconfig-language.txt
+++ b/Documentation/kbuild/kconfig-language.txt
@@ -104,14 +104,15 @@ applicable everywhere (see syntax).
104 Reverse dependencies can only be used with boolean or tristate 104 Reverse dependencies can only be used with boolean or tristate
105 symbols. 105 symbols.
106 Note: 106 Note:
107 select is evil.... select will by brute force set a symbol 107 select should be used with care. select will force
108 equal to 'y' without visiting the dependencies. So abusing 108 a symbol to a value without visiting the dependencies.
109 select you are able to select a symbol FOO even if FOO depends 109 By abusing select you are able to select a symbol FOO even
110 on BAR that is not set. In general use select only for 110 if FOO depends on BAR that is not set.
111 non-visible symbols (no prompts anywhere) and for symbols with 111 In general use select only for non-visible symbols
112 no dependencies. That will limit the usefulness but on the 112 (no prompts anywhere) and for symbols with no dependencies.
113 other hand avoid the illegal configurations all over. kconfig 113 That will limit the usefulness but on the other hand avoid
114 should one day warn about such things. 114 the illegal configurations all over.
115 kconfig should one day warn about such things.
115 116
116- numerical ranges: "range" <symbol> <symbol> ["if" <expr>] 117- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
117 This allows to limit the range of possible input values for int 118 This allows to limit the range of possible input values for int
diff --git a/Makefile b/Makefile
index fc3411e6f071..d3634cd6fe35 100644
--- a/Makefile
+++ b/Makefile
@@ -1174,8 +1174,10 @@ rpm: include/config/kernel.release FORCE
1174# Brief documentation of the typical targets used 1174# Brief documentation of the typical targets used
1175# --------------------------------------------------------------------------- 1175# ---------------------------------------------------------------------------
1176 1176
1177boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig) 1177boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
1178boards := $(notdir $(boards)) 1178boards := $(notdir $(boards))
1179board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
1180board-dirs := $(sort $(notdir $(board-dirs:/=)))
1179 1181
1180help: 1182help:
1181 @echo 'Cleaning targets:' 1183 @echo 'Cleaning targets:'
@@ -1221,14 +1223,19 @@ help:
1221 @echo 'Documentation targets:' 1223 @echo 'Documentation targets:'
1222 @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp 1224 @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
1223 @echo '' 1225 @echo ''
1224 @echo 'Architecture specific targets ($(ARCH)):' 1226 @echo 'Architecture specific targets ($(SRCARCH)):'
1225 @$(if $(archhelp),$(archhelp),\ 1227 @$(if $(archhelp),$(archhelp),\
1226 echo ' No architecture specific help defined for $(ARCH)') 1228 echo ' No architecture specific help defined for $(SRCARCH)')
1227 @echo '' 1229 @echo ''
1228 @$(if $(boards), \ 1230 @$(if $(boards), \
1229 $(foreach b, $(boards), \ 1231 $(foreach b, $(boards), \
1230 printf " %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \ 1232 printf " %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
1231 echo '') 1233 echo '')
1234 @$(if $(board-dirs), \
1235 $(foreach b, $(board-dirs), \
1236 printf " %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
1237 printf " %-16s - Show all of the above\\n" help-boards; \
1238 echo '')
1232 1239
1233 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build' 1240 @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
1234 @echo ' make V=2 [targets] 2 => give reason for rebuild of target' 1241 @echo ' make V=2 [targets] 2 => give reason for rebuild of target'
@@ -1240,6 +1247,20 @@ help:
1240 @echo 'For further info see the ./README file' 1247 @echo 'For further info see the ./README file'
1241 1248
1242 1249
1250help-board-dirs := $(addprefix help-,$(board-dirs))
1251
1252help-boards: $(help-board-dirs)
1253
1254boards-per-dir = $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig))
1255
1256$(help-board-dirs): help-%:
1257 @echo 'Architecture specific targets ($(SRCARCH) $*):'
1258 @$(if $(boards-per-dir), \
1259 $(foreach b, $(boards-per-dir), \
1260 printf " %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
1261 echo '')
1262
1263
1243# Documentation targets 1264# Documentation targets
1244# --------------------------------------------------------------------------- 1265# ---------------------------------------------------------------------------
1245%docs: scripts_basic FORCE 1266%docs: scripts_basic FORCE
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
index 684fb9cdc055..5f3415f28736 100644
--- a/scripts/gen_initramfs_list.sh
+++ b/scripts/gen_initramfs_list.sh
@@ -135,7 +135,7 @@ parse() {
135 str="${ftype} ${name} ${str} ${dev} ${maj} ${min}" 135 str="${ftype} ${name} ${str} ${dev} ${maj} ${min}"
136 ;; 136 ;;
137 "slink") 137 "slink")
138 local target=`field 11 $(LC_ALL=C ls -l "${location}")` 138 local target=`readlink "${location}"`
139 str="${ftype} ${name} ${target} ${str}" 139 str="${ftype} ${name} ${target} ${str}"
140 ;; 140 ;;
141 *) 141 *)
diff --git a/scripts/kconfig/lex.zconf.c_shipped b/scripts/kconfig/lex.zconf.c_shipped
index bed0f4e2d2f7..6a61cee4a32c 100644
--- a/scripts/kconfig/lex.zconf.c_shipped
+++ b/scripts/kconfig/lex.zconf.c_shipped
@@ -5,25 +5,6 @@
5 5
6/* A lexical scanner generated by flex */ 6/* A lexical scanner generated by flex */
7 7
8#define yy_create_buffer zconf_create_buffer
9#define yy_delete_buffer zconf_delete_buffer
10#define yy_flex_debug zconf_flex_debug
11#define yy_init_buffer zconf_init_buffer
12#define yy_flush_buffer zconf_flush_buffer
13#define yy_load_buffer_state zconf_load_buffer_state
14#define yy_switch_to_buffer zconf_switch_to_buffer
15#define yyin zconfin
16#define yyleng zconfleng
17#define yylex zconflex
18#define yylineno zconflineno
19#define yyout zconfout
20#define yyrestart zconfrestart
21#define yytext zconftext
22#define yywrap zconfwrap
23#define yyalloc zconfalloc
24#define yyrealloc zconfrealloc
25#define yyfree zconffree
26
27#define FLEX_SCANNER 8#define FLEX_SCANNER
28#define YY_FLEX_MAJOR_VERSION 2 9#define YY_FLEX_MAJOR_VERSION 2
29#define YY_FLEX_MINOR_VERSION 5 10#define YY_FLEX_MINOR_VERSION 5
@@ -354,7 +335,7 @@ void zconffree (void * );
354 335
355/* Begin user sect3 */ 336/* Begin user sect3 */
356 337
357#define zconfwrap(n) 1 338#define zconfwrap() 1
358#define YY_SKIP_YYWRAP 339#define YY_SKIP_YYWRAP
359 340
360typedef unsigned char YY_CHAR; 341typedef unsigned char YY_CHAR;
@@ -1535,7 +1516,7 @@ static int yy_get_next_buffer (void)
1535 1516
1536 /* Read in more data. */ 1517 /* Read in more data. */
1537 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 1518 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1538 (yy_n_chars), num_to_read ); 1519 (yy_n_chars), (size_t) num_to_read );
1539 1520
1540 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 1521 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1541 } 1522 }
@@ -2007,7 +1988,7 @@ YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
2007 1988
2008/** Setup the input buffer state to scan a string. The next call to zconflex() will 1989/** Setup the input buffer state to scan a string. The next call to zconflex() will
2009 * scan from a @e copy of @a str. 1990 * scan from a @e copy of @a str.
2010 * @param str a NUL-terminated string to scan 1991 * @param yystr a NUL-terminated string to scan
2011 * 1992 *
2012 * @return the newly allocated buffer state object. 1993 * @return the newly allocated buffer state object.
2013 * @note If you want to scan bytes that may contain NUL values, then use 1994 * @note If you want to scan bytes that may contain NUL values, then use
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index 4d09f6ddefe3..8e69461313d1 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -21,7 +21,7 @@ P(menu_get_help,const char *,(struct menu *menu));
21/* symbol.c */ 21/* symbol.c */
22P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); 22P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
23 23
24P(sym_lookup,struct symbol *,(const char *name, int isconst)); 24P(sym_lookup,struct symbol *,(const char *name, int flags));
25P(sym_find,struct symbol *,(const char *name)); 25P(sym_find,struct symbol *,(const char *name));
26P(sym_re_search,struct symbol **,(const char *pattern)); 26P(sym_re_search,struct symbol **,(const char *pattern));
27P(sym_type_name,const char *,(enum symbol_type type)); 27P(sym_type_name,const char *,(enum symbol_type type));
diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c
index 4946bd02b46d..616c60138183 100644
--- a/scripts/kconfig/lxdialog/inputbox.c
+++ b/scripts/kconfig/lxdialog/inputbox.c
@@ -89,7 +89,7 @@ do_resize:
89 box_y = y + 2; 89 box_y = y + 2;
90 box_x = (width - box_width) / 2; 90 box_x = (width - box_width) / 2;
91 draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, 91 draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
92 dlg.border.atr, dlg.dialog.atr); 92 dlg.dialog.atr, dlg.border.atr);
93 93
94 print_buttons(dialog, height, width, 0); 94 print_buttons(dialog, height, width, 0);
95 95
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index 606ceb9e746e..07ff8d105c9d 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -235,18 +235,22 @@ void menu_finalize(struct menu *parent)
235 sym = parent->sym; 235 sym = parent->sym;
236 if (parent->list) { 236 if (parent->list) {
237 if (sym && sym_is_choice(sym)) { 237 if (sym && sym_is_choice(sym)) {
238 /* find the first choice value and find out choice type */ 238 if (sym->type == S_UNKNOWN) {
239 for (menu = parent->list; menu; menu = menu->next) { 239 /* find the first choice value to find out choice type */
240 if (menu->sym) { 240 current_entry = parent;
241 current_entry = parent; 241 for (menu = parent->list; menu; menu = menu->next) {
242 if (sym->type == S_UNKNOWN) 242 if (menu->sym && menu->sym->type != S_UNKNOWN) {
243 menu_set_type(menu->sym->type); 243 menu_set_type(menu->sym->type);
244 current_entry = menu; 244 break;
245 if (menu->sym->type == S_UNKNOWN) 245 }
246 menu_set_type(sym->type);
247 break;
248 } 246 }
249 } 247 }
248 /* set the type of the remaining choice values */
249 for (menu = parent->list; menu; menu = menu->next) {
250 current_entry = menu;
251 if (menu->sym && menu->sym->type == S_UNKNOWN)
252 menu_set_type(sym->type);
253 }
250 parentdep = expr_alloc_symbol(sym); 254 parentdep = expr_alloc_symbol(sym);
251 } else if (parent->prompt) 255 } else if (parent->prompt)
252 parentdep = parent->prompt->visible.expr; 256 parentdep = parent->prompt->visible.expr;
@@ -313,50 +317,36 @@ void menu_finalize(struct menu *parent)
313 } 317 }
314 } 318 }
315 for (menu = parent->list; menu; menu = menu->next) { 319 for (menu = parent->list; menu; menu = menu->next) {
316 if (sym && sym_is_choice(sym) && menu->sym) { 320 if (sym && sym_is_choice(sym) &&
321 menu->sym && !sym_is_choice_value(menu->sym)) {
322 current_entry = menu;
317 menu->sym->flags |= SYMBOL_CHOICEVAL; 323 menu->sym->flags |= SYMBOL_CHOICEVAL;
318 if (!menu->prompt) 324 if (!menu->prompt)
319 menu_warn(menu, "choice value must have a prompt"); 325 menu_warn(menu, "choice value must have a prompt");
320 for (prop = menu->sym->prop; prop; prop = prop->next) { 326 for (prop = menu->sym->prop; prop; prop = prop->next) {
321 if (prop->type == P_PROMPT && prop->menu != menu) {
322 prop_warn(prop, "choice values "
323 "currently only support a "
324 "single prompt");
325 }
326 if (prop->type == P_DEFAULT) 327 if (prop->type == P_DEFAULT)
327 prop_warn(prop, "defaults for choice " 328 prop_warn(prop, "defaults for choice "
328 "values not supported"); 329 "values not supported");
330 if (prop->menu == menu)
331 continue;
332 if (prop->type == P_PROMPT &&
333 prop->menu->parent->sym != sym)
334 prop_warn(prop, "choice value used outside its choice group");
329 } 335 }
330 current_entry = menu;
331 if (menu->sym->type == S_UNKNOWN)
332 menu_set_type(sym->type);
333 /* Non-tristate choice values of tristate choices must 336 /* Non-tristate choice values of tristate choices must
334 * depend on the choice being set to Y. The choice 337 * depend on the choice being set to Y. The choice
335 * values' dependencies were propagated to their 338 * values' dependencies were propagated to their
336 * properties above, so the change here must be re- 339 * properties above, so the change here must be re-
337 * propagated. */ 340 * propagated.
341 */
338 if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) { 342 if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
339 basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes); 343 basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
340 basedep = expr_alloc_and(basedep, menu->dep); 344 menu->dep = expr_alloc_and(basedep, menu->dep);
341 basedep = expr_eliminate_dups(basedep);
342 menu->dep = basedep;
343 for (prop = menu->sym->prop; prop; prop = prop->next) { 345 for (prop = menu->sym->prop; prop; prop = prop->next) {
344 if (prop->menu != menu) 346 if (prop->menu != menu)
345 continue; 347 continue;
346 dep = expr_alloc_and(expr_copy(basedep), 348 prop->visible.expr = expr_alloc_and(expr_copy(basedep),
347 prop->visible.expr); 349 prop->visible.expr);
348 dep = expr_eliminate_dups(dep);
349 dep = expr_trans_bool(dep);
350 prop->visible.expr = dep;
351 if (prop->type == P_SELECT) {
352 struct symbol *es = prop_get_symbol(prop);
353 dep2 = expr_alloc_symbol(menu->sym);
354 dep = expr_alloc_and(dep2,
355 expr_copy(dep));
356 dep = expr_alloc_or(es->rev_dep.expr, dep);
357 dep = expr_eliminate_dups(dep);
358 es->rev_dep.expr = dep;
359 }
360 } 350 }
361 } 351 }
362 menu_add_symbol(P_CHOICE, sym, NULL); 352 menu_add_symbol(P_CHOICE, sym, NULL);
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index 4a03191ad176..18f3e5c33634 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -40,7 +40,7 @@ void sym_add_default(struct symbol *sym, const char *def)
40{ 40{
41 struct property *prop = prop_alloc(P_DEFAULT, sym); 41 struct property *prop = prop_alloc(P_DEFAULT, sym);
42 42
43 prop->expr = expr_alloc_symbol(sym_lookup(def, 1)); 43 prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
44} 44}
45 45
46void sym_init(void) 46void sym_init(void)
@@ -350,9 +350,6 @@ void sym_calc_value(struct symbol *sym)
350 ; 350 ;
351 } 351 }
352 352
353 if (sym->flags & SYMBOL_AUTO)
354 sym->flags &= ~SYMBOL_WRITE;
355
356 sym->curr = newval; 353 sym->curr = newval;
357 if (sym_is_choice(sym) && newval.tri == yes) 354 if (sym_is_choice(sym) && newval.tri == yes)
358 sym->curr.val = sym_calc_choice(sym); 355 sym->curr.val = sym_calc_choice(sym);
@@ -377,6 +374,9 @@ void sym_calc_value(struct symbol *sym)
377 sym_set_changed(choice_sym); 374 sym_set_changed(choice_sym);
378 } 375 }
379 } 376 }
377
378 if (sym->flags & SYMBOL_AUTO)
379 sym->flags &= ~SYMBOL_WRITE;
380} 380}
381 381
382void sym_clear_all_valid(void) 382void sym_clear_all_valid(void)
@@ -651,7 +651,7 @@ bool sym_is_changable(struct symbol *sym)
651 return sym->visible > sym->rev_dep.tri; 651 return sym->visible > sym->rev_dep.tri;
652} 652}
653 653
654struct symbol *sym_lookup(const char *name, int isconst) 654struct symbol *sym_lookup(const char *name, int flags)
655{ 655{
656 struct symbol *symbol; 656 struct symbol *symbol;
657 const char *ptr; 657 const char *ptr;
@@ -671,11 +671,10 @@ struct symbol *sym_lookup(const char *name, int isconst)
671 hash &= 0xff; 671 hash &= 0xff;
672 672
673 for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { 673 for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
674 if (!strcmp(symbol->name, name)) { 674 if (!strcmp(symbol->name, name) &&
675 if ((isconst && symbol->flags & SYMBOL_CONST) || 675 (flags ? symbol->flags & flags
676 (!isconst && !(symbol->flags & SYMBOL_CONST))) 676 : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
677 return symbol; 677 return symbol;
678 }
679 } 678 }
680 new_name = strdup(name); 679 new_name = strdup(name);
681 } else { 680 } else {
@@ -687,8 +686,7 @@ struct symbol *sym_lookup(const char *name, int isconst)
687 memset(symbol, 0, sizeof(*symbol)); 686 memset(symbol, 0, sizeof(*symbol));
688 symbol->name = new_name; 687 symbol->name = new_name;
689 symbol->type = S_UNKNOWN; 688 symbol->type = S_UNKNOWN;
690 if (isconst) 689 symbol->flags |= flags;
691 symbol->flags |= SYMBOL_CONST;
692 690
693 symbol->next = symbol_hash[hash]; 691 symbol->next = symbol_hash[hash];
694 symbol_hash[hash] = symbol; 692 symbol_hash[hash] = symbol;
@@ -762,8 +760,6 @@ struct symbol **sym_re_search(const char *pattern)
762} 760}
763 761
764 762
765struct symbol *sym_check_deps(struct symbol *sym);
766
767static struct symbol *sym_check_expr_deps(struct expr *e) 763static struct symbol *sym_check_expr_deps(struct expr *e)
768{ 764{
769 struct symbol *sym; 765 struct symbol *sym;
@@ -795,40 +791,100 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
795} 791}
796 792
797/* return NULL when dependencies are OK */ 793/* return NULL when dependencies are OK */
798struct symbol *sym_check_deps(struct symbol *sym) 794static struct symbol *sym_check_sym_deps(struct symbol *sym)
799{ 795{
800 struct symbol *sym2; 796 struct symbol *sym2;
801 struct property *prop; 797 struct property *prop;
802 798
803 if (sym->flags & SYMBOL_CHECK) {
804 fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
805 sym->prop->file->name, sym->prop->lineno, sym->name);
806 return sym;
807 }
808 if (sym->flags & SYMBOL_CHECKED)
809 return NULL;
810
811 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
812 sym2 = sym_check_expr_deps(sym->rev_dep.expr); 799 sym2 = sym_check_expr_deps(sym->rev_dep.expr);
813 if (sym2) 800 if (sym2)
814 goto out; 801 return sym2;
815 802
816 for (prop = sym->prop; prop; prop = prop->next) { 803 for (prop = sym->prop; prop; prop = prop->next) {
817 if (prop->type == P_CHOICE || prop->type == P_SELECT) 804 if (prop->type == P_CHOICE || prop->type == P_SELECT)
818 continue; 805 continue;
819 sym2 = sym_check_expr_deps(prop->visible.expr); 806 sym2 = sym_check_expr_deps(prop->visible.expr);
820 if (sym2) 807 if (sym2)
821 goto out; 808 break;
822 if (prop->type != P_DEFAULT || sym_is_choice(sym)) 809 if (prop->type != P_DEFAULT || sym_is_choice(sym))
823 continue; 810 continue;
824 sym2 = sym_check_expr_deps(prop->expr); 811 sym2 = sym_check_expr_deps(prop->expr);
825 if (sym2) 812 if (sym2)
826 goto out; 813 break;
827 } 814 }
828out: 815
816 return sym2;
817}
818
819static struct symbol *sym_check_choice_deps(struct symbol *choice)
820{
821 struct symbol *sym, *sym2;
822 struct property *prop;
823 struct expr *e;
824
825 prop = sym_get_choice_prop(choice);
826 expr_list_for_each_sym(prop->expr, e, sym)
827 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
828
829 choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
830 sym2 = sym_check_sym_deps(choice);
831 choice->flags &= ~SYMBOL_CHECK;
829 if (sym2) 832 if (sym2)
830 fprintf(stderr, " -> %s%s", sym->name, sym2 == sym? "\n": ""); 833 goto out;
831 sym->flags &= ~SYMBOL_CHECK; 834
835 expr_list_for_each_sym(prop->expr, e, sym) {
836 sym2 = sym_check_sym_deps(sym);
837 if (sym2) {
838 fprintf(stderr, " -> %s", sym->name);
839 break;
840 }
841 }
842out:
843 expr_list_for_each_sym(prop->expr, e, sym)
844 sym->flags &= ~SYMBOL_CHECK;
845
846 if (sym2 && sym_is_choice_value(sym2) &&
847 prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
848 sym2 = choice;
849
850 return sym2;
851}
852
853struct symbol *sym_check_deps(struct symbol *sym)
854{
855 struct symbol *sym2;
856 struct property *prop;
857
858 if (sym->flags & SYMBOL_CHECK) {
859 fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
860 sym->prop->file->name, sym->prop->lineno,
861 sym->name ? sym->name : "<choice>");
862 return sym;
863 }
864 if (sym->flags & SYMBOL_CHECKED)
865 return NULL;
866
867 if (sym_is_choice_value(sym)) {
868 /* for choice groups start the check with main choice symbol */
869 prop = sym_get_choice_prop(sym);
870 sym2 = sym_check_deps(prop_get_symbol(prop));
871 } else if (sym_is_choice(sym)) {
872 sym2 = sym_check_choice_deps(sym);
873 } else {
874 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
875 sym2 = sym_check_sym_deps(sym);
876 sym->flags &= ~SYMBOL_CHECK;
877 }
878
879 if (sym2) {
880 fprintf(stderr, " -> %s", sym->name ? sym->name : "<choice>");
881 if (sym2 == sym) {
882 fprintf(stderr, "\n");
883 zconfnerrs++;
884 sym2 = NULL;
885 }
886 }
887
832 return sym2; 888 return sym2;
833} 889}
834 890
@@ -904,7 +960,7 @@ void prop_add_env(const char *env)
904 } 960 }
905 961
906 prop = prop_alloc(P_ENV, sym); 962 prop = prop_alloc(P_ENV, sym);
907 prop->expr = expr_alloc_symbol(sym_lookup(env, 1)); 963 prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
908 964
909 sym_env_list = expr_alloc_one(E_LIST, sym_env_list); 965 sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
910 sym_env_list->right.sym = sym; 966 sym_env_list->right.sym = sym;
diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped
index d22d92496f25..95df833b5a9d 100644
--- a/scripts/kconfig/zconf.tab.c_shipped
+++ b/scripts/kconfig/zconf.tab.c_shipped
@@ -446,16 +446,16 @@ union yyalloc
446/* YYFINAL -- State number of the termination state. */ 446/* YYFINAL -- State number of the termination state. */
447#define YYFINAL 3 447#define YYFINAL 3
448/* YYLAST -- Last index in YYTABLE. */ 448/* YYLAST -- Last index in YYTABLE. */
449#define YYLAST 258 449#define YYLAST 259
450 450
451/* YYNTOKENS -- Number of terminals. */ 451/* YYNTOKENS -- Number of terminals. */
452#define YYNTOKENS 35 452#define YYNTOKENS 35
453/* YYNNTS -- Number of nonterminals. */ 453/* YYNNTS -- Number of nonterminals. */
454#define YYNNTS 45 454#define YYNNTS 46
455/* YYNRULES -- Number of rules. */ 455/* YYNRULES -- Number of rules. */
456#define YYNRULES 108 456#define YYNRULES 110
457/* YYNRULES -- Number of states. */ 457/* YYNRULES -- Number of states. */
458#define YYNSTATES 178 458#define YYNSTATES 180
459 459
460/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 460/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
461#define YYUNDEFTOK 2 461#define YYUNDEFTOK 2
@@ -507,13 +507,14 @@ static const yytype_uint16 yyprhs[] =
507 28, 33, 37, 39, 41, 43, 45, 47, 49, 51, 507 28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
508 53, 55, 57, 59, 61, 63, 67, 70, 74, 77, 508 53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
509 81, 84, 85, 88, 91, 94, 97, 100, 103, 107, 509 81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
510 112, 117, 122, 128, 132, 133, 137, 138, 141, 144, 510 112, 117, 122, 128, 132, 133, 137, 138, 141, 145,
511 147, 149, 153, 154, 157, 160, 163, 166, 169, 174, 511 148, 150, 154, 155, 158, 161, 164, 167, 170, 175,
512 178, 181, 186, 187, 190, 194, 196, 200, 201, 204, 512 179, 182, 187, 188, 191, 195, 197, 201, 202, 205,
513 207, 210, 214, 217, 219, 223, 224, 227, 230, 233, 513 208, 211, 215, 218, 220, 224, 225, 228, 231, 234,
514 237, 241, 244, 247, 250, 251, 254, 257, 260, 265, 514 238, 242, 245, 248, 251, 252, 255, 258, 261, 266,
515 266, 269, 271, 273, 276, 279, 282, 284, 287, 288, 515 267, 270, 272, 274, 277, 280, 283, 285, 288, 289,
516 291, 293, 297, 301, 305, 308, 312, 316, 318 516 292, 294, 298, 302, 306, 309, 313, 317, 319, 321,
517 322
517}; 518};
518 519
519/* YYRHS -- A `-1'-separated list of the rules' RHS. */ 520/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -533,24 +534,25 @@ static const yytype_int8 yyrhs[] =
533 30, -1, 20, 78, 77, 30, -1, 21, 25, 77, 534 30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
534 30, -1, 22, 79, 79, 77, 30, -1, 23, 48, 535 30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
535 30, -1, -1, 48, 25, 49, -1, -1, 33, 74, 536 30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
536 -1, 7, 30, -1, 50, 54, -1, 75, -1, 51, 537 -1, 7, 80, 30, -1, 50, 54, -1, 75, -1,
537 56, 52, -1, -1, 54, 55, -1, 54, 72, -1, 538 51, 56, 52, -1, -1, 54, 55, -1, 54, 72,
538 54, 70, -1, 54, 30, -1, 54, 40, -1, 18, 539 -1, 54, 70, -1, 54, 30, -1, 54, 40, -1,
539 74, 77, 30, -1, 19, 73, 30, -1, 17, 30, 540 18, 74, 77, 30, -1, 19, 73, 30, -1, 17,
540 -1, 20, 25, 77, 30, -1, -1, 56, 39, -1, 541 30, -1, 20, 25, 77, 30, -1, -1, 56, 39,
541 14, 78, 76, -1, 75, -1, 57, 60, 58, -1, 542 -1, 14, 78, 76, -1, 75, -1, 57, 60, 58,
542 -1, 60, 39, -1, 60, 64, -1, 60, 53, -1, 543 -1, -1, 60, 39, -1, 60, 64, -1, 60, 53,
543 4, 74, 30, -1, 61, 71, -1, 75, -1, 62, 544 -1, 4, 74, 30, -1, 61, 71, -1, 75, -1,
544 65, 63, -1, -1, 65, 39, -1, 65, 64, -1, 545 62, 65, 63, -1, -1, 65, 39, -1, 65, 64,
545 65, 53, -1, 6, 74, 30, -1, 9, 74, 30, 546 -1, 65, 53, -1, 6, 74, 30, -1, 9, 74,
546 -1, 67, 71, -1, 12, 30, -1, 69, 13, -1, 547 30, -1, 67, 71, -1, 12, 30, -1, 69, 13,
547 -1, 71, 72, -1, 71, 30, -1, 71, 40, -1, 548 -1, -1, 71, 72, -1, 71, 30, -1, 71, 40,
548 16, 24, 78, 30, -1, -1, 74, 77, -1, 25, 549 -1, 16, 24, 78, 30, -1, -1, 74, 77, -1,
549 -1, 26, -1, 5, 30, -1, 8, 30, -1, 15, 550 25, -1, 26, -1, 5, 30, -1, 8, 30, -1,
550 30, -1, 30, -1, 76, 30, -1, -1, 14, 78, 551 15, 30, -1, 30, -1, 76, 30, -1, -1, 14,
551 -1, 79, -1, 79, 33, 79, -1, 79, 27, 79, 552 78, -1, 79, -1, 79, 33, 79, -1, 79, 27,
552 -1, 29, 78, 28, -1, 34, 78, -1, 78, 31, 553 79, -1, 29, 78, 28, -1, 34, 78, -1, 78,
553 78, -1, 78, 32, 78, -1, 25, -1, 26, -1 554 31, 78, -1, 78, 32, 78, -1, 25, -1, 26,
555 -1, -1, 25, -1
554}; 556};
555 557
556/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 558/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
@@ -566,7 +568,8 @@ static const yytype_uint16 yyrline[] =
566 339, 344, 351, 356, 364, 367, 369, 370, 371, 374, 568 339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
567 382, 389, 396, 402, 409, 411, 412, 413, 416, 424, 569 382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
568 426, 431, 432, 435, 436, 437, 441, 442, 445, 446, 570 426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
569 449, 450, 451, 452, 453, 454, 455, 458, 459 571 449, 450, 451, 452, 453, 454, 455, 458, 459, 462,
572 463
570}; 573};
571#endif 574#endif
572 575
@@ -590,7 +593,8 @@ static const char *const yytname[] =
590 "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry", 593 "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
591 "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment", 594 "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
592 "comment_stmt", "help_start", "help", "depends_list", "depends", 595 "comment_stmt", "help_start", "help", "depends_list", "depends",
593 "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0 596 "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
597 "word_opt", 0
594}; 598};
595#endif 599#endif
596 600
@@ -619,7 +623,8 @@ static const yytype_uint8 yyr1[] =
619 60, 61, 62, 63, 64, 65, 65, 65, 65, 66, 623 60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
620 67, 68, 69, 70, 71, 71, 71, 71, 72, 73, 624 67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
621 73, 74, 74, 75, 75, 75, 76, 76, 77, 77, 625 73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
622 78, 78, 78, 78, 78, 78, 78, 79, 79 626 78, 78, 78, 78, 78, 78, 78, 79, 79, 80,
627 80
623}; 628};
624 629
625/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 630/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -629,13 +634,14 @@ static const yytype_uint8 yyr2[] =
629 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 634 4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
630 1, 1, 1, 1, 1, 3, 2, 3, 2, 3, 635 1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
631 2, 0, 2, 2, 2, 2, 2, 2, 3, 4, 636 2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
632 4, 4, 5, 3, 0, 3, 0, 2, 2, 2, 637 4, 4, 5, 3, 0, 3, 0, 2, 3, 2,
633 1, 3, 0, 2, 2, 2, 2, 2, 4, 3, 638 1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
634 2, 4, 0, 2, 3, 1, 3, 0, 2, 2, 639 2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
635 2, 3, 2, 1, 3, 0, 2, 2, 2, 3, 640 2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
636 3, 2, 2, 2, 0, 2, 2, 2, 4, 0, 641 3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
637 2, 1, 1, 2, 2, 2, 1, 2, 0, 2, 642 2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
638 1, 3, 3, 3, 2, 3, 3, 1, 1 643 1, 3, 3, 3, 2, 3, 3, 1, 1, 0,
644 1
639}; 645};
640 646
641/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state 647/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -643,69 +649,69 @@ static const yytype_uint8 yyr2[] =
643 means the default is an error. */ 649 means the default is an error. */
644static const yytype_uint8 yydefact[] = 650static const yytype_uint8 yydefact[] =
645{ 651{
646 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 652 3, 0, 0, 1, 0, 0, 0, 0, 0, 109,
647 0, 0, 0, 0, 0, 0, 12, 16, 13, 14, 653 0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
648 18, 15, 17, 0, 19, 0, 4, 31, 22, 31, 654 18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
649 23, 52, 62, 5, 67, 20, 84, 75, 6, 24, 655 23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
650 84, 21, 8, 11, 91, 92, 0, 0, 93, 0, 656 84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
651 48, 94, 0, 0, 0, 107, 108, 0, 0, 0, 657 110, 0, 94, 0, 0, 0, 107, 108, 0, 0,
652 100, 95, 0, 0, 0, 0, 0, 0, 0, 0, 658 0, 100, 95, 0, 0, 0, 0, 0, 0, 0,
653 0, 0, 96, 7, 71, 79, 80, 27, 29, 0, 659 0, 0, 0, 96, 7, 71, 79, 48, 80, 27,
654 104, 0, 0, 64, 0, 0, 9, 10, 0, 0, 660 29, 0, 104, 0, 0, 64, 0, 0, 9, 10,
655 0, 0, 89, 0, 0, 0, 44, 0, 37, 36, 661 0, 0, 0, 0, 89, 0, 0, 0, 44, 0,
656 32, 33, 0, 35, 34, 0, 0, 89, 0, 56, 662 37, 36, 32, 33, 0, 35, 34, 0, 0, 89,
657 57, 53, 55, 54, 63, 51, 50, 68, 70, 66, 663 0, 56, 57, 53, 55, 54, 63, 51, 50, 68,
658 69, 65, 86, 87, 85, 76, 78, 74, 77, 73, 664 70, 66, 69, 65, 86, 87, 85, 76, 78, 74,
659 97, 103, 105, 106, 102, 101, 26, 82, 0, 98, 665 77, 73, 97, 103, 105, 106, 102, 101, 26, 82,
660 0, 98, 98, 98, 0, 0, 0, 83, 60, 98, 666 0, 98, 0, 98, 98, 98, 0, 0, 0, 83,
661 0, 98, 0, 0, 0, 38, 90, 0, 0, 98, 667 60, 98, 0, 98, 0, 0, 0, 38, 90, 0,
662 46, 43, 25, 0, 59, 0, 88, 99, 39, 40, 668 0, 98, 46, 43, 25, 0, 59, 0, 88, 99,
663 41, 0, 0, 45, 58, 61, 42, 47 669 39, 40, 41, 0, 0, 45, 58, 61, 42, 47
664}; 670};
665 671
666/* YYDEFGOTO[NTERM-NUM]. */ 672/* YYDEFGOTO[NTERM-NUM]. */
667static const yytype_int16 yydefgoto[] = 673static const yytype_int16 yydefgoto[] =
668{ 674{
669 -1, 1, 2, 25, 26, 99, 27, 28, 29, 30, 675 -1, 1, 2, 25, 26, 101, 27, 28, 29, 30,
670 64, 100, 101, 145, 173, 31, 32, 115, 33, 66, 676 65, 102, 103, 147, 175, 31, 32, 117, 33, 67,
671 111, 67, 34, 119, 35, 68, 36, 37, 127, 38, 677 113, 68, 34, 121, 35, 69, 36, 37, 129, 38,
672 70, 39, 40, 41, 102, 103, 69, 104, 140, 141, 678 71, 39, 40, 41, 104, 105, 70, 106, 142, 143,
673 42, 73, 154, 59, 60 679 42, 74, 156, 60, 61, 51
674}; 680};
675 681
676/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 682/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
677 STATE-NUM. */ 683 STATE-NUM. */
678#define YYPACT_NINF -78 684#define YYPACT_NINF -80
679static const yytype_int16 yypact[] = 685static const yytype_int16 yypact[] =
680{ 686{
681 -78, 33, 130, -78, -28, 73, 73, 7, 73, 36, 687 -80, 2, 132, -80, -13, -1, -1, -2, -1, 9,
682 41, 73, 26, 52, -4, 58, -78, -78, -78, -78, 688 33, -1, 27, 40, -3, 38, -80, -80, -80, -80,
683 -78, -78, -78, 90, -78, 94, -78, -78, -78, -78, 689 -80, -80, -80, 71, -80, 77, -80, -80, -80, -80,
684 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 690 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
685 -78, -78, -78, -78, -78, -78, 74, 85, -78, 96, 691 -80, -80, -80, -80, -80, -80, 57, 61, -80, 63,
686 -78, -78, 131, 134, 147, -78, -78, -4, -4, 193, 692 -80, 76, -80, 87, 101, 133, -80, -80, -3, -3,
687 -10, -78, 162, 164, 38, 102, 64, 148, 5, 192, 693 195, -6, -80, 136, 149, 39, 104, 65, 150, 5,
688 5, 165, -78, 174, -78, -78, -78, -78, -78, 65, 694 194, 5, 167, -80, 176, -80, -80, -80, -80, -80,
689 -78, -4, -4, 174, 103, 103, -78, -78, 175, 185, 695 -80, 68, -80, -3, -3, 176, 72, 72, -80, -80,
690 197, 73, 73, -4, 194, 103, -78, 231, -78, -78, 696 177, 187, 78, -1, -1, -3, 196, 72, -80, 222,
691 -78, -78, 220, -78, -78, 204, 73, 73, 210, -78, 697 -80, -80, -80, -80, 221, -80, -80, 205, -1, -1,
692 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 698 211, -80, -80, -80, -80, -80, -80, -80, -80, -80,
693 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 699 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
694 -78, -78, 205, -78, -78, -78, -78, -78, -4, 222, 700 -80, -80, -80, -80, 206, -80, -80, -80, -80, -80,
695 208, 222, 195, 222, 103, 2, 209, -78, -78, 222, 701 -3, 223, 209, 223, 197, 223, 72, 7, 210, -80,
696 211, 222, 199, -4, 212, -78, -78, 213, 214, 222, 702 -80, 223, 212, 223, 201, -3, 213, -80, -80, 214,
697 207, -78, -78, 215, -78, 216, -78, 111, -78, -78, 703 215, 223, 208, -80, -80, 216, -80, 217, -80, 113,
698 -78, 217, 73, -78, -78, -78, -78, -78 704 -80, -80, -80, 218, -1, -80, -80, -80, -80, -80
699}; 705};
700 706
701/* YYPGOTO[NTERM-NUM]. */ 707/* YYPGOTO[NTERM-NUM]. */
702static const yytype_int16 yypgoto[] = 708static const yytype_int16 yypgoto[] =
703{ 709{
704 -78, -78, -78, -78, 121, -35, -78, -78, -78, -78, 710 -80, -80, -80, -80, 122, -34, -80, -80, -80, -80,
705 219, -78, -78, -78, -78, -78, -78, -78, -44, -78, 711 220, -80, -80, -80, -80, -80, -80, -80, 59, -80,
706 -78, -78, -78, -78, -78, -78, -78, -78, -78, -6, 712 -80, -80, -80, -80, -80, -80, -80, -80, -80, 125,
707 -78, -78, -78, -78, -78, 183, 218, 21, 143, -5, 713 -80, -80, -80, -80, -80, 183, 219, 22, 142, -5,
708 146, 196, 69, -53, -77 714 147, 192, 69, -54, -79, -80
709}; 715};
710 716
711/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 717/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -715,62 +721,62 @@ static const yytype_int16 yypgoto[] =
715#define YYTABLE_NINF -82 721#define YYTABLE_NINF -82
716static const yytype_int16 yytable[] = 722static const yytype_int16 yytable[] =
717{ 723{
718 46, 47, 43, 49, 79, 80, 52, 134, 135, 6, 724 46, 47, 3, 49, 81, 82, 53, 136, 137, 6,
719 7, 8, 9, 10, 11, 12, 13, 84, 144, 14, 725 7, 8, 9, 10, 11, 12, 13, 43, 146, 14,
720 15, 55, 56, 85, 118, 57, 126, 160, 132, 133, 726 15, 86, 56, 57, 44, 45, 58, 87, 48, 134,
721 58, 110, 161, 3, 123, 24, 123, 48, -28, 88, 727 135, 59, 162, 112, 50, 24, 125, 163, 125, -28,
722 142, -28, -28, -28, -28, -28, -28, -28, -28, -28, 728 90, 144, -28, -28, -28, -28, -28, -28, -28, -28,
723 89, 53, -28, -28, 90, -28, 91, 92, 93, 94, 729 -28, 91, 54, -28, -28, 92, -28, 93, 94, 95,
724 95, 96, 120, 97, 128, 88, 50, 159, 98, -49, 730 96, 97, 98, 52, 99, 55, 90, 161, 62, 100,
725 -49, 51, -49, -49, -49, -49, 89, 54, -49, -49, 731 -49, -49, 63, -49, -49, -49, -49, 91, 64, -49,
726 90, 105, 106, 107, 108, 152, 139, 113, 61, 97, 732 -49, 92, 107, 108, 109, 110, 154, 73, 141, 115,
727 124, 62, 124, 131, 109, 63, 81, 82, 44, 45, 733 99, 75, 126, 76, 126, 111, 133, 56, 57, 83,
728 167, 149, -30, 88, 72, -30, -30, -30, -30, -30, 734 84, 169, 140, 151, -30, 90, 77, -30, -30, -30,
729 -30, -30, -30, -30, 89, 74, -30, -30, 90, -30, 735 -30, -30, -30, -30, -30, -30, 91, 78, -30, -30,
730 91, 92, 93, 94, 95, 96, 75, 97, 55, 56, 736 92, -30, 93, 94, 95, 96, 97, 98, 120, 99,
731 -2, 4, 98, 5, 6, 7, 8, 9, 10, 11, 737 128, 79, -2, 4, 100, 5, 6, 7, 8, 9,
732 12, 13, 81, 82, 14, 15, 16, 17, 18, 19, 738 10, 11, 12, 13, 83, 84, 14, 15, 16, 17,
733 20, 21, 22, 7, 8, 23, 10, 11, 12, 13, 739 18, 19, 20, 21, 22, 7, 8, 23, 10, 11,
734 24, 76, 14, 15, 77, -81, 88, 177, -81, -81, 740 12, 13, 24, 80, 14, 15, 88, -81, 90, 179,
735 -81, -81, -81, -81, -81, -81, -81, 78, 24, -81, 741 -81, -81, -81, -81, -81, -81, -81, -81, -81, 89,
736 -81, 90, -81, -81, -81, -81, -81, -81, 114, 117, 742 24, -81, -81, 92, -81, -81, -81, -81, -81, -81,
737 97, 125, 86, 88, 87, 122, -72, -72, -72, -72, 743 116, 119, 99, 127, 122, 90, 130, 124, -72, -72,
738 -72, -72, -72, -72, 130, 136, -72, -72, 90, 153, 744 -72, -72, -72, -72, -72, -72, 132, 138, -72, -72,
739 156, 157, 158, 116, 121, 137, 129, 97, 163, 143, 745 92, 155, 158, 159, 160, 118, 123, 139, 131, 99,
740 165, 138, 122, 72, 81, 82, 81, 82, 171, 166, 746 165, 145, 167, 148, 124, 73, 83, 84, 83, 84,
741 81, 82, 146, 147, 148, 151, 153, 82, 155, 162, 747 173, 168, 83, 84, 149, 150, 153, 155, 84, 157,
742 172, 164, 168, 169, 170, 174, 175, 176, 65, 112, 748 164, 174, 166, 170, 171, 172, 176, 177, 178, 66,
743 150, 0, 0, 0, 0, 83, 0, 0, 71 749 114, 152, 85, 0, 0, 0, 0, 0, 0, 72
744}; 750};
745 751
746static const yytype_int16 yycheck[] = 752static const yytype_int16 yycheck[] =
747{ 753{
748 5, 6, 30, 8, 57, 58, 11, 84, 85, 4, 754 5, 6, 0, 8, 58, 59, 11, 86, 87, 4,
749 5, 6, 7, 8, 9, 10, 11, 27, 95, 14, 755 5, 6, 7, 8, 9, 10, 11, 30, 97, 14,
750 15, 25, 26, 33, 68, 29, 70, 25, 81, 82, 756 15, 27, 25, 26, 25, 26, 29, 33, 30, 83,
751 34, 66, 30, 0, 69, 30, 71, 30, 0, 1, 757 84, 34, 25, 67, 25, 30, 70, 30, 72, 0,
752 93, 3, 4, 5, 6, 7, 8, 9, 10, 11, 758 1, 95, 3, 4, 5, 6, 7, 8, 9, 10,
753 12, 25, 14, 15, 16, 17, 18, 19, 20, 21, 759 11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
754 22, 23, 68, 25, 70, 1, 30, 144, 30, 5, 760 21, 22, 23, 30, 25, 25, 1, 146, 30, 30,
755 6, 30, 8, 9, 10, 11, 12, 25, 14, 15, 761 5, 6, 1, 8, 9, 10, 11, 12, 1, 14,
756 16, 17, 18, 19, 20, 138, 91, 66, 30, 25, 762 15, 16, 17, 18, 19, 20, 140, 30, 93, 67,
757 69, 1, 71, 28, 30, 1, 31, 32, 25, 26, 763 25, 30, 70, 30, 72, 30, 28, 25, 26, 31,
758 153, 106, 0, 1, 30, 3, 4, 5, 6, 7, 764 32, 155, 24, 108, 0, 1, 30, 3, 4, 5,
759 8, 9, 10, 11, 12, 30, 14, 15, 16, 17, 765 6, 7, 8, 9, 10, 11, 12, 30, 14, 15,
760 18, 19, 20, 21, 22, 23, 30, 25, 25, 26, 766 16, 17, 18, 19, 20, 21, 22, 23, 69, 25,
761 0, 1, 30, 3, 4, 5, 6, 7, 8, 9, 767 71, 30, 0, 1, 30, 3, 4, 5, 6, 7,
762 10, 11, 31, 32, 14, 15, 16, 17, 18, 19, 768 8, 9, 10, 11, 31, 32, 14, 15, 16, 17,
763 20, 21, 22, 5, 6, 25, 8, 9, 10, 11, 769 18, 19, 20, 21, 22, 5, 6, 25, 8, 9,
764 30, 30, 14, 15, 30, 0, 1, 172, 3, 4, 770 10, 11, 30, 30, 14, 15, 30, 0, 1, 174,
765 5, 6, 7, 8, 9, 10, 11, 30, 30, 14, 771 3, 4, 5, 6, 7, 8, 9, 10, 11, 30,
766 15, 16, 17, 18, 19, 20, 21, 22, 67, 68, 772 30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
767 25, 70, 30, 1, 30, 30, 4, 5, 6, 7, 773 68, 69, 25, 71, 69, 1, 71, 30, 4, 5,
768 8, 9, 10, 11, 30, 30, 14, 15, 16, 14, 774 6, 7, 8, 9, 10, 11, 30, 30, 14, 15,
769 141, 142, 143, 67, 68, 30, 70, 25, 149, 25, 775 16, 14, 143, 144, 145, 68, 69, 30, 71, 25,
770 151, 24, 30, 30, 31, 32, 31, 32, 159, 30, 776 151, 25, 153, 1, 30, 30, 31, 32, 31, 32,
771 31, 32, 1, 13, 30, 25, 14, 32, 30, 30, 777 161, 30, 31, 32, 13, 30, 25, 14, 32, 30,
772 33, 30, 30, 30, 30, 30, 30, 30, 29, 66, 778 30, 33, 30, 30, 30, 30, 30, 30, 30, 29,
773 107, -1, -1, -1, -1, 59, -1, -1, 40 779 67, 109, 60, -1, -1, -1, -1, -1, -1, 40
774}; 780};
775 781
776/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 782/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -782,19 +788,19 @@ static const yytype_uint8 yystos[] =
782 20, 21, 22, 25, 30, 38, 39, 41, 42, 43, 788 20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
783 44, 50, 51, 53, 57, 59, 61, 62, 64, 66, 789 44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
784 67, 68, 75, 30, 25, 26, 74, 74, 30, 74, 790 67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
785 30, 30, 74, 25, 25, 25, 26, 29, 34, 78, 791 25, 80, 30, 74, 25, 25, 25, 26, 29, 34,
786 79, 30, 1, 1, 45, 45, 54, 56, 60, 71, 792 78, 79, 30, 1, 1, 45, 45, 54, 56, 60,
787 65, 71, 30, 76, 30, 30, 30, 30, 30, 78, 793 71, 65, 71, 30, 76, 30, 30, 30, 30, 30,
788 78, 31, 32, 76, 27, 33, 30, 30, 1, 12, 794 30, 78, 78, 31, 32, 76, 27, 33, 30, 30,
789 16, 18, 19, 20, 21, 22, 23, 25, 30, 40, 795 1, 12, 16, 18, 19, 20, 21, 22, 23, 25,
790 46, 47, 69, 70, 72, 17, 18, 19, 20, 30, 796 30, 40, 46, 47, 69, 70, 72, 17, 18, 19,
791 40, 55, 70, 72, 39, 52, 75, 39, 53, 58, 797 20, 30, 40, 55, 70, 72, 39, 52, 75, 39,
792 64, 75, 30, 40, 72, 39, 53, 63, 64, 75, 798 53, 58, 64, 75, 30, 40, 72, 39, 53, 63,
793 30, 28, 78, 78, 79, 79, 30, 30, 24, 74, 799 64, 75, 30, 28, 78, 78, 79, 79, 30, 30,
794 73, 74, 78, 25, 79, 48, 1, 13, 30, 74, 800 24, 74, 73, 74, 78, 25, 79, 48, 1, 13,
795 73, 25, 78, 14, 77, 30, 77, 77, 77, 79, 801 30, 74, 73, 25, 78, 14, 77, 30, 77, 77,
796 25, 30, 30, 77, 30, 77, 30, 78, 30, 30, 802 77, 79, 25, 30, 30, 77, 30, 77, 30, 78,
797 30, 77, 33, 49, 30, 30, 30, 74 803 30, 30, 30, 77, 33, 49, 30, 30, 30, 74
798}; 804};
799 805
800#define yyerrok (yyerrstatus = 0) 806#define yyerrok (yyerrstatus = 0)
@@ -1781,8 +1787,8 @@ yyreduce:
1781 case 48: 1787 case 48:
1782 1788
1783 { 1789 {
1784 struct symbol *sym = sym_lookup(NULL, 0); 1790 struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
1785 sym->flags |= SYMBOL_CHOICE; 1791 sym->flags |= SYMBOL_AUTO;
1786 menu_add_entry(sym); 1792 menu_add_entry(sym);
1787 menu_add_expr(P_CHOICE, NULL, NULL); 1793 menu_add_expr(P_CHOICE, NULL, NULL);
1788 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); 1794 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
@@ -2014,7 +2020,12 @@ yyreduce:
2014 2020
2015 case 108: 2021 case 108:
2016 2022
2017 { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 1); free((yyvsp[(1) - (1)].string)); ;} 2023 { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
2024 break;
2025
2026 case 109:
2027
2028 { (yyval.string) = NULL; ;}
2018 break; 2029 break;
2019 2030
2020 2031
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index d9b96ba8e38c..9710b82466f2 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -91,7 +91,7 @@ static struct menu *current_menu, *current_entry;
91%type <id> end 91%type <id> end
92%type <id> option_name 92%type <id> option_name
93%type <menu> if_entry menu_entry choice_entry 93%type <menu> if_entry menu_entry choice_entry
94%type <string> symbol_option_arg 94%type <string> symbol_option_arg word_opt
95 95
96%destructor { 96%destructor {
97 fprintf(stderr, "%s:%d: missing end statement for this entry\n", 97 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -239,10 +239,10 @@ symbol_option_arg:
239 239
240/* choice entry */ 240/* choice entry */
241 241
242choice: T_CHOICE T_EOL 242choice: T_CHOICE word_opt T_EOL
243{ 243{
244 struct symbol *sym = sym_lookup(NULL, 0); 244 struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
245 sym->flags |= SYMBOL_CHOICE; 245 sym->flags |= SYMBOL_AUTO;
246 menu_add_entry(sym); 246 menu_add_entry(sym);
247 menu_add_expr(P_CHOICE, NULL, NULL); 247 menu_add_expr(P_CHOICE, NULL, NULL);
248 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); 248 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
@@ -456,9 +456,12 @@ expr: symbol { $$ = expr_alloc_symbol($1); }
456; 456;
457 457
458symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } 458symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
459 | T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); } 459 | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
460; 460;
461 461
462word_opt: /* empty */ { $$ = NULL; }
463 | T_WORD
464
462%% 465%%
463 466
464void conf_parse(const char *name) 467void conf_parse(const char *name)