-rw-r--r-- | scripts/kconfig/Makefile | 110 | ||||
-rw-r--r-- | scripts/kconfig/Makefile.kernel | 44 | ||||
-rw-r--r-- | scripts/kconfig/conf.c | 7 | ||||
-rw-r--r-- | scripts/kconfig/confdata.c | 74 | ||||
-rw-r--r-- | scripts/kconfig/expr.h | 5 | ||||
-rw-r--r-- | scripts/kconfig/kconfig.i | 5 | ||||
-rw-r--r-- | scripts/kconfig/lkc.h | 5 | ||||
-rw-r--r-- | scripts/kconfig/mconf.c | 101 | ||||
-rw-r--r-- | scripts/kconfig/menu.c | 2 | ||||
-rw-r--r-- | scripts/kconfig/qconf.cc | 274 | ||||
-rw-r--r-- | scripts/kconfig/qconf.h | 59 | ||||
-rw-r--r-- | scripts/kconfig/symbol.c | 35 | ||||
-rw-r--r-- | scripts/kconfig/zconf.l | 72 | ||||
-rw-r--r-- | scripts/kconfig/zconf.y | 6 |
14 files changed, 542 insertions, 257 deletions
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 7e257be..5a0d7e5 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -1,5 +1,5 @@ -VERSION=1.2 +VERSION=1.3 CC=gcc CXX=g++ -CFLAGS=-O2 -Wall -g -fPIC +CFLAGS=-O0 -Wall -g -fPIC CXXFLAGS=$(CFLAGS) -I$(HOSTQTDIR)/include @@ -8,25 +8,9 @@ LXXFLAGS=$(LDFLAGS) -L$(HOSTQTDIR)/lib -Wl,-rpath,$(HOSTQTDIR)/lib LEX=flex +LFLAGS=-L YACC=bison -YFLAGS=-d -t #-v +YFLAGS=-l +#YFLAGS=-d -t -v -l ifndef HOSTQTDIR -ifeq ($(shell if [ -e /usr/share/qt ]; then echo foundit; fi),foundit) HOSTQTDIR=/usr/share/qt -else -ifeq ($(shell if [ -e /usr/lib/qt ]; then echo foundit; fi),foundit) -HOSTQTDIR=/usr/lib/qt -endif -endif -endif - -ifndef QTLIB -ifeq ($(shell if [ -e $(HOSTQTDIR)/lib/libqt-mt.so ]; then echo foundit; fi),foundit) -QTLIB=-lqt-mt -else -ifneq ($(shell if [ -e $(HOSTQTDIR)/lib/libqt.so ]; then echo foundit; fi),foundit) -$(warning Unable to locate libqt.so!) endif -QTLIB=-lqt -endif -endif - MOC=$(wildcard $(HOSTQTDIR)/bin/moc) @@ -37,8 +21,8 @@ mconf_SRC=mconf.c $(parse_SRC) qconf_SRC=qconf.cc -lkcc_SRC=cml1.y cml1.l help.l cml1.h expr1.c HDR=expr.h lkc.h lkc_proto.h qconf.h -OTHER=README lkc_spec lkc_overview Makefile.kernel convert-all prepare-all.diff fixup-all.diff \ +OTHER=README lkc-language.txt Makefile.kernel \ kconfig.i extconf.rb example -INST=zconf.y zconf.l confdata.c expr.c symbol.c menu.c conf.c mconf.c qconf.cc kconfig_load.c images.c $(parse_SRC) $(HDR) -INSTGEN=lex.zconf.c zconf.tab.c zconf.tab.h +INST=zconf.y zconf.l confdata.c expr.c symbol.c menu.c \ + conf.c mconf.c qconf.cc kconfig_load.c images.c $(HDR) +INSTGEN=lex.zconf.c zconf.tab.c @@ -52,3 +36,3 @@ endif -SRC=$(conf_SRC) $(mconf_SRC) $(qconf_SRC) $(lkcc_SRC) +SRC=$(conf_SRC) $(mconf_SRC) $(qconf_SRC) CSRC=$(filter %.c, $(SRC)) @@ -78,24 +62,10 @@ qconf_OBJ=$(filter %.o, \ $(qconf_SRC)))))) -lkcc_OBJ=$(filter %.o, \ - $(patsubst %.c,%.o, \ - $(patsubst %.y,%.tab.o, \ - $(patsubst %.l,lex.%.o, \ - $(lkcc_SRC))))) -OBJ=$(conf_OBJ) $(mconf_OBJ) $(qconf_OBJ) $(lkcc_OBJ) +OBJ=$(conf_OBJ) $(mconf_OBJ) $(qconf_OBJ) ifeq ($(MOC),) -all: lkcc conf mconf +all: conf mconf else -all: lkcc conf mconf qconf libkconfig.so +all: conf mconf qconf libkconfig.so endif -lex.help.c: help.l -lex.help.o: lex.help.c cml1.h expr.h -lex.cml1.c: cml1.l -lex.cml1.o: lex.cml1.c cml1.tab.h cml1.h expr.h -cml1.tab.c: cml1.y -cml1.tab.h: cml1.y -cml1.tab.o: cml1.tab.c cml1.h expr.h -expr1.o: expr1.c expr.h - lkc_deps := lkc.h lkc_proto.h lkc_defs.h expr.h @@ -130,9 +100,6 @@ qconf: else -qconf: $(qconf_OBJ) libkconfig.so - $(CXX) $(LXXFLAGS) $^ $(QTLIB) -o $@ +qconf: $(qconf_OBJ) + $(CXX) $(LXXFLAGS) $^ -lqt -o $@ endif -lkcc: $(lkcc_OBJ) - $(CC) $(LDFLAGS) $^ -o $@ - libkconfig.so: $(parse_OBJ) @@ -144,3 +111,4 @@ lkc_defs.h: lkc_proto.h clean: - rm -f $(OBJ) lkcc conf qconf mconf *.moc lex.* *.tab.? *.output + rm -f $(OBJ) conf qconf mconf *.moc lex.* *.tab.? *.output + rm -rf .ruby .python @@ -150,3 +118,3 @@ tgz: cp -ra Makefile $(sort $(SRC) $(HDR) $(OTHER) $(INST)) tmp/lkc-$(VERSION) - tar -cpvz -C tmp -f lkc-$(VERSION).tar.gz lkc-$(VERSION) + tar -cpvz -C tmp --exclude CVS -f lkc-$(VERSION).tar.gz lkc-$(VERSION) rm -rf tmp @@ -169,20 +137,11 @@ lex.%.c: %.l ifdef KERNELSRC -install: lkcc $(INSTGEN) - set -x; mkdir $(KERNELSRC)/scripts/kconfig; \ - cp $(sort $(INST)) $(KERNELSRC)/scripts/kconfig; \ +install: $(INSTGEN) + set -x; cp $(sort $(INST)) $(KERNELSRC)/scripts/kconfig; \ for f in $(INSTGEN); do cp $$f $(KERNELSRC)/scripts/kconfig/$${f}_shipped; done; \ - cp Makefile.kernel $(KERNELSRC)/scripts/kconfig/Makefile; \ - LKCSRC=$$PWD; export LKCSRC; \ - cd $(KERNELSRC); \ - patch -p0 -N < $$LKCSRC/prepare-all.diff; \ - sh $$LKCSRC/convert-all; \ - patch -p0 -N < $$LKCSRC/fixup-all.diff - -# cp Makefile $(KERNELSRC)/scripts/kconfig/Makefile; \ - -uninstall: - patch -p0 -N -R -d $(KERNELSRC) < prepare-all.diff; \ - cd $(KERNELSRC); \ - find -name "Kconfig*" | xargs rm; \ - rm -rf scripts/kconfig log.* + cp Makefile.kernel $(KERNELSRC)/scripts/kconfig/Makefile + +diff: $(INSTGEN) + for f in $(sort $(INST)); do diff -u $(KERNELSRC)/scripts/kconfig/$$f $$f; done; \ + for f in $(INSTGEN); do diff -u $(KERNELSRC)/scripts/kconfig/$${f}_shipped $$f; done; \ + diff -u $(KERNELSRC)/scripts/kconfig/Makefile Makefile.kernel else @@ -206,2 +165,17 @@ ruby: .ruby libkconfig.so .ruby/kconfig.so -.PHONY: all tgz clean ruby + +PYTHON_INCLUDE=$(shell python -c "import sys; print '-I'+sys.prefix+'/include/python'+sys.version[:3]") + +python: .python .python/kconfig.py .python/_kconfig.so + +.python: + mkdir .python + +.python/kconfig_wrap.c .python/kconfig.py: kconfig.i kconfig_load.c expr.h lkc_proto.h + swig -python -o .python/kconfig_wrap.c kconfig.i + +.python/_kconfig.so: .python/kconfig_wrap.c + cd .python; $(CC) $(CFLAGS) -shared kconfig_wrap.c -o _kconfig.so -I.. $(PYTHON_INCLUDE) + + +.PHONY: all tgz clean ruby python diff --git a/scripts/kconfig/Makefile.kernel b/scripts/kconfig/Makefile.kernel index beb4dcf..22724a7 100644 --- a/scripts/kconfig/Makefile.kernel +++ b/scripts/kconfig/Makefile.kernel @@ -25,10 +25,2 @@ include $(TOPDIR)/Rules.make -# QT needs some extra effort... -ifndef QTDIR -QTDIR := /usr/share/qt -endif - -# Executable to generate the .moc file -MOC=$(wildcard $(QTDIR)/bin/moc) - # generated files seem to need this to find local include files @@ -37,4 +29,4 @@ HOSTCFLAGS_zconf.tab.o := -I$(src) -HOSTLOADLIBES_qconf := -L$(QTDIR)/lib -Wl,-rpath,$(QTDIR)/lib -lqt -ldl -HOSTCXXFLAGS_qconf.o := -I$(QTDIR)/include +HOSTLOADLIBES_qconf = -L$(QTDIR)/lib -Wl,-rpath,$(QTDIR)/lib -l$(QTLIB) -ldl +HOSTCXXFLAGS_qconf.o = -I$(QTDIR)/include @@ -44,10 +36,28 @@ $(obj)/qconf.o: $(obj)/.tmp_qtcheck +ifeq ($(MAKECMDGOALS),$(obj)/qconf) +MOC = $(QTDIR)/bin/moc +-include $(obj)/.tmp_qtcheck + +# QT needs some extra effort... $(obj)/.tmp_qtcheck: -ifeq ($(MOC),) - @echo Unable to find the QT installation. Please make sure that the - @echo QT development package is correctly installed and the QTDIR - @echo environment variable is set to the correct location. - @false -else - @touch $@ + @set -e; for d in $$QTDIR /usr/share/qt /usr/lib/qt3; do \ + if [ -f $$d/include/qconfig.h ]; then DIR=$$d; break; fi; \ + done; \ + if [ -z "$$DIR" ]; then \ + echo "*"; \ + echo "* Unable to find the QT installation. Please make sure that the"; \ + echo "* QT development package is correctly installed and the QTDIR"; \ + echo "* environment variable is set to the correct location."; \ + echo "*"; \ + false; \ + fi; \ + LIB=qt; \ + if [ -f $$DIR/lib/libqt-mt.so ]; then LIB=qt-mt; fi; \ + echo "QTDIR=$$DIR" > $@; echo "QTLIB=$$LIB" >> $@; \ + if [ ! -x $$DIR/bin/moc -a -x /usr/bin/moc ]; then \ + echo "*"; \ + echo "* Unable to find $$DIR/bin/moc, using /usr/bin/moc instead."; \ + echo "*"; \ + echo "MOC=/usr/bin/moc" >> $@; \ + fi endif diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 74c94c2..1602d5f 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c @@ -117,2 +117,3 @@ static void conf_askvalue(struct symbol *sym, const char *def) case ask_all: + fflush(stdout); fgets(line, 128, stdin); @@ -344,2 +345,4 @@ static int conf_choice(struct menu *menu) case ask_all: + if (is_new) + sym->flags |= SYMBOL_NEW; conf_askvalue(sym, menu_get_prompt(def_menu)); @@ -359,3 +362,3 @@ static int conf_choice(struct menu *menu) if (line[0]) { - len = strlen(line) - 1; + len = strlen(line); line[len] = 0; @@ -366,3 +369,3 @@ static int conf_choice(struct menu *menu) continue; - if (!strncmp(line, menu_get_prompt(cmenu), len)) { + if (!strncasecmp(line, menu_get_prompt(cmenu), len)) { def_menu = cmenu; diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 0f5fd97..9bf7af9 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -5,4 +5,4 @@ +#include <sys/stat.h> #include <ctype.h> -#include <limits.h> #include <stdio.h> @@ -16,3 +16,2 @@ const char conf_def_filename[] = ".config"; -char conf_filename[PATH_MAX+1]; @@ -57,3 +56,14 @@ char *conf_get_default_confname(void) { - return conf_expand_value(conf_defname); + struct stat buf; + static char fullname[PATH_MAX+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; } @@ -63,3 +73,3 @@ int conf_read(const char *name) FILE *in = NULL; - char line[128]; + char line[1024]; char *p, *p2; @@ -72,5 +82,3 @@ int conf_read(const char *name) if (name) { - in = fopen(name, "r"); - if (in) - strcpy(conf_filename, name); + in = zconf_fopen(name); } else { @@ -79,3 +87,3 @@ int conf_read(const char *name) name = conf_expand_value(name); - in = fopen(name, "r"); + in = zconf_fopen(name); if (in) { @@ -93,3 +101,4 @@ int conf_read(const char *name) for_all_symbols(i, sym) { - sym->flags |= SYMBOL_NEW; + sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED; + sym->flags &= ~SYMBOL_VALID; switch (sym->type) { @@ -98,8 +107,7 @@ int conf_read(const char *name) case S_STRING: - if (S_VAL(sym->def)) { + if (S_VAL(sym->def)) free(S_VAL(sym->def)); - S_VAL(sym->def) = NULL; - } default: - ; + S_VAL(sym->def) = NULL; + S_TRI(sym->def) = no; } @@ -107,3 +115,3 @@ int conf_read(const char *name) - while (fgets(line, 128, in)) { + while (fgets(line, sizeof(line), in)) { lineno++; @@ -119,3 +127,2 @@ int conf_read(const char *name) continue; - //printf("%s -> n\n", line + 9); sym = sym_lookup(line + 9, 0); @@ -141,3 +148,2 @@ int conf_read(const char *name) *p2 = 0; - //printf("%s -> %s\n", line + 7, p); sym = sym_find(line + 7); @@ -148,12 +154,19 @@ int conf_read(const char *name) switch (sym->type) { - case S_BOOLEAN: - sym->def = symbol_yes.curr; - sym->flags &= ~SYMBOL_NEW; - break; case S_TRISTATE: - if (p[0] == 'm') - sym->def = symbol_mod.curr; - else - sym->def = symbol_yes.curr; - sym->flags &= ~SYMBOL_NEW; + if (p[0] == 'm') { + S_TRI(sym->def) = mod; + sym->flags &= ~SYMBOL_NEW; + break; + } + case S_BOOLEAN: + if (p[0] == 'y') { + S_TRI(sym->def) = yes; + sym->flags &= ~SYMBOL_NEW; + break; + } + if (p[0] == 'n') { + S_TRI(sym->def) = no; + sym->flags &= ~SYMBOL_NEW; + break; + } break; @@ -169,2 +182,6 @@ int conf_read(const char *name) } + if (!p2) { + fprintf(stderr, "%s:%d: invalid string found\n", name, lineno); + exit(1); + } case S_INT: @@ -174,4 +191,6 @@ int conf_read(const char *name) 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; @@ -354,3 +373,2 @@ int conf_write(const char *name) return 1; - strcpy(conf_filename, name); diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h index fd9c32a..896a296 100644 --- a/scripts/kconfig/expr.h +++ b/scripts/kconfig/expr.h @@ -168,2 +168,3 @@ struct menu { struct expr *dep; + unsigned int flags; //char *help; @@ -171,5 +172,7 @@ struct menu { int lineno; - //void *data; + void *data; }; +#define MENU_CHANGED 0x0001 + #ifndef SWIG diff --git a/scripts/kconfig/kconfig.i b/scripts/kconfig/kconfig.i index 699cb13..77405fc 100644 --- a/scripts/kconfig/kconfig.i +++ b/scripts/kconfig/kconfig.i @@ -33,2 +33,7 @@ static void expr_to_s_help(void *data, const char *str) +#ifdef SWIGPYTHON +%rename (Property) property; +%rename (default) def; +#endif + %immutable; diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h index 688945b..cdd04a9 100644 --- a/scripts/kconfig/lkc.h +++ b/scripts/kconfig/lkc.h @@ -23,3 +23,4 @@ extern "C" { -void symbol_end(char *help); +#define SRCTREE "srctree" + int zconfparse(void); @@ -29,2 +30,3 @@ extern int zconfdebug; void zconf_starthelp(void); +FILE *zconf_fopen(const char *name); void zconf_initscan(const char *name); @@ -63,2 +65,3 @@ void sym_init(void); void sym_clear_all_valid(void); +void sym_set_changed(struct symbol *sym); diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index dec8603..eba5ff7 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c @@ -3,2 +3,5 @@ * Released under the terms of the GNU GPL v2.0. + * + * Introduced single menu mode (show all sub-menus in one large tree). + * 2002-11-06 Petr Baudis <pasky@ucw.cz> */ @@ -10,2 +13,3 @@ #include <fcntl.h> +#include <limits.h> #include <signal.h> @@ -14,2 +18,3 @@ #include <string.h> +#include <termios.h> #include <unistd.h> @@ -46,3 +51,3 @@ setmod_text[] = nohelp_text[] = - "There is no help available for this option.\n", + "There is no help available for this kernel option.\n", load_config_text[] = @@ -53,3 +58,3 @@ load_config_help[] = "\n" - "For various reasons, one may wish to keep several different\n" + "For various reasons, one may wish to keep several different kernel\n" "configurations available on a single machine.\n" @@ -57,3 +62,3 @@ load_config_help[] = "If you have saved a previous configuration in a file other than the\n" - "default, entering the name of the file here will allow you\n" + "kernel's default, entering the name of the file here will allow you\n" "to modify that configuration.\n" @@ -67,3 +72,3 @@ save_config_help[] = "\n" - "For various reasons, one may wish to keep different\n" + "For various reasons, one may wish to keep different kernel\n" "configurations available on a single machine.\n" @@ -80,4 +85,6 @@ static char buf[4096], *bufptr = buf; static char input_buf[4096]; +static char filename[PATH_MAX+1] = ".config"; static char *args[1024], **argptr = args; static int indent = 0; +static struct termios ios_org; static int rows, cols; @@ -86,2 +93,3 @@ static int child_count; static int do_resize; +static int single_menu_mode; @@ -105,2 +113,3 @@ static void init_wsize(void) struct winsize ws; + char *env; @@ -112,2 +121,16 @@ static void init_wsize(void) cols = ws.ws_col; + if (!rows) { + env = getenv("LINES"); + if (env) + rows = atoi(env); + if (!rows) + rows = 24; + } + if (!cols) { + env = getenv("COLUMNS"); + if (env) + cols = atoi(env); + if (!cols) + cols = 80; + } } @@ -276,6 +299,16 @@ static void build_conf(struct menu *menu) cprint("m%p", menu); - if (menu->parent != &rootmenu) - cprint1(" %*c", indent + 1, ' '); - cprint1("%s --->", prompt); + + if (single_menu_mode) { + cprint1("%s%*c%s", + menu->data ? "-->" : "++>", + indent + 1, ' ', prompt); + } else { + if (menu->parent != &rootmenu) + cprint1(" %*c", indent + 1, ' '); + cprint1("%s --->", prompt); + } + cprint_done(); + if (single_menu_mode && menu->data) + goto conf_childs; return; @@ -394,2 +427,3 @@ static void conf(struct menu *menu) + unlink("lxdialog.scrltmp"); active_entry[0] = 0; @@ -444,3 +478,6 @@ static void conf(struct menu *menu) case 'm': - conf(submenu); + if (single_menu_mode) + submenu->data = (void *) !submenu->data; + else + conf(submenu); break; @@ -486,2 +523,4 @@ static void conf(struct menu *menu) sym_toggle_tristate_value(sym); + else if (type == 'm') + conf(submenu); break; @@ -520,7 +559,15 @@ static void show_help(struct menu *menu) const char *help; + char *helptext; + struct symbol *sym = menu->sym; - help = menu->sym->help; + help = sym->help; if (!help) help = nohelp_text; - show_helptext(menu_get_prompt(menu), help); + if (sym->name) { + helptext = malloc(strlen(sym->name) + strlen(help) + 16); + sprintf(helptext, "CONFIG_%s:\n\n%s", sym->name, help); + show_helptext(menu_get_prompt(menu), helptext); + free(helptext); + } else + show_helptext(menu_get_prompt(menu), help); } @@ -633,3 +680,3 @@ static void conf_load(void) cprint("55"); - cprint("%s", conf_filename); + cprint("%s", filename); stat = exec_conf(); @@ -662,3 +709,3 @@ static void conf_save(void) cprint("55"); - cprint("%s", conf_filename); + cprint("%s", filename); stat = exec_conf(); @@ -681,5 +728,15 @@ static void conf_save(void) +static void conf_cleanup(void) +{ + tcsetattr(1, TCSAFLUSH, &ios_org); + unlink(".help.tmp"); + unlink("lxdialog.scrltmp"); +} + int main(int ac, char **av) { + struct symbol *sym; + char *mode; int stat; + conf_parse(av[1]); @@ -687,4 +744,15 @@ int main(int ac, char **av) - sprintf(menu_backtitle, "Configuration"); + sym = sym_lookup("KERNELRELEASE", 0); + sym_calc_value(sym); + sprintf(menu_backtitle, "Linux Kernel v%s Configuration", + sym_get_string_value(sym)); + + mode = getenv("MENUCONFIG_MODE"); + if (mode) { + if (!strcasecmp(mode, "single_menu")) + single_menu_mode = 1; + } + tcgetattr(1, &ios_org); + atexit(conf_cleanup); init_wsize(); @@ -704,6 +772,7 @@ int main(int ac, char **av) printf("\n\n" - "*** End of configuration.\n" - "*** Check the top-level Makefile for additional configuration.\n"); + "*** End of Linux kernel configuration.\n" + "*** Check the top-level Makefile for additional configuration.\n" + "*** Next, you may run 'make bzImage', 'make bzdisk', or 'make install'.\n\n"); } else - printf("\n\nYour configuration changes were NOT saved.\n\n"); + printf("\n\nYour kernel configuration changes were NOT saved.\n\n"); diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index 4595110..24be0ec 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c @@ -292,3 +292,3 @@ int file_write_dep(const char *name) if (!name) - name = "..config.cmd"; + name = ".config.cmd"; out = fopen("..config.tmp", "w"); diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index feefa1c..bed541d 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc @@ -19,2 +19,6 @@ #include <qregexp.h> +#if QT_VERSION >= 300 +#include <qsettings.h> +#endif + #include <stdlib.h> @@ -28,2 +32,5 @@ static QApplication *configApp; +#if QT_VERSION >= 300 +static QSettings *configSettings; +#endif @@ -75,5 +82,13 @@ static void updateMenuList(P* parent, struct menu* menu) if (!item || item->menu != child) - item = new ConfigItem(parent, last, child); - item->visible = visible; - item->updateMenu(); + item = new ConfigItem(parent, last, child, visible); + else { + item->visible = visible; + if (item->updateNeeded()) { + ConfigItem* i = (ConfigItem*)child->data; + for (; i; i = i->nextItem) { + i->updateMenu(); + } + } else if (list->updateAll) + item->updateMenu(); + } @@ -122,10 +137,4 @@ void ConfigItem::updateMenu(void) tristate expr; - bool update; list = listView(); - update = doInit; - if (update) - doInit = false; - else - update = list->updateAll; @@ -133,11 +142,9 @@ void ConfigItem::updateMenu(void) if (!sym) { - if (update) { - setText(promptColIdx, menu_get_prompt(menu)); - ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; - if ((ptype == P_ROOTMENU || ptype == P_MENU) && - (list->mode == singleMode || list->mode == symbolMode)) - setPixmap(promptColIdx, list->menuPix); - else - setPixmap(promptColIdx, 0); - } + setText(promptColIdx, menu_get_prompt(menu)); + ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; + if ((ptype == P_ROOTMENU || ptype == P_MENU) && + (list->mode == singleMode || list->mode == symbolMode)) + setPixmap(promptColIdx, list->menuPix); + else + setPixmap(promptColIdx, 0); return; @@ -145,9 +152,3 @@ void ConfigItem::updateMenu(void) - sym_calc_value(sym); - if (!(sym->flags & SYMBOL_CHANGED) && !update) - return; - - sym->flags &= ~SYMBOL_CHANGED; - - setText(nameColIdx, menu->sym->name); + setText(nameColIdx, sym->name); @@ -206,3 +207,5 @@ void ConfigItem::updateMenu(void) #if QT_VERSION >= 300 - setRenameEnabled(list->mapIdx(dataColIdx), TRUE); + int i = list->mapIdx(dataColIdx); + if (i >= 0) + setRenameEnabled(i, TRUE); #endif @@ -220,2 +223,14 @@ void ConfigItem::updateMenu(void) +bool ConfigItem::updateNeeded(void) +{ + struct symbol* sym = menu->sym; + if (sym) + sym_calc_value(sym); + if (menu->flags & MENU_CHANGED) { + menu->flags &= ~MENU_CHANGED; + return true; + } + return false; +} + void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align) @@ -239,9 +254,10 @@ void ConfigItem::init(void) ConfigList* list = listView(); -#if QT_VERSION < 300 - visible = TRUE; -#endif - //menu->data = this; + nextItem = (ConfigItem*)menu->data; + menu->data = this; + if (list->mode != fullMode) setOpen(TRUE); - doInit= true; + if (menu->sym) + sym_calc_value(menu->sym); + updateMenu(); } @@ -253,3 +269,9 @@ ConfigItem::~ConfigItem(void) { - //menu->data = 0; + ConfigItem** ip = &(ConfigItem*)menu->data; + for (; *ip; ip = &(*ip)->nextItem) { + if (*ip == this) { + *ip = nextItem; + break; + } + } } @@ -275,3 +297,3 @@ void ConfigLineEdit::keyPressEvent(QKeyEvent* e) sym_set_string_value(item->menu->sym, text().latin1()); - emit lineChanged(item); + parent()->updateList(item); break; @@ -282,2 +304,3 @@ void ConfigLineEdit::keyPressEvent(QKeyEvent* e) e->accept(); + parent()->list->setFocus(); hide(); @@ -285,3 +308,3 @@ void ConfigLineEdit::keyPressEvent(QKeyEvent* e) -ConfigList::ConfigList(QWidget* p, ConfigView* cv) +ConfigList::ConfigList(ConfigView* p, ConfigMainWindow* cv) : Parent(p), cview(cv), @@ -354,2 +377,3 @@ void ConfigList::updateList(ConfigItem* item) updateMenuList(this, rootEntry); + triggerUpdate(); } @@ -384,3 +408,3 @@ void ConfigList::setValue(ConfigItem* item, tristate val) item->setOpen(TRUE); - emit symbolChanged(item); + parent()->updateList(item); break; @@ -416,3 +440,3 @@ void ConfigList::changeValue(ConfigItem* item) if (oldexpr != newexpr) - emit symbolChanged(item); + parent()->updateList(item); break; @@ -426,3 +450,3 @@ void ConfigList::changeValue(ConfigItem* item) #endif - lineEdit->show(item); + parent()->lineEdit->show(item); break; @@ -518,3 +542,3 @@ void ConfigList::contentsMousePressEvent(QMouseEvent* e) //printf("contentsMousePressEvent: %d,%d\n", p.x(), p.y()); - QListView::contentsMousePressEvent(e); + Parent::contentsMousePressEvent(e); } @@ -565,3 +589,3 @@ skip: //printf("contentsMouseReleaseEvent: %d,%d\n", p.x(), p.y()); - QListView::contentsMouseReleaseEvent(e); + Parent::contentsMouseReleaseEvent(e); } @@ -572,3 +596,3 @@ void ConfigList::contentsMouseMoveEvent(QMouseEvent* e) //printf("contentsMouseMoveEvent: %d,%d\n", p.x(), p.y()); - QListView::contentsMouseMoveEvent(e); + Parent::contentsMouseMoveEvent(e); } @@ -589,2 +613,4 @@ void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e) emit menuSelected(menu); + else if (menu->sym) + changeValue(item); @@ -592,3 +618,3 @@ skip: //printf("contentsMouseDoubleClickEvent: %d,%d\n", p.x(), p.y()); - QListView::contentsMouseDoubleClickEvent(e); + Parent::contentsMouseDoubleClickEvent(e); } @@ -607,2 +633,43 @@ void ConfigList::focusInEvent(QFocusEvent *e) +ConfigView* ConfigView::viewList; + +ConfigView::ConfigView(QWidget* parent, ConfigMainWindow* cview) + : Parent(parent) +{ + list = new ConfigList(this, cview); + lineEdit = new ConfigLineEdit(this); + lineEdit->hide(); + + this->nextView = viewList; + viewList = this; +} + +ConfigView::~ConfigView(void) +{ + ConfigView** vp; + + for (vp = &viewList; *vp; vp = &(*vp)->nextView) { + if (*vp == this) { + *vp = nextView; + break; + } + } +} + +void ConfigView::updateList(ConfigItem* item) +{ + ConfigView* v; + + for (v = viewList; v; v = v->nextView) + v->list->updateList(item); +} + +void ConfigView::updateListAll(void) +{ + ConfigView* v; + + for (v = viewList; v; v = v->nextView) + v->list->updateListAll(); +} + /* @@ -610,4 +677,5 @@ void ConfigList::focusInEvent(QFocusEvent *e) */ -ConfigView::ConfigView(void) +ConfigMainWindow::ConfigMainWindow(void) { + ConfigView* view; QMenuBar* menu; @@ -615,2 +683,21 @@ ConfigView::ConfigView(void) QSplitter* split2; + bool ok; + int x, y, width, height; + + QWidget *d = configApp->desktop(); + +#if QT_VERSION >= 300 + width = configSettings->readNumEntry("/kconfig/qconf/window width", d->width() - 64); + height = configSettings->readNumEntry("/kconfig/qconf/window height", d->height() - 64); + resize(width, height); + x = configSettings->readNumEntry("/kconfig/qconf/window x", 0, &ok); + if (ok) + y = configSettings->readNumEntry("/kconfig/qconf/window y", 0, &ok); + if (ok) + move(x, y); +#else + width = d->width() - 64; + height = d->height() - 64; + resize(width, height); +#endif @@ -622,3 +709,4 @@ ConfigView::ConfigView(void) - menuList = new ConfigList(split1, this); + view = new ConfigView(split1, this); + menuList = view->list; @@ -628,12 +716,4 @@ ConfigView::ConfigView(void) // create config tree - QVBox* box = new QVBox(split2); - configList = new ConfigList(box, this); - configList->lineEdit = new ConfigLineEdit(box); - configList->lineEdit->hide(); - configList->connect(configList, SIGNAL(symbolChanged(ConfigItem*)), - configList, SLOT(updateList(ConfigItem*))); - configList->connect(configList, SIGNAL(symbolChanged(ConfigItem*)), - menuList, SLOT(updateList(ConfigItem*))); - configList->connect(configList->lineEdit, SIGNAL(lineChanged(ConfigItem*)), - SLOT(updateList(ConfigItem*))); + view = new ConfigView(split2, this); + configList = view->list; @@ -687,2 +767,7 @@ ConfigView::ConfigView(void) + QAction *showIntroAction = new QAction(NULL, "Introduction", 0, this); + connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro())); + QAction *showAboutAction = new QAction(NULL, "About", 0, this); + connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout())); + // init tool bar @@ -716,2 +801,9 @@ ConfigView::ConfigView(void) + // create help menu + QPopupMenu* helpMenu = new QPopupMenu(this); + menu->insertSeparator(); + menu->insertItem("&Help", helpMenu); + showIntroAction->addTo(helpMenu); + showAboutAction->addTo(helpMenu); + connect(configList, SIGNAL(menuSelected(struct menu *)), @@ -771,3 +863,3 @@ static void expr_print_help(void *data, const char *str) */ -void ConfigView::setHelp(QListViewItem* item) +void ConfigMainWindow::setHelp(QListViewItem* item) { @@ -776,3 +868,3 @@ void ConfigView::setHelp(QListViewItem* item) - configList->lineEdit->hide(); + configList->parent()->lineEdit->hide(); if (item) { @@ -859,3 +951,3 @@ void ConfigView::setHelp(QListViewItem* item) -void ConfigView::loadConfig(void) +void ConfigMainWindow::loadConfig(void) { @@ -866,5 +958,6 @@ void ConfigView::loadConfig(void) QMessageBox::information(this, "qconf", "Unable to load configuration!"); + ConfigView::updateListAll(); } -void ConfigView::saveConfig(void) +void ConfigMainWindow::saveConfig(void) { @@ -874,3 +967,3 @@ void ConfigView::saveConfig(void) -void ConfigView::saveConfigAs(void) +void ConfigMainWindow::saveConfigAs(void) { @@ -883,3 +976,3 @@ void ConfigView::saveConfigAs(void) -void ConfigView::changeMenu(struct menu *menu) +void ConfigMainWindow::changeMenu(struct menu *menu) { @@ -889,3 +982,3 @@ void ConfigView::changeMenu(struct menu *menu) -void ConfigView::listFocusChanged(void) +void ConfigMainWindow::listFocusChanged(void) { @@ -900,3 +993,3 @@ void ConfigView::listFocusChanged(void) -void ConfigView::goBack(void) +void ConfigMainWindow::goBack(void) { @@ -917,3 +1010,3 @@ void ConfigView::goBack(void) -void ConfigView::showSingleView(void) +void ConfigMainWindow::showSingleView(void) { @@ -930,3 +1023,3 @@ void ConfigView::showSingleView(void) -void ConfigView::showSplitView(void) +void ConfigMainWindow::showSplitView(void) { @@ -946,3 +1039,3 @@ void ConfigView::showSplitView(void) -void ConfigView::showFullView(void) +void ConfigMainWindow::showFullView(void) { @@ -959,3 +1052,3 @@ void ConfigView::showFullView(void) -void ConfigView::setShowAll(bool b) +void ConfigMainWindow::setShowAll(bool b) { @@ -969,3 +1062,3 @@ void ConfigView::setShowAll(bool b) -void ConfigView::setShowDebug(bool b) +void ConfigMainWindow::setShowDebug(bool b) { @@ -976,3 +1069,3 @@ void ConfigView::setShowDebug(bool b) -void ConfigView::setShowName(bool b) +void ConfigMainWindow::setShowName(bool b) { @@ -984,3 +1077,3 @@ void ConfigView::setShowName(bool b) -void ConfigView::setShowRange(bool b) +void ConfigMainWindow::setShowRange(bool b) { @@ -992,3 +1085,3 @@ void ConfigView::setShowRange(bool b) -void ConfigView::setShowData(bool b) +void ConfigMainWindow::setShowData(bool b) { @@ -1004,3 +1097,3 @@ void ConfigView::setShowData(bool b) */ -void ConfigView::closeEvent(QCloseEvent* e) +void ConfigMainWindow::closeEvent(QCloseEvent* e) { @@ -1027,2 +1120,27 @@ void ConfigView::closeEvent(QCloseEvent* e) +void ConfigMainWindow::showIntro(void) +{ + static char str[] = "Welcome to the qconf graphical kernel configuration tool for Linux.\n\n" + "For each option, a blank box indicates the feature is disabled, a check\n" + "indicates it is enabled, and a dot indicates that it is to be compiled\n" + "as a module. Clicking on the box will cycle through the three states.\n\n" + "If you do not see an option (e.g., a device driver) that you believe\n" + "should be present, try turning on Show All Options under the Options menu.\n" + "Although there is no cross reference yet to help you figure out what other\n" + "options must be enabled to support the option you are interested in, you can\n" + "still view the help of a grayed-out option.\n\n" + "Toggling Show Debug Info under the Options menu will show the dependencies,\n" + "which you can then match by examining other options.\n\n"; + + QMessageBox::information(this, "qconf", str); +} + +void ConfigMainWindow::showAbout(void) +{ + static char str[] = "qconf is Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>.\n\n" + "Bug reports and feature request can also be entered at http://bugzilla.kernel.org/\n"; + + QMessageBox::information(this, "qconf", str); +} + void fixup_rootmenu(struct menu *menu) @@ -1040,3 +1158,3 @@ int main(int ac, char** av) { - ConfigView* v; + ConfigMainWindow* v; const char *name; @@ -1048,2 +1166,5 @@ int main(int ac, char** av) configApp = new QApplication(ac, av); +#if QT_VERSION >= 300 + configSettings = new QSettings; +#endif if (ac > 1 && av[1][0] == '-') { @@ -1065,3 +1186,4 @@ int main(int ac, char** av) //zconfdump(stdout); - v = new ConfigView(); + + v = new ConfigMainWindow(); @@ -1071,2 +1193,10 @@ int main(int ac, char** av) configApp->exec(); + +#if QT_VERSION >= 300 + configSettings->writeEntry("/kconfig/qconf/window x", v->pos().x()); + configSettings->writeEntry("/kconfig/qconf/window y", v->pos().y()); + configSettings->writeEntry("/kconfig/qconf/window width", v->size().width()); + configSettings->writeEntry("/kconfig/qconf/window height", v->size().height()); + delete configSettings; +#endif return 0; diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h index f8f3669..6f096b4 100644 --- a/scripts/kconfig/qconf.h +++ b/scripts/kconfig/qconf.h @@ -7,5 +7,23 @@ -class ConfigLineEdit; +class ConfigList; class ConfigItem; -class ConfigView; +class ConfigLineEdit; +class ConfigMainWindow; + +class ConfigView : public QVBox { + Q_OBJECT + typedef class QVBox Parent; +public: + ConfigView(QWidget* parent, ConfigMainWindow* cview); + ~ConfigView(void); + static void updateList(ConfigItem* item); + static void updateListAll(void); + +public: + ConfigList* list; + ConfigLineEdit* lineEdit; + + static ConfigView* viewList; + ConfigView* nextView; +}; @@ -22,8 +40,11 @@ class ConfigList : public QListView { public: - ConfigList(QWidget* p, ConfigView* cview); + ConfigList(ConfigView* p, ConfigMainWindow* cview); void reinit(void); + ConfigView* parent(void) const + { + return (ConfigView*)Parent::parent(); + } - ConfigLineEdit* lineEdit; protected: - ConfigView* cview; + ConfigMainWindow* cview; @@ -45,3 +66,2 @@ signals: void parentSelected(void); - void symbolChanged(ConfigItem* item); void gotFocus(void); @@ -102,4 +122,4 @@ class ConfigItem : public QListViewItem { public: - ConfigItem(QListView *parent, ConfigItem *after, struct menu *m) - : Parent(parent, after), menu(m) + ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v) + : Parent(parent, after), menu(m), visible(v) { @@ -107,4 +127,4 @@ public: } - ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m) - : Parent(parent, after), menu(m) + ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) + : Parent(parent, after), menu(m), visible(v) { @@ -118,2 +138,3 @@ public: void updateMenu(void); + bool updateNeeded(void); ConfigList* listView() const @@ -148,5 +169,5 @@ public: + ConfigItem* nextItem; struct menu *menu; bool visible; - bool doInit; }; @@ -157,9 +178,11 @@ class ConfigLineEdit : public QLineEdit { public: - ConfigLineEdit(QWidget * parent) - : QLineEdit(parent) + ConfigLineEdit(ConfigView* parent) + : Parent(parent) { } + ConfigView* parent(void) const + { + return (ConfigView*)Parent::parent(); + } void show(ConfigItem *i); void keyPressEvent(QKeyEvent *e); -signals: - void lineChanged(ConfigItem *item); @@ -169,6 +192,6 @@ public: -class ConfigView : public QMainWindow { +class ConfigMainWindow : public QMainWindow { Q_OBJECT public: - ConfigView(void); + ConfigMainWindow(void); public slots: @@ -189,2 +212,4 @@ public slots: void setShowData(bool); + void showIntro(void); + void showAbout(void); diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 59c88d2..845d8a3 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -151,3 +151,3 @@ void sym_calc_visibility(struct symbol *sym) sym->visible = visible; - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -206,3 +206,4 @@ void sym_calc_value(struct symbol *sym) } - } + } else + S_TRI(newval) = S_TRI(sym->def); } else @@ -278,3 +279,3 @@ out: if (memcmp(&oldval, &newval, sizeof(newval))) - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); sym->curr = newval; @@ -284,4 +285,7 @@ out: prop = sym_get_choice_prop(sym); - for (e = prop->dep; e; e = e->left.expr) + for (e = prop->dep; e; e = e->left.expr) { e->right.sym->flags |= flags; + if (flags & SYMBOL_CHANGED) + sym_set_changed(e->right.sym); + } } @@ -299,2 +303,13 @@ void sym_clear_all_valid(void) +void sym_set_changed(struct symbol *sym) +{ + struct property *prop; + + sym->flags |= SYMBOL_CHANGED; + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu) + prop->menu->flags |= MENU_CHANGED; + } +} + void sym_set_all_changed(void) @@ -305,3 +320,3 @@ void sym_set_all_changed(void) for_all_symbols(i, sym) - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -342,3 +357,3 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val) sym->flags &= ~SYMBOL_NEW; - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -462,3 +477,3 @@ bool sym_set_string_value(struct symbol *sym, const char *newval) sym->flags &= ~SYMBOL_NEW; - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -527,3 +542,2 @@ struct symbol *sym_lookup(const char *name, int isconst) - //printf("lookup: %s -> ", name); if (name) { @@ -543,6 +557,4 @@ struct symbol *sym_lookup(const char *name, int isconst) if ((isconst && symbol->flags & SYMBOL_CONST) || - (!isconst && !(symbol->flags & SYMBOL_CONST))) { - //printf("h:%p\n", symbol); + (!isconst && !(symbol->flags & SYMBOL_CONST))) return symbol; - } } @@ -566,3 +578,2 @@ struct symbol *sym_lookup(const char *name, int isconst) - //printf("n:%p\n", symbol); return symbol; diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l index 6d81e5e..1471630 100644 --- a/scripts/kconfig/zconf.l +++ b/scripts/kconfig/zconf.l @@ -1,2 +1,2 @@ -%option backup nostdinit noyywrap full ecs +%option backup nostdinit noyywrap never-interactive full ecs %option 8bit backup nodefault perf-report perf-report @@ -9,2 +9,3 @@ +#include <limits.h> #include <stdio.h> @@ -16,3 +17,2 @@ #include "lkc.h" -#include "zconf.tab.h" @@ -85,4 +85,2 @@ n [A-Za-z0-9_] unput(yytext[0]); - //printf("new config: "); - //symbol_end(NULL); BEGIN(COMMAND); @@ -145,3 +143,7 @@ n [A-Za-z0-9_] } + \\\n current_file->lineno++; . + <<EOF>> { + BEGIN(INITIAL); + } } @@ -149,5 +151,18 @@ n [A-Za-z0-9_] <STRING>{ - [^'"\n\\]+ { + [^'"\\\n]+/\n { + append_string(yytext, yyleng); + zconflval.string = text; + return T_STRING; + } + [^'"\\\n]+ { append_string(yytext, yyleng); } + \\.?/\n { + append_string(yytext + 1, yyleng - 1); + zconflval.string = text; + return T_STRING; + } + \\.? { + append_string(yytext + 1, yyleng - 1); + } \'|\" { @@ -156,3 +171,2 @@ n [A-Za-z0-9_] zconflval.string = text; - //printf("s:%s\n", text); return T_STRING; @@ -161,12 +175,10 @@ n [A-Za-z0-9_] } - \\[ \t]*\n append_string(yytext+yyleng-1, 1); current_file->lineno++; - \\[ \t]* append_string(yytext+1, yyleng-1); - \\. append_string(yytext+1, 1); \n { - //printf(":%d: open string!\n", current_file->lineno+1); - exit(0); + printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); + current_file->lineno++; + BEGIN(INITIAL); + return T_EOL; } <<EOF>> { - //printf(":%d: open string!\n", current_file->lineno+1); - exit(0); + BEGIN(INITIAL); } @@ -223,2 +235,3 @@ n [A-Za-z0-9_] } + fclose(yyin); yyterminate(); @@ -240,5 +253,30 @@ static void zconf_endhelp(void) + +/* + * Try to open specified file with following names: + * ./name + * $(srctree)/name + * The latter is used when srctree is separate from objtree + * when compiling the kernel. + * Return NULL if file is not found. + */ +FILE *zconf_fopen(const char *name) +{ + char *env, fullname[PATH_MAX+1]; + FILE *f; + + f = fopen(name, "r"); + if (!f && name[0] != '/') { + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + f = fopen(fullname, "r"); + } + } + return f; +} + void zconf_initscan(const char *name) { - yyin = fopen(name, "r"); + yyin = zconf_fopen(name); if (!yyin) { @@ -247,3 +285,2 @@ void zconf_initscan(const char *name) } - //fprintf(stderr, "zconf_initscan: %s\n", name); @@ -264,3 +301,3 @@ void zconf_nextfile(const char *name) current_buf->state = YY_CURRENT_BUFFER; - yyin = fopen(name, "r"); + yyin = zconf_fopen(name); if (!yyin) { @@ -273,4 +310,2 @@ void zconf_nextfile(const char *name) - //fprintf(stderr, "zconf_nextfile: %s\n", name); - if (file->flags & FILE_BUSY) { @@ -299,2 +334,3 @@ static struct buffer *zconf_endfile(void) if (parent) { + fclose(yyin); yy_delete_buffer(YY_CURRENT_BUFFER); diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index c3f1bd0..996b10a 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y @@ -229,6 +229,5 @@ choice_option: T_OPTIONAL -choice_option: T_DEFAULT symbol +choice_option: T_DEFAULT symbol if_expr { - menu_add_prop(P_DEFAULT, NULL, $2, NULL); - //current_choice->prop->def = $2; + menu_add_prop(P_DEFAULT, NULL, $2, $3); printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); @@ -247,3 +246,2 @@ if: T_IF expr menu_add_entry(NULL); - //current_entry->prompt = menu_add_prop(T_IF, NULL, NULL, $2); menu_add_dep($2); |