diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-28 20:29:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-28 20:29:43 -0400 |
commit | f05c463be51898e745c4aa8245b05e25d73fa975 (patch) | |
tree | 7a5502f06f113eef9bef25c6a33cc6a419953b4a | |
parent | 8da56309f04d76a474791fd27b33ddd52062bcd6 (diff) | |
parent | 5a1aa8a1aff6191ecc55f21d8b5f0e47108ed91b (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/dontdiff | 2 | ||||
-rw-r--r-- | Documentation/kbuild/kconfig-language.txt | 17 | ||||
-rw-r--r-- | Makefile | 27 | ||||
-rw-r--r-- | scripts/gen_initramfs_list.sh | 2 | ||||
-rw-r--r-- | scripts/kconfig/lex.zconf.c_shipped | 25 | ||||
-rw-r--r-- | scripts/kconfig/lkc_proto.h | 2 | ||||
-rw-r--r-- | scripts/kconfig/lxdialog/inputbox.c | 2 | ||||
-rw-r--r-- | scripts/kconfig/menu.c | 64 | ||||
-rw-r--r-- | scripts/kconfig/symbol.c | 118 | ||||
-rw-r--r-- | scripts/kconfig/zconf.tab.c_shipped | 301 | ||||
-rw-r--r-- | scripts/kconfig/zconf.y | 13 |
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 | |||
141 | mktables | 141 | mktables |
142 | mktree | 142 | mktree |
143 | modpost | 143 | modpost |
144 | modules.order | ||
144 | modversions.h* | 145 | modversions.h* |
145 | offset.h | 146 | offset.h |
146 | offsets.h | 147 | offsets.h |
@@ -171,6 +172,7 @@ sm_tbl* | |||
171 | split-include | 172 | split-include |
172 | tags | 173 | tags |
173 | tftpboot.img | 174 | tftpboot.img |
175 | timeconst.h | ||
174 | times.h* | 176 | times.h* |
175 | tkparse | 177 | tkparse |
176 | trix_boot.h | 178 | trix_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 |
@@ -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 | ||
1177 | boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig) | 1177 | boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig) |
1178 | boards := $(notdir $(boards)) | 1178 | boards := $(notdir $(boards)) |
1179 | board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig)) | ||
1180 | board-dirs := $(sort $(notdir $(board-dirs:/=))) | ||
1179 | 1181 | ||
1180 | help: | 1182 | help: |
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 | ||
1250 | help-board-dirs := $(addprefix help-,$(board-dirs)) | ||
1251 | |||
1252 | help-boards: $(help-board-dirs) | ||
1253 | |||
1254 | boards-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 | ||
360 | typedef unsigned char YY_CHAR; | 341 | typedef 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 */ |
22 | P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); | 22 | P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); |
23 | 23 | ||
24 | P(sym_lookup,struct symbol *,(const char *name, int isconst)); | 24 | P(sym_lookup,struct symbol *,(const char *name, int flags)); |
25 | P(sym_find,struct symbol *,(const char *name)); | 25 | P(sym_find,struct symbol *,(const char *name)); |
26 | P(sym_re_search,struct symbol **,(const char *pattern)); | 26 | P(sym_re_search,struct symbol **,(const char *pattern)); |
27 | P(sym_type_name,const char *,(enum symbol_type type)); | 27 | P(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 | ||
46 | void sym_init(void) | 46 | void 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 | ||
382 | void sym_clear_all_valid(void) | 382 | void 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 | ||
654 | struct symbol *sym_lookup(const char *name, int isconst) | 654 | struct 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 | ||
765 | struct symbol *sym_check_deps(struct symbol *sym); | ||
766 | |||
767 | static struct symbol *sym_check_expr_deps(struct expr *e) | 763 | static 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 */ |
798 | struct symbol *sym_check_deps(struct symbol *sym) | 794 | static 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 | } |
828 | out: | 815 | |
816 | return sym2; | ||
817 | } | ||
818 | |||
819 | static 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 | } | ||
842 | out: | ||
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 | |||
853 | struct 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. */ |
644 | static const yytype_uint8 yydefact[] = | 650 | static 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]. */ |
667 | static const yytype_int16 yydefgoto[] = | 673 | static 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 |
679 | static const yytype_int16 yypact[] = | 685 | static 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]. */ |
702 | static const yytype_int16 yypgoto[] = | 708 | static 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 |
716 | static const yytype_int16 yytable[] = | 722 | static 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 | ||
746 | static const yytype_int16 yycheck[] = | 752 | static 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 | ||
242 | choice: T_CHOICE T_EOL | 242 | choice: 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 | ||
458 | symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } | 458 | symbol: 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 | ||
462 | word_opt: /* empty */ { $$ = NULL; } | ||
463 | | T_WORD | ||
464 | |||
462 | %% | 465 | %% |
463 | 466 | ||
464 | void conf_parse(const char *name) | 467 | void conf_parse(const char *name) |