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
This commit is contained in:
commit
f05c463be5
|
@ -141,6 +141,7 @@ mkprep
|
||||||
mktables
|
mktables
|
||||||
mktree
|
mktree
|
||||||
modpost
|
modpost
|
||||||
|
modules.order
|
||||||
modversions.h*
|
modversions.h*
|
||||||
offset.h
|
offset.h
|
||||||
offsets.h
|
offsets.h
|
||||||
|
@ -171,6 +172,7 @@ sm_tbl*
|
||||||
split-include
|
split-include
|
||||||
tags
|
tags
|
||||||
tftpboot.img
|
tftpboot.img
|
||||||
|
timeconst.h
|
||||||
times.h*
|
times.h*
|
||||||
tkparse
|
tkparse
|
||||||
trix_boot.h
|
trix_boot.h
|
||||||
|
|
|
@ -104,14 +104,15 @@ applicable everywhere (see syntax).
|
||||||
Reverse dependencies can only be used with boolean or tristate
|
Reverse dependencies can only be used with boolean or tristate
|
||||||
symbols.
|
symbols.
|
||||||
Note:
|
Note:
|
||||||
select is evil.... select will by brute force set a symbol
|
select should be used with care. select will force
|
||||||
equal to 'y' without visiting the dependencies. So abusing
|
a symbol to a value without visiting the dependencies.
|
||||||
select you are able to select a symbol FOO even if FOO depends
|
By abusing select you are able to select a symbol FOO even
|
||||||
on BAR that is not set. In general use select only for
|
if FOO depends on BAR that is not set.
|
||||||
non-visible symbols (no prompts anywhere) and for symbols with
|
In general use select only for non-visible symbols
|
||||||
no dependencies. That will limit the usefulness but on the
|
(no prompts anywhere) and for symbols with no dependencies.
|
||||||
other hand avoid the illegal configurations all over. kconfig
|
That will limit the usefulness but on the other hand avoid
|
||||||
should one day warn about such things.
|
the illegal configurations all over.
|
||||||
|
kconfig should one day warn about such things.
|
||||||
|
|
||||||
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
|
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
|
||||||
This allows to limit the range of possible input values for int
|
This allows to limit the range of possible input values for int
|
||||||
|
|
27
Makefile
27
Makefile
|
@ -1174,8 +1174,10 @@ rpm: include/config/kernel.release FORCE
|
||||||
# Brief documentation of the typical targets used
|
# Brief documentation of the typical targets used
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig)
|
boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
|
||||||
boards := $(notdir $(boards))
|
boards := $(notdir $(boards))
|
||||||
|
board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
|
||||||
|
board-dirs := $(sort $(notdir $(board-dirs:/=)))
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo 'Cleaning targets:'
|
@echo 'Cleaning targets:'
|
||||||
|
@ -1221,14 +1223,19 @@ help:
|
||||||
@echo 'Documentation targets:'
|
@echo 'Documentation targets:'
|
||||||
@$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
|
@$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
|
||||||
@echo ''
|
@echo ''
|
||||||
@echo 'Architecture specific targets ($(ARCH)):'
|
@echo 'Architecture specific targets ($(SRCARCH)):'
|
||||||
@$(if $(archhelp),$(archhelp),\
|
@$(if $(archhelp),$(archhelp),\
|
||||||
echo ' No architecture specific help defined for $(ARCH)')
|
echo ' No architecture specific help defined for $(SRCARCH)')
|
||||||
@echo ''
|
@echo ''
|
||||||
@$(if $(boards), \
|
@$(if $(boards), \
|
||||||
$(foreach b, $(boards), \
|
$(foreach b, $(boards), \
|
||||||
printf " %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
|
printf " %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
|
||||||
echo '')
|
echo '')
|
||||||
|
@$(if $(board-dirs), \
|
||||||
|
$(foreach b, $(board-dirs), \
|
||||||
|
printf " %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
|
||||||
|
printf " %-16s - Show all of the above\\n" help-boards; \
|
||||||
|
echo '')
|
||||||
|
|
||||||
@echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
|
@echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
|
||||||
@echo ' make V=2 [targets] 2 => give reason for rebuild of target'
|
@echo ' make V=2 [targets] 2 => give reason for rebuild of target'
|
||||||
|
@ -1240,6 +1247,20 @@ help:
|
||||||
@echo 'For further info see the ./README file'
|
@echo 'For further info see the ./README file'
|
||||||
|
|
||||||
|
|
||||||
|
help-board-dirs := $(addprefix help-,$(board-dirs))
|
||||||
|
|
||||||
|
help-boards: $(help-board-dirs)
|
||||||
|
|
||||||
|
boards-per-dir = $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig))
|
||||||
|
|
||||||
|
$(help-board-dirs): help-%:
|
||||||
|
@echo 'Architecture specific targets ($(SRCARCH) $*):'
|
||||||
|
@$(if $(boards-per-dir), \
|
||||||
|
$(foreach b, $(boards-per-dir), \
|
||||||
|
printf " %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
|
||||||
|
echo '')
|
||||||
|
|
||||||
|
|
||||||
# Documentation targets
|
# Documentation targets
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
%docs: scripts_basic FORCE
|
%docs: scripts_basic FORCE
|
||||||
|
|
|
@ -135,7 +135,7 @@ parse() {
|
||||||
str="${ftype} ${name} ${str} ${dev} ${maj} ${min}"
|
str="${ftype} ${name} ${str} ${dev} ${maj} ${min}"
|
||||||
;;
|
;;
|
||||||
"slink")
|
"slink")
|
||||||
local target=`field 11 $(LC_ALL=C ls -l "${location}")`
|
local target=`readlink "${location}"`
|
||||||
str="${ftype} ${name} ${target} ${str}"
|
str="${ftype} ${name} ${target} ${str}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
|
|
@ -5,25 +5,6 @@
|
||||||
|
|
||||||
/* A lexical scanner generated by flex */
|
/* A lexical scanner generated by flex */
|
||||||
|
|
||||||
#define yy_create_buffer zconf_create_buffer
|
|
||||||
#define yy_delete_buffer zconf_delete_buffer
|
|
||||||
#define yy_flex_debug zconf_flex_debug
|
|
||||||
#define yy_init_buffer zconf_init_buffer
|
|
||||||
#define yy_flush_buffer zconf_flush_buffer
|
|
||||||
#define yy_load_buffer_state zconf_load_buffer_state
|
|
||||||
#define yy_switch_to_buffer zconf_switch_to_buffer
|
|
||||||
#define yyin zconfin
|
|
||||||
#define yyleng zconfleng
|
|
||||||
#define yylex zconflex
|
|
||||||
#define yylineno zconflineno
|
|
||||||
#define yyout zconfout
|
|
||||||
#define yyrestart zconfrestart
|
|
||||||
#define yytext zconftext
|
|
||||||
#define yywrap zconfwrap
|
|
||||||
#define yyalloc zconfalloc
|
|
||||||
#define yyrealloc zconfrealloc
|
|
||||||
#define yyfree zconffree
|
|
||||||
|
|
||||||
#define FLEX_SCANNER
|
#define FLEX_SCANNER
|
||||||
#define YY_FLEX_MAJOR_VERSION 2
|
#define YY_FLEX_MAJOR_VERSION 2
|
||||||
#define YY_FLEX_MINOR_VERSION 5
|
#define YY_FLEX_MINOR_VERSION 5
|
||||||
|
@ -354,7 +335,7 @@ void zconffree (void * );
|
||||||
|
|
||||||
/* Begin user sect3 */
|
/* Begin user sect3 */
|
||||||
|
|
||||||
#define zconfwrap(n) 1
|
#define zconfwrap() 1
|
||||||
#define YY_SKIP_YYWRAP
|
#define YY_SKIP_YYWRAP
|
||||||
|
|
||||||
typedef unsigned char YY_CHAR;
|
typedef unsigned char YY_CHAR;
|
||||||
|
@ -1535,7 +1516,7 @@ static int yy_get_next_buffer (void)
|
||||||
|
|
||||||
/* Read in more data. */
|
/* Read in more data. */
|
||||||
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
|
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
|
||||||
(yy_n_chars), num_to_read );
|
(yy_n_chars), (size_t) num_to_read );
|
||||||
|
|
||||||
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
|
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
|
||||||
}
|
}
|
||||||
|
@ -2007,7 +1988,7 @@ YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
|
||||||
|
|
||||||
/** Setup the input buffer state to scan a string. The next call to zconflex() will
|
/** Setup the input buffer state to scan a string. The next call to zconflex() will
|
||||||
* scan from a @e copy of @a str.
|
* scan from a @e copy of @a str.
|
||||||
* @param str a NUL-terminated string to scan
|
* @param yystr a NUL-terminated string to scan
|
||||||
*
|
*
|
||||||
* @return the newly allocated buffer state object.
|
* @return the newly allocated buffer state object.
|
||||||
* @note If you want to scan bytes that may contain NUL values, then use
|
* @note If you want to scan bytes that may contain NUL values, then use
|
||||||
|
|
|
@ -21,7 +21,7 @@ P(menu_get_help,const char *,(struct menu *menu));
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
|
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
|
||||||
|
|
||||||
P(sym_lookup,struct symbol *,(const char *name, int isconst));
|
P(sym_lookup,struct symbol *,(const char *name, int flags));
|
||||||
P(sym_find,struct symbol *,(const char *name));
|
P(sym_find,struct symbol *,(const char *name));
|
||||||
P(sym_re_search,struct symbol **,(const char *pattern));
|
P(sym_re_search,struct symbol **,(const char *pattern));
|
||||||
P(sym_type_name,const char *,(enum symbol_type type));
|
P(sym_type_name,const char *,(enum symbol_type type));
|
||||||
|
|
|
@ -89,7 +89,7 @@ do_resize:
|
||||||
box_y = y + 2;
|
box_y = y + 2;
|
||||||
box_x = (width - box_width) / 2;
|
box_x = (width - box_width) / 2;
|
||||||
draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
|
draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
|
||||||
dlg.border.atr, dlg.dialog.atr);
|
dlg.dialog.atr, dlg.border.atr);
|
||||||
|
|
||||||
print_buttons(dialog, height, width, 0);
|
print_buttons(dialog, height, width, 0);
|
||||||
|
|
||||||
|
|
|
@ -235,18 +235,22 @@ void menu_finalize(struct menu *parent)
|
||||||
sym = parent->sym;
|
sym = parent->sym;
|
||||||
if (parent->list) {
|
if (parent->list) {
|
||||||
if (sym && sym_is_choice(sym)) {
|
if (sym && sym_is_choice(sym)) {
|
||||||
/* find the first choice value and find out choice type */
|
if (sym->type == S_UNKNOWN) {
|
||||||
for (menu = parent->list; menu; menu = menu->next) {
|
/* find the first choice value to find out choice type */
|
||||||
if (menu->sym) {
|
|
||||||
current_entry = parent;
|
current_entry = parent;
|
||||||
if (sym->type == S_UNKNOWN)
|
for (menu = parent->list; menu; menu = menu->next) {
|
||||||
|
if (menu->sym && menu->sym->type != S_UNKNOWN) {
|
||||||
menu_set_type(menu->sym->type);
|
menu_set_type(menu->sym->type);
|
||||||
current_entry = menu;
|
|
||||||
if (menu->sym->type == S_UNKNOWN)
|
|
||||||
menu_set_type(sym->type);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
/* set the type of the remaining choice values */
|
||||||
|
for (menu = parent->list; menu; menu = menu->next) {
|
||||||
|
current_entry = menu;
|
||||||
|
if (menu->sym && menu->sym->type == S_UNKNOWN)
|
||||||
|
menu_set_type(sym->type);
|
||||||
|
}
|
||||||
parentdep = expr_alloc_symbol(sym);
|
parentdep = expr_alloc_symbol(sym);
|
||||||
} else if (parent->prompt)
|
} else if (parent->prompt)
|
||||||
parentdep = parent->prompt->visible.expr;
|
parentdep = parent->prompt->visible.expr;
|
||||||
|
@ -313,50 +317,36 @@ void menu_finalize(struct menu *parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (menu = parent->list; menu; menu = menu->next) {
|
for (menu = parent->list; menu; menu = menu->next) {
|
||||||
if (sym && sym_is_choice(sym) && menu->sym) {
|
if (sym && sym_is_choice(sym) &&
|
||||||
|
menu->sym && !sym_is_choice_value(menu->sym)) {
|
||||||
|
current_entry = menu;
|
||||||
menu->sym->flags |= SYMBOL_CHOICEVAL;
|
menu->sym->flags |= SYMBOL_CHOICEVAL;
|
||||||
if (!menu->prompt)
|
if (!menu->prompt)
|
||||||
menu_warn(menu, "choice value must have a prompt");
|
menu_warn(menu, "choice value must have a prompt");
|
||||||
for (prop = menu->sym->prop; prop; prop = prop->next) {
|
for (prop = menu->sym->prop; prop; prop = prop->next) {
|
||||||
if (prop->type == P_PROMPT && prop->menu != menu) {
|
|
||||||
prop_warn(prop, "choice values "
|
|
||||||
"currently only support a "
|
|
||||||
"single prompt");
|
|
||||||
}
|
|
||||||
if (prop->type == P_DEFAULT)
|
if (prop->type == P_DEFAULT)
|
||||||
prop_warn(prop, "defaults for choice "
|
prop_warn(prop, "defaults for choice "
|
||||||
"values not supported");
|
"values not supported");
|
||||||
|
if (prop->menu == menu)
|
||||||
|
continue;
|
||||||
|
if (prop->type == P_PROMPT &&
|
||||||
|
prop->menu->parent->sym != sym)
|
||||||
|
prop_warn(prop, "choice value used outside its choice group");
|
||||||
}
|
}
|
||||||
current_entry = menu;
|
|
||||||
if (menu->sym->type == S_UNKNOWN)
|
|
||||||
menu_set_type(sym->type);
|
|
||||||
/* Non-tristate choice values of tristate choices must
|
/* Non-tristate choice values of tristate choices must
|
||||||
* depend on the choice being set to Y. The choice
|
* depend on the choice being set to Y. The choice
|
||||||
* values' dependencies were propagated to their
|
* values' dependencies were propagated to their
|
||||||
* properties above, so the change here must be re-
|
* properties above, so the change here must be re-
|
||||||
* propagated. */
|
* propagated.
|
||||||
|
*/
|
||||||
if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
|
if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
|
||||||
basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
|
basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
|
||||||
basedep = expr_alloc_and(basedep, menu->dep);
|
menu->dep = expr_alloc_and(basedep, menu->dep);
|
||||||
basedep = expr_eliminate_dups(basedep);
|
|
||||||
menu->dep = basedep;
|
|
||||||
for (prop = menu->sym->prop; prop; prop = prop->next) {
|
for (prop = menu->sym->prop; prop; prop = prop->next) {
|
||||||
if (prop->menu != menu)
|
if (prop->menu != menu)
|
||||||
continue;
|
continue;
|
||||||
dep = expr_alloc_and(expr_copy(basedep),
|
prop->visible.expr = expr_alloc_and(expr_copy(basedep),
|
||||||
prop->visible.expr);
|
prop->visible.expr);
|
||||||
dep = expr_eliminate_dups(dep);
|
|
||||||
dep = expr_trans_bool(dep);
|
|
||||||
prop->visible.expr = dep;
|
|
||||||
if (prop->type == P_SELECT) {
|
|
||||||
struct symbol *es = prop_get_symbol(prop);
|
|
||||||
dep2 = expr_alloc_symbol(menu->sym);
|
|
||||||
dep = expr_alloc_and(dep2,
|
|
||||||
expr_copy(dep));
|
|
||||||
dep = expr_alloc_or(es->rev_dep.expr, dep);
|
|
||||||
dep = expr_eliminate_dups(dep);
|
|
||||||
es->rev_dep.expr = dep;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
menu_add_symbol(P_CHOICE, sym, NULL);
|
menu_add_symbol(P_CHOICE, sym, NULL);
|
||||||
|
|
|
@ -40,7 +40,7 @@ void sym_add_default(struct symbol *sym, const char *def)
|
||||||
{
|
{
|
||||||
struct property *prop = prop_alloc(P_DEFAULT, sym);
|
struct property *prop = prop_alloc(P_DEFAULT, sym);
|
||||||
|
|
||||||
prop->expr = expr_alloc_symbol(sym_lookup(def, 1));
|
prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sym_init(void)
|
void sym_init(void)
|
||||||
|
@ -350,9 +350,6 @@ void sym_calc_value(struct symbol *sym)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sym->flags & SYMBOL_AUTO)
|
|
||||||
sym->flags &= ~SYMBOL_WRITE;
|
|
||||||
|
|
||||||
sym->curr = newval;
|
sym->curr = newval;
|
||||||
if (sym_is_choice(sym) && newval.tri == yes)
|
if (sym_is_choice(sym) && newval.tri == yes)
|
||||||
sym->curr.val = sym_calc_choice(sym);
|
sym->curr.val = sym_calc_choice(sym);
|
||||||
|
@ -377,6 +374,9 @@ void sym_calc_value(struct symbol *sym)
|
||||||
sym_set_changed(choice_sym);
|
sym_set_changed(choice_sym);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sym->flags & SYMBOL_AUTO)
|
||||||
|
sym->flags &= ~SYMBOL_WRITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sym_clear_all_valid(void)
|
void sym_clear_all_valid(void)
|
||||||
|
@ -651,7 +651,7 @@ bool sym_is_changable(struct symbol *sym)
|
||||||
return sym->visible > sym->rev_dep.tri;
|
return sym->visible > sym->rev_dep.tri;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct symbol *sym_lookup(const char *name, int isconst)
|
struct symbol *sym_lookup(const char *name, int flags)
|
||||||
{
|
{
|
||||||
struct symbol *symbol;
|
struct symbol *symbol;
|
||||||
const char *ptr;
|
const char *ptr;
|
||||||
|
@ -671,12 +671,11 @@ struct symbol *sym_lookup(const char *name, int isconst)
|
||||||
hash &= 0xff;
|
hash &= 0xff;
|
||||||
|
|
||||||
for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
|
for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
|
||||||
if (!strcmp(symbol->name, name)) {
|
if (!strcmp(symbol->name, name) &&
|
||||||
if ((isconst && symbol->flags & SYMBOL_CONST) ||
|
(flags ? symbol->flags & flags
|
||||||
(!isconst && !(symbol->flags & SYMBOL_CONST)))
|
: !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
new_name = strdup(name);
|
new_name = strdup(name);
|
||||||
} else {
|
} else {
|
||||||
new_name = NULL;
|
new_name = NULL;
|
||||||
|
@ -687,8 +686,7 @@ struct symbol *sym_lookup(const char *name, int isconst)
|
||||||
memset(symbol, 0, sizeof(*symbol));
|
memset(symbol, 0, sizeof(*symbol));
|
||||||
symbol->name = new_name;
|
symbol->name = new_name;
|
||||||
symbol->type = S_UNKNOWN;
|
symbol->type = S_UNKNOWN;
|
||||||
if (isconst)
|
symbol->flags |= flags;
|
||||||
symbol->flags |= SYMBOL_CONST;
|
|
||||||
|
|
||||||
symbol->next = symbol_hash[hash];
|
symbol->next = symbol_hash[hash];
|
||||||
symbol_hash[hash] = symbol;
|
symbol_hash[hash] = symbol;
|
||||||
|
@ -762,8 +760,6 @@ struct symbol **sym_re_search(const char *pattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct symbol *sym_check_deps(struct symbol *sym);
|
|
||||||
|
|
||||||
static struct symbol *sym_check_expr_deps(struct expr *e)
|
static struct symbol *sym_check_expr_deps(struct expr *e)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
@ -795,6 +791,65 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return NULL when dependencies are OK */
|
/* return NULL when dependencies are OK */
|
||||||
|
static struct symbol *sym_check_sym_deps(struct symbol *sym)
|
||||||
|
{
|
||||||
|
struct symbol *sym2;
|
||||||
|
struct property *prop;
|
||||||
|
|
||||||
|
sym2 = sym_check_expr_deps(sym->rev_dep.expr);
|
||||||
|
if (sym2)
|
||||||
|
return sym2;
|
||||||
|
|
||||||
|
for (prop = sym->prop; prop; prop = prop->next) {
|
||||||
|
if (prop->type == P_CHOICE || prop->type == P_SELECT)
|
||||||
|
continue;
|
||||||
|
sym2 = sym_check_expr_deps(prop->visible.expr);
|
||||||
|
if (sym2)
|
||||||
|
break;
|
||||||
|
if (prop->type != P_DEFAULT || sym_is_choice(sym))
|
||||||
|
continue;
|
||||||
|
sym2 = sym_check_expr_deps(prop->expr);
|
||||||
|
if (sym2)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sym2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct symbol *sym_check_choice_deps(struct symbol *choice)
|
||||||
|
{
|
||||||
|
struct symbol *sym, *sym2;
|
||||||
|
struct property *prop;
|
||||||
|
struct expr *e;
|
||||||
|
|
||||||
|
prop = sym_get_choice_prop(choice);
|
||||||
|
expr_list_for_each_sym(prop->expr, e, sym)
|
||||||
|
sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
|
||||||
|
|
||||||
|
choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
|
||||||
|
sym2 = sym_check_sym_deps(choice);
|
||||||
|
choice->flags &= ~SYMBOL_CHECK;
|
||||||
|
if (sym2)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
expr_list_for_each_sym(prop->expr, e, sym) {
|
||||||
|
sym2 = sym_check_sym_deps(sym);
|
||||||
|
if (sym2) {
|
||||||
|
fprintf(stderr, " -> %s", sym->name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
expr_list_for_each_sym(prop->expr, e, sym)
|
||||||
|
sym->flags &= ~SYMBOL_CHECK;
|
||||||
|
|
||||||
|
if (sym2 && sym_is_choice_value(sym2) &&
|
||||||
|
prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
|
||||||
|
sym2 = choice;
|
||||||
|
|
||||||
|
return sym2;
|
||||||
|
}
|
||||||
|
|
||||||
struct symbol *sym_check_deps(struct symbol *sym)
|
struct symbol *sym_check_deps(struct symbol *sym)
|
||||||
{
|
{
|
||||||
struct symbol *sym2;
|
struct symbol *sym2;
|
||||||
|
@ -802,33 +857,34 @@ struct symbol *sym_check_deps(struct symbol *sym)
|
||||||
|
|
||||||
if (sym->flags & SYMBOL_CHECK) {
|
if (sym->flags & SYMBOL_CHECK) {
|
||||||
fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
|
fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
|
||||||
sym->prop->file->name, sym->prop->lineno, sym->name);
|
sym->prop->file->name, sym->prop->lineno,
|
||||||
|
sym->name ? sym->name : "<choice>");
|
||||||
return sym;
|
return sym;
|
||||||
}
|
}
|
||||||
if (sym->flags & SYMBOL_CHECKED)
|
if (sym->flags & SYMBOL_CHECKED)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (sym_is_choice_value(sym)) {
|
||||||
|
/* for choice groups start the check with main choice symbol */
|
||||||
|
prop = sym_get_choice_prop(sym);
|
||||||
|
sym2 = sym_check_deps(prop_get_symbol(prop));
|
||||||
|
} else if (sym_is_choice(sym)) {
|
||||||
|
sym2 = sym_check_choice_deps(sym);
|
||||||
|
} else {
|
||||||
sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
|
sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
|
||||||
sym2 = sym_check_expr_deps(sym->rev_dep.expr);
|
sym2 = sym_check_sym_deps(sym);
|
||||||
if (sym2)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
for (prop = sym->prop; prop; prop = prop->next) {
|
|
||||||
if (prop->type == P_CHOICE || prop->type == P_SELECT)
|
|
||||||
continue;
|
|
||||||
sym2 = sym_check_expr_deps(prop->visible.expr);
|
|
||||||
if (sym2)
|
|
||||||
goto out;
|
|
||||||
if (prop->type != P_DEFAULT || sym_is_choice(sym))
|
|
||||||
continue;
|
|
||||||
sym2 = sym_check_expr_deps(prop->expr);
|
|
||||||
if (sym2)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
if (sym2)
|
|
||||||
fprintf(stderr, " -> %s%s", sym->name, sym2 == sym? "\n": "");
|
|
||||||
sym->flags &= ~SYMBOL_CHECK;
|
sym->flags &= ~SYMBOL_CHECK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sym2) {
|
||||||
|
fprintf(stderr, " -> %s", sym->name ? sym->name : "<choice>");
|
||||||
|
if (sym2 == sym) {
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
zconfnerrs++;
|
||||||
|
sym2 = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return sym2;
|
return sym2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -904,7 +960,7 @@ void prop_add_env(const char *env)
|
||||||
}
|
}
|
||||||
|
|
||||||
prop = prop_alloc(P_ENV, sym);
|
prop = prop_alloc(P_ENV, sym);
|
||||||
prop->expr = expr_alloc_symbol(sym_lookup(env, 1));
|
prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
|
||||||
|
|
||||||
sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
|
sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
|
||||||
sym_env_list->right.sym = sym;
|
sym_env_list->right.sym = sym;
|
||||||
|
|
|
@ -446,16 +446,16 @@ union yyalloc
|
||||||
/* YYFINAL -- State number of the termination state. */
|
/* YYFINAL -- State number of the termination state. */
|
||||||
#define YYFINAL 3
|
#define YYFINAL 3
|
||||||
/* YYLAST -- Last index in YYTABLE. */
|
/* YYLAST -- Last index in YYTABLE. */
|
||||||
#define YYLAST 258
|
#define YYLAST 259
|
||||||
|
|
||||||
/* YYNTOKENS -- Number of terminals. */
|
/* YYNTOKENS -- Number of terminals. */
|
||||||
#define YYNTOKENS 35
|
#define YYNTOKENS 35
|
||||||
/* YYNNTS -- Number of nonterminals. */
|
/* YYNNTS -- Number of nonterminals. */
|
||||||
#define YYNNTS 45
|
#define YYNNTS 46
|
||||||
/* YYNRULES -- Number of rules. */
|
/* YYNRULES -- Number of rules. */
|
||||||
#define YYNRULES 108
|
#define YYNRULES 110
|
||||||
/* YYNRULES -- Number of states. */
|
/* YYNRULES -- Number of states. */
|
||||||
#define YYNSTATES 178
|
#define YYNSTATES 180
|
||||||
|
|
||||||
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
||||||
#define YYUNDEFTOK 2
|
#define YYUNDEFTOK 2
|
||||||
|
@ -507,13 +507,14 @@ static const yytype_uint16 yyprhs[] =
|
||||||
28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
|
28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
|
||||||
53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
|
53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
|
||||||
81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
|
81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
|
||||||
112, 117, 122, 128, 132, 133, 137, 138, 141, 144,
|
112, 117, 122, 128, 132, 133, 137, 138, 141, 145,
|
||||||
147, 149, 153, 154, 157, 160, 163, 166, 169, 174,
|
148, 150, 154, 155, 158, 161, 164, 167, 170, 175,
|
||||||
178, 181, 186, 187, 190, 194, 196, 200, 201, 204,
|
179, 182, 187, 188, 191, 195, 197, 201, 202, 205,
|
||||||
207, 210, 214, 217, 219, 223, 224, 227, 230, 233,
|
208, 211, 215, 218, 220, 224, 225, 228, 231, 234,
|
||||||
237, 241, 244, 247, 250, 251, 254, 257, 260, 265,
|
238, 242, 245, 248, 251, 252, 255, 258, 261, 266,
|
||||||
266, 269, 271, 273, 276, 279, 282, 284, 287, 288,
|
267, 270, 272, 274, 277, 280, 283, 285, 288, 289,
|
||||||
291, 293, 297, 301, 305, 308, 312, 316, 318
|
292, 294, 298, 302, 306, 309, 313, 317, 319, 321,
|
||||||
|
322
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
||||||
|
@ -533,24 +534,25 @@ static const yytype_int8 yyrhs[] =
|
||||||
30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
|
30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
|
||||||
30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
|
30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
|
||||||
30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
|
30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
|
||||||
-1, 7, 30, -1, 50, 54, -1, 75, -1, 51,
|
-1, 7, 80, 30, -1, 50, 54, -1, 75, -1,
|
||||||
56, 52, -1, -1, 54, 55, -1, 54, 72, -1,
|
51, 56, 52, -1, -1, 54, 55, -1, 54, 72,
|
||||||
54, 70, -1, 54, 30, -1, 54, 40, -1, 18,
|
-1, 54, 70, -1, 54, 30, -1, 54, 40, -1,
|
||||||
74, 77, 30, -1, 19, 73, 30, -1, 17, 30,
|
18, 74, 77, 30, -1, 19, 73, 30, -1, 17,
|
||||||
-1, 20, 25, 77, 30, -1, -1, 56, 39, -1,
|
30, -1, 20, 25, 77, 30, -1, -1, 56, 39,
|
||||||
14, 78, 76, -1, 75, -1, 57, 60, 58, -1,
|
-1, 14, 78, 76, -1, 75, -1, 57, 60, 58,
|
||||||
-1, 60, 39, -1, 60, 64, -1, 60, 53, -1,
|
-1, -1, 60, 39, -1, 60, 64, -1, 60, 53,
|
||||||
4, 74, 30, -1, 61, 71, -1, 75, -1, 62,
|
-1, 4, 74, 30, -1, 61, 71, -1, 75, -1,
|
||||||
65, 63, -1, -1, 65, 39, -1, 65, 64, -1,
|
62, 65, 63, -1, -1, 65, 39, -1, 65, 64,
|
||||||
65, 53, -1, 6, 74, 30, -1, 9, 74, 30,
|
-1, 65, 53, -1, 6, 74, 30, -1, 9, 74,
|
||||||
-1, 67, 71, -1, 12, 30, -1, 69, 13, -1,
|
30, -1, 67, 71, -1, 12, 30, -1, 69, 13,
|
||||||
-1, 71, 72, -1, 71, 30, -1, 71, 40, -1,
|
-1, -1, 71, 72, -1, 71, 30, -1, 71, 40,
|
||||||
16, 24, 78, 30, -1, -1, 74, 77, -1, 25,
|
-1, 16, 24, 78, 30, -1, -1, 74, 77, -1,
|
||||||
-1, 26, -1, 5, 30, -1, 8, 30, -1, 15,
|
25, -1, 26, -1, 5, 30, -1, 8, 30, -1,
|
||||||
30, -1, 30, -1, 76, 30, -1, -1, 14, 78,
|
15, 30, -1, 30, -1, 76, 30, -1, -1, 14,
|
||||||
-1, 79, -1, 79, 33, 79, -1, 79, 27, 79,
|
78, -1, 79, -1, 79, 33, 79, -1, 79, 27,
|
||||||
-1, 29, 78, 28, -1, 34, 78, -1, 78, 31,
|
79, -1, 29, 78, 28, -1, 34, 78, -1, 78,
|
||||||
78, -1, 78, 32, 78, -1, 25, -1, 26, -1
|
31, 78, -1, 78, 32, 78, -1, 25, -1, 26,
|
||||||
|
-1, -1, 25, -1
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||||
|
@ -566,7 +568,8 @@ static const yytype_uint16 yyrline[] =
|
||||||
339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
|
339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
|
||||||
382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
|
382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
|
||||||
426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
|
426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
|
||||||
449, 450, 451, 452, 453, 454, 455, 458, 459
|
449, 450, 451, 452, 453, 454, 455, 458, 459, 462,
|
||||||
|
463
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -590,7 +593,8 @@ static const char *const yytname[] =
|
||||||
"if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
|
"if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
|
||||||
"menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
|
"menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
|
||||||
"comment_stmt", "help_start", "help", "depends_list", "depends",
|
"comment_stmt", "help_start", "help", "depends_list", "depends",
|
||||||
"prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0
|
"prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
|
||||||
|
"word_opt", 0
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -619,7 +623,8 @@ static const yytype_uint8 yyr1[] =
|
||||||
60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
|
60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
|
||||||
67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
|
67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
|
||||||
73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
|
73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
|
||||||
78, 78, 78, 78, 78, 78, 78, 79, 79
|
78, 78, 78, 78, 78, 78, 78, 79, 79, 80,
|
||||||
|
80
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
||||||
|
@ -629,13 +634,14 @@ static const yytype_uint8 yyr2[] =
|
||||||
4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
|
4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
|
1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
|
||||||
2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
|
2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
|
||||||
4, 4, 5, 3, 0, 3, 0, 2, 2, 2,
|
4, 4, 5, 3, 0, 3, 0, 2, 3, 2,
|
||||||
1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
|
1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
|
||||||
2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
|
2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
|
||||||
2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
|
2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
|
||||||
3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
|
3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
|
||||||
2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
|
2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
|
||||||
1, 3, 3, 3, 2, 3, 3, 1, 1
|
1, 3, 3, 3, 2, 3, 3, 1, 1, 0,
|
||||||
|
1
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
|
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
|
||||||
|
@ -643,69 +649,69 @@ static const yytype_uint8 yyr2[] =
|
||||||
means the default is an error. */
|
means the default is an error. */
|
||||||
static const yytype_uint8 yydefact[] =
|
static const yytype_uint8 yydefact[] =
|
||||||
{
|
{
|
||||||
3, 0, 0, 1, 0, 0, 0, 0, 0, 0,
|
3, 0, 0, 1, 0, 0, 0, 0, 0, 109,
|
||||||
0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
|
0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
|
||||||
18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
|
18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
|
||||||
23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
|
23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
|
||||||
84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
|
84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
|
||||||
48, 94, 0, 0, 0, 107, 108, 0, 0, 0,
|
110, 0, 94, 0, 0, 0, 107, 108, 0, 0,
|
||||||
100, 95, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 100, 95, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 96, 7, 71, 79, 80, 27, 29, 0,
|
0, 0, 0, 96, 7, 71, 79, 48, 80, 27,
|
||||||
104, 0, 0, 64, 0, 0, 9, 10, 0, 0,
|
29, 0, 104, 0, 0, 64, 0, 0, 9, 10,
|
||||||
0, 0, 89, 0, 0, 0, 44, 0, 37, 36,
|
0, 0, 0, 0, 89, 0, 0, 0, 44, 0,
|
||||||
32, 33, 0, 35, 34, 0, 0, 89, 0, 56,
|
37, 36, 32, 33, 0, 35, 34, 0, 0, 89,
|
||||||
57, 53, 55, 54, 63, 51, 50, 68, 70, 66,
|
0, 56, 57, 53, 55, 54, 63, 51, 50, 68,
|
||||||
69, 65, 86, 87, 85, 76, 78, 74, 77, 73,
|
70, 66, 69, 65, 86, 87, 85, 76, 78, 74,
|
||||||
97, 103, 105, 106, 102, 101, 26, 82, 0, 98,
|
77, 73, 97, 103, 105, 106, 102, 101, 26, 82,
|
||||||
0, 98, 98, 98, 0, 0, 0, 83, 60, 98,
|
0, 98, 0, 98, 98, 98, 0, 0, 0, 83,
|
||||||
0, 98, 0, 0, 0, 38, 90, 0, 0, 98,
|
60, 98, 0, 98, 0, 0, 0, 38, 90, 0,
|
||||||
46, 43, 25, 0, 59, 0, 88, 99, 39, 40,
|
0, 98, 46, 43, 25, 0, 59, 0, 88, 99,
|
||||||
41, 0, 0, 45, 58, 61, 42, 47
|
39, 40, 41, 0, 0, 45, 58, 61, 42, 47
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFGOTO[NTERM-NUM]. */
|
/* YYDEFGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int16 yydefgoto[] =
|
static const yytype_int16 yydefgoto[] =
|
||||||
{
|
{
|
||||||
-1, 1, 2, 25, 26, 99, 27, 28, 29, 30,
|
-1, 1, 2, 25, 26, 101, 27, 28, 29, 30,
|
||||||
64, 100, 101, 145, 173, 31, 32, 115, 33, 66,
|
65, 102, 103, 147, 175, 31, 32, 117, 33, 67,
|
||||||
111, 67, 34, 119, 35, 68, 36, 37, 127, 38,
|
113, 68, 34, 121, 35, 69, 36, 37, 129, 38,
|
||||||
70, 39, 40, 41, 102, 103, 69, 104, 140, 141,
|
71, 39, 40, 41, 104, 105, 70, 106, 142, 143,
|
||||||
42, 73, 154, 59, 60
|
42, 74, 156, 60, 61, 51
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
||||||
STATE-NUM. */
|
STATE-NUM. */
|
||||||
#define YYPACT_NINF -78
|
#define YYPACT_NINF -80
|
||||||
static const yytype_int16 yypact[] =
|
static const yytype_int16 yypact[] =
|
||||||
{
|
{
|
||||||
-78, 33, 130, -78, -28, 73, 73, 7, 73, 36,
|
-80, 2, 132, -80, -13, -1, -1, -2, -1, 9,
|
||||||
41, 73, 26, 52, -4, 58, -78, -78, -78, -78,
|
33, -1, 27, 40, -3, 38, -80, -80, -80, -80,
|
||||||
-78, -78, -78, 90, -78, 94, -78, -78, -78, -78,
|
-80, -80, -80, 71, -80, 77, -80, -80, -80, -80,
|
||||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
|
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
|
||||||
-78, -78, -78, -78, -78, -78, 74, 85, -78, 96,
|
-80, -80, -80, -80, -80, -80, 57, 61, -80, 63,
|
||||||
-78, -78, 131, 134, 147, -78, -78, -4, -4, 193,
|
-80, 76, -80, 87, 101, 133, -80, -80, -3, -3,
|
||||||
-10, -78, 162, 164, 38, 102, 64, 148, 5, 192,
|
195, -6, -80, 136, 149, 39, 104, 65, 150, 5,
|
||||||
5, 165, -78, 174, -78, -78, -78, -78, -78, 65,
|
194, 5, 167, -80, 176, -80, -80, -80, -80, -80,
|
||||||
-78, -4, -4, 174, 103, 103, -78, -78, 175, 185,
|
-80, 68, -80, -3, -3, 176, 72, 72, -80, -80,
|
||||||
197, 73, 73, -4, 194, 103, -78, 231, -78, -78,
|
177, 187, 78, -1, -1, -3, 196, 72, -80, 222,
|
||||||
-78, -78, 220, -78, -78, 204, 73, 73, 210, -78,
|
-80, -80, -80, -80, 221, -80, -80, 205, -1, -1,
|
||||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
|
211, -80, -80, -80, -80, -80, -80, -80, -80, -80,
|
||||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
|
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
|
||||||
-78, -78, 205, -78, -78, -78, -78, -78, -4, 222,
|
-80, -80, -80, -80, 206, -80, -80, -80, -80, -80,
|
||||||
208, 222, 195, 222, 103, 2, 209, -78, -78, 222,
|
-3, 223, 209, 223, 197, 223, 72, 7, 210, -80,
|
||||||
211, 222, 199, -4, 212, -78, -78, 213, 214, 222,
|
-80, 223, 212, 223, 201, -3, 213, -80, -80, 214,
|
||||||
207, -78, -78, 215, -78, 216, -78, 111, -78, -78,
|
215, 223, 208, -80, -80, 216, -80, 217, -80, 113,
|
||||||
-78, 217, 73, -78, -78, -78, -78, -78
|
-80, -80, -80, 218, -1, -80, -80, -80, -80, -80
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYPGOTO[NTERM-NUM]. */
|
/* YYPGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int16 yypgoto[] =
|
static const yytype_int16 yypgoto[] =
|
||||||
{
|
{
|
||||||
-78, -78, -78, -78, 121, -35, -78, -78, -78, -78,
|
-80, -80, -80, -80, 122, -34, -80, -80, -80, -80,
|
||||||
219, -78, -78, -78, -78, -78, -78, -78, -44, -78,
|
220, -80, -80, -80, -80, -80, -80, -80, 59, -80,
|
||||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -6,
|
-80, -80, -80, -80, -80, -80, -80, -80, -80, 125,
|
||||||
-78, -78, -78, -78, -78, 183, 218, 21, 143, -5,
|
-80, -80, -80, -80, -80, 183, 219, 22, 142, -5,
|
||||||
146, 196, 69, -53, -77
|
147, 192, 69, -54, -79, -80
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
|
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
|
||||||
|
@ -715,62 +721,62 @@ static const yytype_int16 yypgoto[] =
|
||||||
#define YYTABLE_NINF -82
|
#define YYTABLE_NINF -82
|
||||||
static const yytype_int16 yytable[] =
|
static const yytype_int16 yytable[] =
|
||||||
{
|
{
|
||||||
46, 47, 43, 49, 79, 80, 52, 134, 135, 6,
|
46, 47, 3, 49, 81, 82, 53, 136, 137, 6,
|
||||||
7, 8, 9, 10, 11, 12, 13, 84, 144, 14,
|
7, 8, 9, 10, 11, 12, 13, 43, 146, 14,
|
||||||
15, 55, 56, 85, 118, 57, 126, 160, 132, 133,
|
15, 86, 56, 57, 44, 45, 58, 87, 48, 134,
|
||||||
58, 110, 161, 3, 123, 24, 123, 48, -28, 88,
|
135, 59, 162, 112, 50, 24, 125, 163, 125, -28,
|
||||||
142, -28, -28, -28, -28, -28, -28, -28, -28, -28,
|
90, 144, -28, -28, -28, -28, -28, -28, -28, -28,
|
||||||
89, 53, -28, -28, 90, -28, 91, 92, 93, 94,
|
-28, 91, 54, -28, -28, 92, -28, 93, 94, 95,
|
||||||
95, 96, 120, 97, 128, 88, 50, 159, 98, -49,
|
96, 97, 98, 52, 99, 55, 90, 161, 62, 100,
|
||||||
-49, 51, -49, -49, -49, -49, 89, 54, -49, -49,
|
-49, -49, 63, -49, -49, -49, -49, 91, 64, -49,
|
||||||
90, 105, 106, 107, 108, 152, 139, 113, 61, 97,
|
-49, 92, 107, 108, 109, 110, 154, 73, 141, 115,
|
||||||
124, 62, 124, 131, 109, 63, 81, 82, 44, 45,
|
99, 75, 126, 76, 126, 111, 133, 56, 57, 83,
|
||||||
167, 149, -30, 88, 72, -30, -30, -30, -30, -30,
|
84, 169, 140, 151, -30, 90, 77, -30, -30, -30,
|
||||||
-30, -30, -30, -30, 89, 74, -30, -30, 90, -30,
|
-30, -30, -30, -30, -30, -30, 91, 78, -30, -30,
|
||||||
91, 92, 93, 94, 95, 96, 75, 97, 55, 56,
|
92, -30, 93, 94, 95, 96, 97, 98, 120, 99,
|
||||||
-2, 4, 98, 5, 6, 7, 8, 9, 10, 11,
|
128, 79, -2, 4, 100, 5, 6, 7, 8, 9,
|
||||||
12, 13, 81, 82, 14, 15, 16, 17, 18, 19,
|
10, 11, 12, 13, 83, 84, 14, 15, 16, 17,
|
||||||
20, 21, 22, 7, 8, 23, 10, 11, 12, 13,
|
18, 19, 20, 21, 22, 7, 8, 23, 10, 11,
|
||||||
24, 76, 14, 15, 77, -81, 88, 177, -81, -81,
|
12, 13, 24, 80, 14, 15, 88, -81, 90, 179,
|
||||||
-81, -81, -81, -81, -81, -81, -81, 78, 24, -81,
|
-81, -81, -81, -81, -81, -81, -81, -81, -81, 89,
|
||||||
-81, 90, -81, -81, -81, -81, -81, -81, 114, 117,
|
24, -81, -81, 92, -81, -81, -81, -81, -81, -81,
|
||||||
97, 125, 86, 88, 87, 122, -72, -72, -72, -72,
|
116, 119, 99, 127, 122, 90, 130, 124, -72, -72,
|
||||||
-72, -72, -72, -72, 130, 136, -72, -72, 90, 153,
|
-72, -72, -72, -72, -72, -72, 132, 138, -72, -72,
|
||||||
156, 157, 158, 116, 121, 137, 129, 97, 163, 143,
|
92, 155, 158, 159, 160, 118, 123, 139, 131, 99,
|
||||||
165, 138, 122, 72, 81, 82, 81, 82, 171, 166,
|
165, 145, 167, 148, 124, 73, 83, 84, 83, 84,
|
||||||
81, 82, 146, 147, 148, 151, 153, 82, 155, 162,
|
173, 168, 83, 84, 149, 150, 153, 155, 84, 157,
|
||||||
172, 164, 168, 169, 170, 174, 175, 176, 65, 112,
|
164, 174, 166, 170, 171, 172, 176, 177, 178, 66,
|
||||||
150, 0, 0, 0, 0, 83, 0, 0, 71
|
114, 152, 85, 0, 0, 0, 0, 0, 0, 72
|
||||||
};
|
};
|
||||||
|
|
||||||
static const yytype_int16 yycheck[] =
|
static const yytype_int16 yycheck[] =
|
||||||
{
|
{
|
||||||
5, 6, 30, 8, 57, 58, 11, 84, 85, 4,
|
5, 6, 0, 8, 58, 59, 11, 86, 87, 4,
|
||||||
5, 6, 7, 8, 9, 10, 11, 27, 95, 14,
|
5, 6, 7, 8, 9, 10, 11, 30, 97, 14,
|
||||||
15, 25, 26, 33, 68, 29, 70, 25, 81, 82,
|
15, 27, 25, 26, 25, 26, 29, 33, 30, 83,
|
||||||
34, 66, 30, 0, 69, 30, 71, 30, 0, 1,
|
84, 34, 25, 67, 25, 30, 70, 30, 72, 0,
|
||||||
93, 3, 4, 5, 6, 7, 8, 9, 10, 11,
|
1, 95, 3, 4, 5, 6, 7, 8, 9, 10,
|
||||||
12, 25, 14, 15, 16, 17, 18, 19, 20, 21,
|
11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
|
||||||
22, 23, 68, 25, 70, 1, 30, 144, 30, 5,
|
21, 22, 23, 30, 25, 25, 1, 146, 30, 30,
|
||||||
6, 30, 8, 9, 10, 11, 12, 25, 14, 15,
|
5, 6, 1, 8, 9, 10, 11, 12, 1, 14,
|
||||||
16, 17, 18, 19, 20, 138, 91, 66, 30, 25,
|
15, 16, 17, 18, 19, 20, 140, 30, 93, 67,
|
||||||
69, 1, 71, 28, 30, 1, 31, 32, 25, 26,
|
25, 30, 70, 30, 72, 30, 28, 25, 26, 31,
|
||||||
153, 106, 0, 1, 30, 3, 4, 5, 6, 7,
|
32, 155, 24, 108, 0, 1, 30, 3, 4, 5,
|
||||||
8, 9, 10, 11, 12, 30, 14, 15, 16, 17,
|
6, 7, 8, 9, 10, 11, 12, 30, 14, 15,
|
||||||
18, 19, 20, 21, 22, 23, 30, 25, 25, 26,
|
16, 17, 18, 19, 20, 21, 22, 23, 69, 25,
|
||||||
0, 1, 30, 3, 4, 5, 6, 7, 8, 9,
|
71, 30, 0, 1, 30, 3, 4, 5, 6, 7,
|
||||||
10, 11, 31, 32, 14, 15, 16, 17, 18, 19,
|
8, 9, 10, 11, 31, 32, 14, 15, 16, 17,
|
||||||
20, 21, 22, 5, 6, 25, 8, 9, 10, 11,
|
18, 19, 20, 21, 22, 5, 6, 25, 8, 9,
|
||||||
30, 30, 14, 15, 30, 0, 1, 172, 3, 4,
|
10, 11, 30, 30, 14, 15, 30, 0, 1, 174,
|
||||||
5, 6, 7, 8, 9, 10, 11, 30, 30, 14,
|
3, 4, 5, 6, 7, 8, 9, 10, 11, 30,
|
||||||
15, 16, 17, 18, 19, 20, 21, 22, 67, 68,
|
30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
|
||||||
25, 70, 30, 1, 30, 30, 4, 5, 6, 7,
|
68, 69, 25, 71, 69, 1, 71, 30, 4, 5,
|
||||||
8, 9, 10, 11, 30, 30, 14, 15, 16, 14,
|
6, 7, 8, 9, 10, 11, 30, 30, 14, 15,
|
||||||
141, 142, 143, 67, 68, 30, 70, 25, 149, 25,
|
16, 14, 143, 144, 145, 68, 69, 30, 71, 25,
|
||||||
151, 24, 30, 30, 31, 32, 31, 32, 159, 30,
|
151, 25, 153, 1, 30, 30, 31, 32, 31, 32,
|
||||||
31, 32, 1, 13, 30, 25, 14, 32, 30, 30,
|
161, 30, 31, 32, 13, 30, 25, 14, 32, 30,
|
||||||
33, 30, 30, 30, 30, 30, 30, 30, 29, 66,
|
30, 33, 30, 30, 30, 30, 30, 30, 30, 29,
|
||||||
107, -1, -1, -1, -1, 59, -1, -1, 40
|
67, 109, 60, -1, -1, -1, -1, -1, -1, 40
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
||||||
|
@ -782,19 +788,19 @@ static const yytype_uint8 yystos[] =
|
||||||
20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
|
20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
|
||||||
44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
|
44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
|
||||||
67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
|
67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
|
||||||
30, 30, 74, 25, 25, 25, 26, 29, 34, 78,
|
25, 80, 30, 74, 25, 25, 25, 26, 29, 34,
|
||||||
79, 30, 1, 1, 45, 45, 54, 56, 60, 71,
|
78, 79, 30, 1, 1, 45, 45, 54, 56, 60,
|
||||||
65, 71, 30, 76, 30, 30, 30, 30, 30, 78,
|
71, 65, 71, 30, 76, 30, 30, 30, 30, 30,
|
||||||
78, 31, 32, 76, 27, 33, 30, 30, 1, 12,
|
30, 78, 78, 31, 32, 76, 27, 33, 30, 30,
|
||||||
16, 18, 19, 20, 21, 22, 23, 25, 30, 40,
|
1, 12, 16, 18, 19, 20, 21, 22, 23, 25,
|
||||||
46, 47, 69, 70, 72, 17, 18, 19, 20, 30,
|
30, 40, 46, 47, 69, 70, 72, 17, 18, 19,
|
||||||
40, 55, 70, 72, 39, 52, 75, 39, 53, 58,
|
20, 30, 40, 55, 70, 72, 39, 52, 75, 39,
|
||||||
64, 75, 30, 40, 72, 39, 53, 63, 64, 75,
|
53, 58, 64, 75, 30, 40, 72, 39, 53, 63,
|
||||||
30, 28, 78, 78, 79, 79, 30, 30, 24, 74,
|
64, 75, 30, 28, 78, 78, 79, 79, 30, 30,
|
||||||
73, 74, 78, 25, 79, 48, 1, 13, 30, 74,
|
24, 74, 73, 74, 78, 25, 79, 48, 1, 13,
|
||||||
73, 25, 78, 14, 77, 30, 77, 77, 77, 79,
|
30, 74, 73, 25, 78, 14, 77, 30, 77, 77,
|
||||||
25, 30, 30, 77, 30, 77, 30, 78, 30, 30,
|
77, 79, 25, 30, 30, 77, 30, 77, 30, 78,
|
||||||
30, 77, 33, 49, 30, 30, 30, 74
|
30, 30, 30, 77, 33, 49, 30, 30, 30, 74
|
||||||
};
|
};
|
||||||
|
|
||||||
#define yyerrok (yyerrstatus = 0)
|
#define yyerrok (yyerrstatus = 0)
|
||||||
|
@ -1781,8 +1787,8 @@ yyreduce:
|
||||||
case 48:
|
case 48:
|
||||||
|
|
||||||
{
|
{
|
||||||
struct symbol *sym = sym_lookup(NULL, 0);
|
struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
|
||||||
sym->flags |= SYMBOL_CHOICE;
|
sym->flags |= SYMBOL_AUTO;
|
||||||
menu_add_entry(sym);
|
menu_add_entry(sym);
|
||||||
menu_add_expr(P_CHOICE, NULL, NULL);
|
menu_add_expr(P_CHOICE, NULL, NULL);
|
||||||
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
|
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
|
||||||
|
@ -2014,7 +2020,12 @@ yyreduce:
|
||||||
|
|
||||||
case 108:
|
case 108:
|
||||||
|
|
||||||
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 1); free((yyvsp[(1) - (1)].string)); ;}
|
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 109:
|
||||||
|
|
||||||
|
{ (yyval.string) = NULL; ;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ static struct menu *current_menu, *current_entry;
|
||||||
%type <id> end
|
%type <id> end
|
||||||
%type <id> option_name
|
%type <id> option_name
|
||||||
%type <menu> if_entry menu_entry choice_entry
|
%type <menu> if_entry menu_entry choice_entry
|
||||||
%type <string> symbol_option_arg
|
%type <string> symbol_option_arg word_opt
|
||||||
|
|
||||||
%destructor {
|
%destructor {
|
||||||
fprintf(stderr, "%s:%d: missing end statement for this entry\n",
|
fprintf(stderr, "%s:%d: missing end statement for this entry\n",
|
||||||
|
@ -239,10 +239,10 @@ symbol_option_arg:
|
||||||
|
|
||||||
/* choice entry */
|
/* choice entry */
|
||||||
|
|
||||||
choice: T_CHOICE T_EOL
|
choice: T_CHOICE word_opt T_EOL
|
||||||
{
|
{
|
||||||
struct symbol *sym = sym_lookup(NULL, 0);
|
struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
|
||||||
sym->flags |= SYMBOL_CHOICE;
|
sym->flags |= SYMBOL_AUTO;
|
||||||
menu_add_entry(sym);
|
menu_add_entry(sym);
|
||||||
menu_add_expr(P_CHOICE, NULL, NULL);
|
menu_add_expr(P_CHOICE, NULL, NULL);
|
||||||
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
|
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
|
||||||
|
@ -456,9 +456,12 @@ expr: symbol { $$ = expr_alloc_symbol($1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
|
symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
|
||||||
| T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); }
|
| T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
word_opt: /* empty */ { $$ = NULL; }
|
||||||
|
| T_WORD
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
void conf_parse(const char *name)
|
void conf_parse(const char *name)
|
||||||
|
|
Loading…
Reference in a new issue