diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-08-05 01:52:39 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-08-05 01:52:39 +0000 |
commit | fcf8c55eb4fbf21a5351afbf29e7d2c9a8b9835d (patch) | |
tree | c5cde3f43a81acd91425c7c4bd8054a90d07c7bf | |
parent | 5df743a806dc0a3fcbb998d6c7a64e9fa54b2fce (diff) |
Merge/rework config system per the latest from linux-2.6.0-test2
-Erik
-rw-r--r-- | extra/config/conf.c | 226 | ||||
-rw-r--r-- | extra/config/confdata.c | 255 | ||||
-rw-r--r-- | extra/config/expr.c | 37 | ||||
-rw-r--r-- | extra/config/expr.h | 82 | ||||
-rw-r--r-- | extra/config/lex.zconf.c_shipped | 2978 | ||||
-rw-r--r-- | extra/config/lkc.h | 19 | ||||
-rw-r--r-- | extra/config/lkc_proto.h | 9 | ||||
-rw-r--r-- | extra/config/mconf.c | 48 | ||||
-rw-r--r-- | extra/config/menu.c | 194 | ||||
-rw-r--r-- | extra/config/symbol.c | 518 | ||||
-rw-r--r-- | extra/config/zconf.l | 58 | ||||
-rw-r--r-- | extra/config/zconf.tab.c_shipped | 1346 | ||||
-rw-r--r-- | extra/config/zconf.y | 232 |
13 files changed, 3449 insertions, 2553 deletions
diff --git a/extra/config/conf.c b/extra/config/conf.c index 6bc5de943..20ea2c901 100644 --- a/extra/config/conf.c +++ b/extra/config/conf.c @@ -35,50 +35,12 @@ static struct menu *rootEntry; static char nohelp_text[] = "Sorry, no help available for this option yet.\n"; -#if 0 -static void printc(int ch) -{ - static int sep = 0; - - if (!sep) { - putchar('['); - sep = 1; - } else if (ch) - putchar('/'); - if (!ch) { - putchar(']'); - putchar(' '); - sep = 0; - } else - putchar(ch); -} -#endif - -static void printo(const char *o) -{ - static int sep = 0; - - if (!sep) { - putchar('('); - sep = 1; - } else if (o) { - putchar(','); - putchar(' '); - } - if (!o) { - putchar(')'); - putchar(' '); - sep = 0; - } else - printf("%s", o); -} - static void strip(char *str) { char *p = str; int l; - while ((isspace((int)*p))) + while ((isspace(*p))) p++; l = strlen(p); if (p != str) @@ -86,10 +48,20 @@ static void strip(char *str) if (!l) return; p = str + l - 1; - while ((isspace((int)*p))) + while ((isspace(*p))) *p-- = 0; } +static void check_stdin(void) +{ + if (!valid_stdin && input_mode == ask_silent) { + printf("aborted!\n\n"); + printf("Console input/output is redirected. "); + printf("Run 'make oldconfig' to update configuration.\n\n"); + exit(1); + } +} + static void conf_askvalue(struct symbol *sym, const char *def) { enum symbol_type type = sym_get_type(sym); @@ -101,6 +73,13 @@ static void conf_askvalue(struct symbol *sym, const char *def) line[0] = '\n'; line[1] = 0; + if (!sym_is_changable(sym)) { + printf("%s\n", def); + line[0] = '\n'; + line[1] = 0; + return; + } + switch (input_mode) { case ask_new: case ask_silent: @@ -108,12 +87,7 @@ static void conf_askvalue(struct symbol *sym, const char *def) printf("%s\n", def); return; } - if (!valid_stdin && input_mode == ask_silent) { - printf("aborted!\n\n"); - printf("Console input/output is redirected. "); - printf("Run 'make oldconfig' to update configuration.\n\n"); - exit(1); - } + check_stdin(); case ask_all: fflush(stdout); fgets(line, 128, stdin); @@ -294,9 +268,8 @@ help: static int conf_choice(struct menu *menu) { struct symbol *sym, *def_sym; - struct menu *cmenu, *def_menu; - const char *help; - int type, len; + struct menu *child; + int type; bool is_new; sym = menu->sym; @@ -314,72 +287,111 @@ static int conf_choice(struct menu *menu) break; } } else { - sym->def = sym->curr; - if (S_TRI(sym->curr) == mod) { + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); return 0; + case yes: + break; } } while (1) { - printf("%*s%s ", indent - 1, "", menu_get_prompt(menu)); + int cnt, def; + + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); def_sym = sym_get_choice_value(sym); - def_menu = NULL; - for (cmenu = menu->list; cmenu; cmenu = cmenu->next) { - if (!menu_is_visible(cmenu)) + cnt = def = 0; + line[0] = '0'; + line[1] = 0; + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) continue; - printo(menu_get_prompt(cmenu)); - if (cmenu->sym == def_sym) - def_menu = cmenu; - } - printo(NULL); - if (def_menu) - printf("[%s] ", menu_get_prompt(def_menu)); - else { + if (!child->sym) { + printf("%*c %s\n", indent, '*', menu_get_prompt(child)); + continue; + } + cnt++; + if (child->sym == def_sym) { + def = cnt; + printf("%*c", indent, '>'); + } else + printf("%*c", indent, ' '); + printf(" %d. %s", cnt, menu_get_prompt(child)); + if (child->sym->name) + printf(" (%s)", child->sym->name); + if (!sym_has_value(child->sym)) + printf(" (NEW)"); printf("\n"); - return 1; } + printf("%*schoice", indent - 1, ""); + if (cnt == 1) { + printf("[1]: 1\n"); + goto conf_childs; + } + printf("[1-%d", cnt); + if (sym->help) + printf("?"); + printf("]: "); switch (input_mode) { case ask_new: case ask_silent: + if (!is_new) { + cnt = def; + printf("%d\n", cnt); + break; + } + check_stdin(); case ask_all: - conf_askvalue(sym, menu_get_prompt(def_menu)); + fflush(stdout); + fgets(line, 128, stdin); strip(line); + if (line[0] == '?') { + printf("\n%s\n", menu->sym->help ? + menu->sym->help : nohelp_text); + continue; + } + if (!line[0]) + cnt = def; + else if (isdigit(line[0])) + cnt = atoi(line); + else + continue; + break; + case set_random: + def = (random() % cnt) + 1; + case set_default: + case set_yes: + case set_mod: + case set_no: + cnt = def; + printf("%d\n", cnt); break; - default: - line[0] = 0; - printf("\n"); } - if (line[0] == '?' && !line[1]) { - help = nohelp_text; - if (menu->sym->help) - help = menu->sym->help; - printf("\n%s\n", help); - continue; + + conf_childs: + for (child = menu->list; child; child = child->next) { + if (!child->sym || !menu_is_visible(child)) + continue; + if (!--cnt) + break; } - if (line[0]) { - len = strlen(line); - line[len] = 0; - - def_menu = NULL; - for (cmenu = menu->list; cmenu; cmenu = cmenu->next) { - if (!cmenu->sym || !menu_is_visible(cmenu)) - continue; - if (!strncasecmp(line, menu_get_prompt(cmenu), len)) { - def_menu = cmenu; - break; - } - } + if (!child) + continue; + if (line[strlen(line) - 1] == '?') { + printf("\n%s\n", child->sym->help ? + child->sym->help : nohelp_text); + continue; } - if (def_menu) { - sym_set_choice_value(sym, def_menu->sym); - if (def_menu->list) { - indent += 2; - conf(def_menu->list); - indent -= 2; - } - return 1; + sym_set_choice_value(sym, child->sym); + if (child->list) { + indent += 2; + conf(child->list); + indent -= 2; } + return 1; } } @@ -420,7 +432,7 @@ static void conf(struct menu *menu) if (sym_is_choice(sym)) { conf_choice(menu); - if (S_TRI(sym->curr) != mod) + if (sym->curr.tri != mod) return; goto conf_childs; } @@ -454,29 +466,17 @@ static void check_conf(struct menu *menu) return; sym = menu->sym; - if (!sym) - goto conf_childs; - - if (sym_is_choice(sym)) { - if (!sym_has_value(sym)) { + if (sym) { + if (sym_is_changable(sym) && !sym_has_value(sym)) { if (!conf_cnt++) printf("*\n* Restart config...\n*\n"); rootEntry = menu_get_parent_menu(menu); conf(rootEntry); } - if (sym_get_tristate_value(sym) != mod) + if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod) return; - goto conf_childs; } - if (!sym_has_value(sym)) { - if (!conf_cnt++) - printf("*\n* Restart config...\n*\n"); - rootEntry = menu_get_parent_menu(menu); - conf(rootEntry); - } - -conf_childs: for (child = menu->list; child; child = child->next) check_conf(child); } @@ -536,8 +536,8 @@ int main(int ac, char **av) printf("***\n" "*** You have not yet configured uClibc!\n" "***\n" - "*** Please run some configurator (e.g. \"make oldconfig\"\n" - "*** or \"make menuconfig\").\n" + "*** Please run some configurator (e.g. \"make config\" or\n" + "*** \"make oldconfig\" or \"make menuconfig\").\n" "***\n"); exit(1); } diff --git a/extra/config/confdata.c b/extra/config/confdata.c index cb8a0e75d..694477fb6 100644 --- a/extra/config/confdata.c +++ b/extra/config/confdata.c @@ -1,11 +1,9 @@ /* * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> * Released under the terms of the GNU GPL v2.0. - * - * Allow 'n' as a symbol value. - * 2002-11-05 Petr Baudis <pasky@ucw.cz> */ +#include <sys/stat.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> @@ -38,7 +36,7 @@ static char *conf_expand_value(const char *in) strncat(res_value, in, src - in); src++; dst = name; - while (isalnum((int)*src) || *src == '_') + while (isalnum(*src) || *src == '_') *dst++ = *src++; *dst = 0; sym = sym_lookup(name, 0); @@ -53,7 +51,18 @@ static char *conf_expand_value(const char *in) char *conf_get_default_confname(void) { - return conf_expand_value(conf_defname); + struct stat buf; + static char fullname[4096+1]; + char *env, *name; + + name = conf_expand_value(conf_defname); + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + if (!stat(fullname, &buf)) + return fullname; + } + return name; } int conf_read(const char *name) @@ -68,12 +77,12 @@ int conf_read(const char *name) int i; if (name) { - in = fopen(name, "r"); + in = zconf_fopen(name); } else { const char **names = conf_confnames; while ((name = *names++)) { name = conf_expand_value(name); - in = fopen(name, "r"); + in = zconf_fopen(name); if (in) { printf("#\n" "# using defaults found in %s\n" @@ -93,44 +102,43 @@ int conf_read(const char *name) case S_INT: case S_HEX: case S_STRING: - if (S_VAL(sym->def)) - free(S_VAL(sym->def)); + if (sym->user.val) + free(sym->user.val); default: - S_VAL(sym->def) = NULL; - S_TRI(sym->def) = no; - ; + sym->user.val = NULL; + sym->user.tri = no; } } while (fgets(line, sizeof(line), in)) { lineno++; + sym = NULL; switch (line[0]) { - case '\n': - break; - case ' ': - break; case '#': - p = strchr(line, ' '); - if (!p) + if (line[1]!=' ') continue; - *p++ = 0; - p = strchr(p, ' '); + p = strchr(line + 2, ' '); if (!p) continue; *p++ = 0; if (strncmp(p, "is not set", 10)) continue; - sym = sym_lookup(line+2, 0); + sym = sym_find(line + 2); + if (!sym) { + fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 2); + break; + } switch (sym->type) { case S_BOOLEAN: case S_TRISTATE: - sym->def = symbol_no.curr; + sym->user.tri = no; sym->flags &= ~SYMBOL_NEW; break; default: ; } break; + case 'A' ... 'Z': p = strchr(line, '='); if (!p) @@ -145,24 +153,24 @@ int conf_read(const char *name) break; } switch (sym->type) { - case S_TRISTATE: + case S_TRISTATE: if (p[0] == 'm') { - S_TRI(sym->def) = mod; + sym->user.tri = mod; sym->flags &= ~SYMBOL_NEW; break; } case S_BOOLEAN: if (p[0] == 'y') { - S_TRI(sym->def) = yes; + sym->user.tri = yes; sym->flags &= ~SYMBOL_NEW; break; } if (p[0] == 'n') { - S_TRI(sym->def) = no; + sym->user.tri = no; sym->flags &= ~SYMBOL_NEW; break; } - break; + break; case S_STRING: if (*p++ != '"') break; @@ -173,48 +181,71 @@ int conf_read(const char *name) } memmove(p2, p2 + 1, strlen(p2)); } + if (!p2) { + fprintf(stderr, "%s:%d: invalid string found\n", name, lineno); + exit(1); + } case S_INT: case S_HEX: if (sym_string_valid(sym, p)) { - S_VAL(sym->def) = strdup(p); + sym->user.val = strdup(p); sym->flags &= ~SYMBOL_NEW; - } else - fprintf(stderr, "%s:%d:symbol value '%s' invalid for %s\n", name, lineno, p, sym->name); + } else { + fprintf(stderr, "%s:%d: symbol value '%s' invalid for %s\n", name, lineno, p, sym->name); + exit(1); + } break; default: ; } - if (sym_is_choice_value(sym)) { - prop = sym_get_choice_prop(sym); - switch (S_TRI(sym->def)) { - case mod: - if (S_TRI(prop->def->def) == yes) - /* warn? */; - break; - case yes: - if (S_TRI(prop->def->def) != no) - /* warn? */; - S_VAL(prop->def->def) = sym; - break; - case no: - break; - } - S_TRI(prop->def->def) = S_TRI(sym->def); - } + break; + case '\n': break; default: continue; } + if (sym && sym_is_choice_value(sym)) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + switch (sym->user.tri) { + case no: + break; + case mod: + if (cs->user.tri == yes) + /* warn? */; + break; + case yes: + if (cs->user.tri != no) + /* warn? */; + cs->user.val = sym; + break; + } + cs->user.tri = E_OR(cs->user.tri, sym->user.tri); + cs->flags &= ~SYMBOL_NEW; + } } fclose(in); for_all_symbols(i, sym) { + sym_calc_value(sym); + if (sym_has_value(sym) && !sym_is_choice_value(sym)) { + if (sym->visible == no) + sym->flags |= SYMBOL_NEW; + switch (sym->type) { + case S_STRING: + case S_INT: + case S_HEX: + if (!sym_string_within_range(sym, sym->user.val)) + sym->flags |= SYMBOL_NEW; + default: + break; + } + } if (!sym_is_choice(sym)) continue; prop = sym_get_choice_prop(sym); - for (e = prop->dep; e; e = e->left.expr) - sym->flags |= e->right.sym->flags & SYMBOL_NEW; - sym->flags &= ~SYMBOL_NEW; + for (e = prop->expr; e; e = e->left.expr) + if (e->right.sym->visible != no) + sym->flags |= e->right.sym->flags & SYMBOL_NEW; } sym_change_count = 1; @@ -227,36 +258,57 @@ int conf_write(const char *name) FILE *out, *out_h; struct symbol *sym; struct menu *menu; - char oldname[128]; + const char *basename; + char dirname[128], tmpname[128], newname[128]; int type, l; const char *str; - out = fopen(".tmpconfig", "w"); + dirname[0] = 0; + if (name && name[0]) { + char *slash = strrchr(name, '/'); + if (slash) { + int size = slash - name + 1; + memcpy(dirname, name, size); + dirname[size] = 0; + if (slash[1]) + basename = slash + 1; + else + basename = conf_def_filename; + } else + basename = name; + } else + basename = conf_def_filename; + + sprintf(newname, "%s.tmpconfig.%d", dirname, getpid()); + out = fopen(newname, "w"); if (!out) return 1; - out_h = fopen(".tmpconfig.h", "w"); - if (!out_h) - return 1; + out_h = NULL; + if (!name) { + out_h = fopen(".tmpconfig.h", "w"); + if (!out_h) + return 1; + } fprintf(out, "#\n" "# Automatically generated make config: don't edit\n" "#\n"); - fprintf(out_h, "/*\n" - " * Automatically generated C config: don't edit\n" - " */\n" - "#if !defined __FEATURES_H && !defined __need_uClibc_config_h\n" - "#error Never include <bits/uClibc_config.h> directly; use <features.h> instead.\n" - "#endif\n" - "#define AUTOCONF_INCLUDED\n\n" - "/*\n" - " * Version Number\n" - " */\n" - "#define __UCLIBC_MAJOR__ %s\n" - "#define __UCLIBC_MINOR__ %s\n" - "#define __UCLIBC_SUBLEVEL__ %s\n", - getenv("MAJOR_VERSION"), - getenv("MINOR_VERSION"), - getenv("SUBLEVEL") - ); + if (out_h) + fprintf(out_h, "/*\n" + " * Automatically generated C config: don't edit\n" + " */\n" + "#if !defined __FEATURES_H && !defined __need_uClibc_config_h\n" + "#error Never include <bits/uClibc_config.h> directly; use <features.h> instead\n" + "#endif\n" + "#define AUTOCONF_INCLUDED\n\n" + "/*\n" + " * Version Number\n" + " */\n" + "#define __UCLIBC_MAJOR__ %s\n" + "#define __UCLIBC_MINOR__ %s\n" + "#define __UCLIBC_SUBLEVEL__ %s\n", + getenv("MAJOR_VERSION"), + getenv("MINOR_VERSION"), + getenv("SUBLEVEL")); if (!sym_change_count) sym_clear_all_valid(); @@ -272,10 +324,11 @@ int conf_write(const char *name) "#\n" "# %s\n" "#\n", str); - fprintf(out_h, "\n" - "/*\n" - " * %s\n" - " */\n", str); + if (out_h) + fprintf(out_h, "\n" + "/*\n" + " * %s\n" + " */\n", str); } else if (!(sym->flags & SYMBOL_CHOICE)) { sym_calc_value(sym); if (!(sym->flags & SYMBOL_WRITE)) @@ -284,7 +337,7 @@ int conf_write(const char *name) type = sym->type; if (type == S_TRISTATE) { sym_calc_value(modules_sym); - if (S_TRI(modules_sym->curr) == no) + if (modules_sym->curr.tri == no) type = S_BOOLEAN; } switch (type) { @@ -293,15 +346,18 @@ int conf_write(const char *name) switch (sym_get_tristate_value(sym)) { case no: fprintf(out, "# %s is not set\n", sym->name); - fprintf(out_h, "#undef __%s__\n", sym->name); + if (out_h) + fprintf(out_h, "#undef %s\n", sym->name); break; case mod: fprintf(out, "%s=m\n", sym->name); - fprintf(out_h, "#define __%s__MODULE 1\n", sym->name); + if (out_h) + fprintf(out_h, "#define %s_MODULE 1\n", sym->name); break; case yes: fprintf(out, "%s=y\n", sym->name); - fprintf(out_h, "#define __%s__ 1\n", sym->name); + if (out_h) + fprintf(out_h, "#define __%s__ 1\n", sym->name); break; } break; @@ -309,34 +365,40 @@ int conf_write(const char *name) // fix me str = sym_get_string_value(sym); fprintf(out, "%s=\"", sym->name); - fprintf(out_h, "#define __%s__ \"", sym->name); + if (out_h) + fprintf(out_h, "#define __%s__ \"", sym->name); do { l = strcspn(str, "\"\\"); if (l) { fwrite(str, l, 1, out); - fwrite(str, l, 1, out_h); + if (out_h) + fwrite(str, l, 1, out_h); } str += l; while (*str == '\\' || *str == '"') { fprintf(out, "\\%c", *str); - fprintf(out_h, "\\%c", *str); + if (out_h) + fprintf(out_h, "\\%c", *str); str++; } } while (*str); fputs("\"\n", out); - fputs("\"\n", out_h); + if (out_h) + fputs("\"\n", out_h); break; case S_HEX: str = sym_get_string_value(sym); if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { fprintf(out, "%s=%s\n", sym->name, str); - fprintf(out_h, "#define __%s__ 0x%s\n", sym->name, str); + if (out_h) + fprintf(out_h, "#define __%s__ 0x%s\n", sym->name, str); break; } case S_INT: str = sym_get_string_value(sym); fprintf(out, "%s=%s\n", sym->name, str); - fprintf(out_h, "#define __%s__ %s\n", sym->name, str); + if (out_h) + fprintf(out_h, "#define __%s__ %s\n", sym->name, str); break; } } @@ -356,18 +418,19 @@ int conf_write(const char *name) } } fclose(out); - fclose(out_h); - - if (!name) { + if (out_h) { + fclose(out_h); rename(".tmpconfig.h", "include/bits/uClibc_config.h"); - name = conf_def_filename; file_write_dep(NULL); - } else - unlink(".tmpconfig.h"); - - sprintf(oldname, "%s.old", name); - rename(name, oldname); - if (rename(".tmpconfig", name)) + } + if (!name || basename != conf_def_filename) { + if (!name) + name = conf_def_filename; + sprintf(tmpname, "%s.old", name); + rename(name, tmpname); + } + sprintf(tmpname, "%s%s", dirname, basename); + if (rename(newname, tmpname)) return 1; sym_change_count = 0; diff --git a/extra/config/expr.c b/extra/config/expr.c index d1af2a581..3f15ae859 100644 --- a/extra/config/expr.c +++ b/extra/config/expr.c @@ -55,6 +55,13 @@ struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; } +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; +} + struct expr *expr_copy(struct expr *org) { struct expr *e; @@ -158,9 +165,22 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) { - if (!e1 || !e2 || e1->type != e2->type) + if (!e1 || !e2) return; - __expr_eliminate_eq(e1->type, ep1, ep2); + switch (e1->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e1->type, ep1, ep2); + default: + ; + } + if (e1->type != e2->type) switch (e2->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e2->type, ep1, ep2); + default: + ; + } e1 = expr_eliminate_yn(e1); e2 = expr_eliminate_yn(e2); } @@ -195,6 +215,7 @@ int expr_eq(struct expr *e1, struct expr *e2) trans_count = old_count; return res; case E_CHOICE: + case E_RANGE: case E_NONE: /* panic */; } @@ -897,6 +918,7 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb case E_SYMBOL: return expr_alloc_comp(type, e->left.sym, sym); case E_CHOICE: + case E_RANGE: case E_NONE: /* panic */; } @@ -914,7 +936,7 @@ tristate expr_calc_value(struct expr *e) switch (e->type) { case E_SYMBOL: sym_calc_value(e->left.sym); - return S_TRI(e->left.sym->curr); + return e->left.sym->curr.tri; case E_AND: val1 = expr_calc_value(e->left.expr); val2 = expr_calc_value(e->right.expr); @@ -1017,11 +1039,18 @@ void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, in expr_print(e->right.expr, fn, data, E_AND); break; case E_CHOICE: + fn(data, e->right.sym->name); if (e->left.expr) { - expr_print(e->left.expr, fn, data, E_CHOICE); fn(data, " ^ "); + expr_print(e->left.expr, fn, data, E_CHOICE); } + break; + case E_RANGE: + fn(data, "["); + fn(data, e->left.sym->name); + fn(data, " "); fn(data, e->right.sym->name); + fn(data, "]"); break; default: { diff --git a/extra/config/expr.h b/extra/config/expr.h index e96d03b5a..cc616f1f8 100644 --- a/extra/config/expr.h +++ b/extra/config/expr.h @@ -18,10 +18,6 @@ extern "C" { struct file { struct file *next; struct file *parent; -#ifdef CML1 - struct statement *stmt; - struct statement *last_stmt; -#endif char *name; int lineno; int flags; @@ -36,7 +32,7 @@ typedef enum tristate { } tristate; enum expr_type { - E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL + E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE }; union expr_data { @@ -45,18 +41,10 @@ union expr_data { }; struct expr { -#ifdef CML1 - int token; -#else enum expr_type type; -#endif union expr_data left, right; }; -#define E_TRI(ev) ((ev).tri) -#define E_EXPR(ev) ((ev).expr) -#define E_CALC(ev) (E_TRI(ev) = expr_calc_value(E_EXPR(ev))) - #define E_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2)) #define E_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2)) #define E_NOT(dep) (2-(dep)) @@ -66,12 +54,8 @@ struct expr_value { tristate tri; }; -#define S_VAL(sv) ((sv).value) -#define S_TRI(sv) ((sv).tri) -#define S_EQ(sv1, sv2) (S_VAL(sv1) == S_VAL(sv2) || !strcmp(S_VAL(sv1), S_VAL(sv2))) - struct symbol_value { - void *value; + void *val; tristate tri; }; @@ -83,31 +67,17 @@ struct symbol { struct symbol *next; char *name; char *help; -#ifdef CML1 - int type; -#else enum symbol_type type; -#endif - struct symbol_value curr, def; + struct symbol_value curr, user; tristate visible; int flags; struct property *prop; struct expr *dep, *dep2; - struct menu *menu; + struct expr_value rev_dep; }; #define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) -#ifdef CML1 -#define SYMBOL_UNKNOWN S_UNKNOWN -#define SYMBOL_BOOLEAN S_BOOLEAN -#define SYMBOL_TRISTATE S_TRISTATE -#define SYMBOL_INT S_INT -#define SYMBOL_HEX S_HEX -#define SYMBOL_STRING S_STRING -#define SYMBOL_OTHER S_OTHER -#endif - #define SYMBOL_YES 0x0001 #define SYMBOL_MOD 0x0002 #define SYMBOL_NO 0x0004 @@ -122,42 +92,38 @@ struct symbol { #define SYMBOL_CHANGED 0x0400 #define SYMBOL_NEW 0x0800 #define SYMBOL_AUTO 0x1000 +#define SYMBOL_CHECKED 0x2000 +#define SYMBOL_CHECK_DONE 0x4000 +#define SYMBOL_WARNED 0x8000 #define SYMBOL_MAXLENGTH 256 #define SYMBOL_HASHSIZE 257 #define SYMBOL_HASHMASK 0xff enum prop_type { - P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_ROOTMENU, P_DEFAULT, P_CHOICE + P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE }; struct property { struct property *next; struct symbol *sym; -#ifdef CML1 - int token; -#else enum prop_type type; -#endif const char *text; - struct symbol *def; struct expr_value visible; - struct expr *dep; - struct expr *dep2; + struct expr *expr; struct menu *menu; struct file *file; int lineno; -#ifdef CML1 - struct property *next_pos; -#endif }; #define for_all_properties(sym, st, tok) \ for (st = sym->prop; st; st = st->next) \ if (st->type == (tok)) -#define for_all_prompts(sym, st) for_all_properties(sym, st, P_PROMPT) #define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) #define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) +#define for_all_prompts(sym, st) \ + for (st = sym->prop; st; st = st->next) \ + if (st->text) struct menu { struct menu *next; @@ -166,12 +132,16 @@ struct menu { struct symbol *sym; struct property *prompt; struct expr *dep; + unsigned int flags; //char *help; struct file *file; int lineno; void *data; }; +#define MENU_CHANGED 0x0001 +#define MENU_ROOT 0x0002 + #ifndef SWIG extern struct file *file_list; @@ -181,18 +151,12 @@ struct file *lookup_file(const char *name); extern struct symbol symbol_yes, symbol_no, symbol_mod; extern struct symbol *modules_sym; extern int cdebug; -extern int print_type; struct expr *expr_alloc_symbol(struct symbol *sym); -#ifdef CML1 -struct expr *expr_alloc_one(int token, struct expr *ce); -struct expr *expr_alloc_two(int token, struct expr *e1, struct expr *e2); -struct expr *expr_alloc_comp(int token, struct symbol *s1, struct symbol *s2); -#else struct expr *expr_alloc_one(enum expr_type type, struct expr *ce); struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2); struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2); -#endif struct expr *expr_alloc_and(struct expr *e1, struct expr *e2); +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); struct expr *expr_copy(struct expr *org); void expr_free(struct expr *e); int expr_eq(struct expr *e1, struct expr *e2); @@ -212,17 +176,6 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb void expr_fprint(struct expr *e, FILE *out); void print_expr(int mask, struct expr *e, int prevtoken); -#ifdef CML1 -static inline int expr_is_yes(struct expr *e) -{ - return !e || (e->token == WORD && e->left.sym == &symbol_yes); -} - -static inline int expr_is_no(struct expr *e) -{ - return e && (e->token == WORD && e->left.sym == &symbol_no); -} -#else static inline int expr_is_yes(struct expr *e) { return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes); @@ -233,7 +186,6 @@ static inline int expr_is_no(struct expr *e) return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); } #endif -#endif #ifdef __cplusplus } diff --git a/extra/config/lex.zconf.c_shipped b/extra/config/lex.zconf.c_shipped index baad0d09e..22dda11f7 100644 --- a/extra/config/lex.zconf.c_shipped +++ b/extra/config/lex.zconf.c_shipped @@ -1,50 +1,84 @@ -#define yy_create_buffer zconf_create_buffer -#define yy_delete_buffer zconf_delete_buffer -#define yy_scan_buffer zconf_scan_buffer -#define yy_scan_string zconf_scan_string -#define yy_scan_bytes zconf_scan_bytes -#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 yyout zconfout -#define yyrestart zconfrestart -#define yytext zconftext -/* A lexical scanner generated by flex */ +#line 3 "lex.zconf.c" -/* Scanner skeleton version: - * $Header: /var/cvs/uClibc/extra/config/lex.zconf.c_shipped,v 1.2 2002/11/08 00:47:06 andersen Exp $ - */ +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 31 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific |