package/config: rebase against 2.6.37-rc1
authorPeter Korsgaard <jacmet@sunsite.dk>
Wed, 2 Feb 2011 10:48:58 +0000 (11:48 +0100)
committerPeter Korsgaard <jacmet@sunsite.dk>
Wed, 2 Feb 2011 14:54:50 +0000 (15:54 +0100)
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
35 files changed:
package/config/Makefile
package/config/conf.c
package/config/confdata.c
package/config/expr.h
package/config/gconf.c
package/config/gconf.glade
package/config/kxgettext.c
package/config/lex.zconf.c_shipped
package/config/lkc.h
package/config/lkc_proto.h
package/config/lxdialog/check-lxdialog.sh
package/config/mconf.c
package/config/menu.c
package/config/nconf.c
package/config/nconf.gui.c
package/config/nconf.h
package/config/patches/01-kconfig-kernel-to-buildroot.patch
package/config/patches/03-change-config-option-prefix.patch
package/config/patches/05-really-clean-everything.patch
package/config/patches/06-br-build-system-integration.patch
package/config/patches/08-make-write-deps.patch
package/config/patches/09-implement-kconfig-probability.patch
package/config/patches/11-use-mktemp-for-lxdialog.patch
package/config/patches/12-fix-glade-file-path.patch
package/config/patches/14-support-out-of-tree-config.patch
package/config/patches/15-use-PATH_MAX-for-path-buffer.patch [deleted file]
package/config/patches/series
package/config/qconf.cc
package/config/qconf.h
package/config/streamline_config.pl
package/config/symbol.c
package/config/util.c
package/config/zconf.l
package/config/zconf.tab.c_shipped
package/config/zconf.y

index d8d44b0429fa4c33545c8d552c68c883221417bf..ece2a822fc13faac389e672983643f1f565e048a 100644 (file)
@@ -8,7 +8,7 @@ PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-c
 ifdef KBUILD_KCONFIG
 Kconfig := $(KBUILD_KCONFIG)
 else
-Kconfig := arch/$(SRCARCH)/Kconfig
+Kconfig := Kconfig
 endif
 
 xconfig: $(obj)/qconf
@@ -145,11 +145,8 @@ check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
 
 # Use recursively expanded variables so we do not call gcc unless
 # we really need to do so. (Do not call gcc as part of make mrproper)
-HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
-HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-
-HOST_EXTRACFLAGS += -DLOCALE
-
+HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
+                    -DLOCALE
 
 # ===========================================================================
 # Shared Makefile for the various kconfig executables:
@@ -226,7 +223,7 @@ clean-files += $(kxgettext-objs)
 PHONY += $(obj)/dochecklxdialog
 $(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:
-       $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES)
+       $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
 
 always := dochecklxdialog
 
@@ -244,6 +241,8 @@ HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
 HOSTCFLAGS_gconf.o     = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
                           -D LKC_DIRECT_LINK
 
+HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
+
 HOSTLOADLIBES_nconf    = -lmenu -lpanel -lncurses
 $(obj)/qconf.o: $(obj)/.tmp_qtcheck
 
@@ -254,40 +253,48 @@ $(obj)/.tmp_qtcheck: $(src)/Makefile
 # QT needs some extra effort...
 $(obj)/.tmp_qtcheck:
        @set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
-       pkg-config --exists qt 2> /dev/null && pkg=qt; \
-       pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
-       if [ -n "$$pkg" ]; then \
-         cflags="\$$(shell pkg-config $$pkg --cflags)"; \
-         libs="\$$(shell pkg-config $$pkg --libs)"; \
-         moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
-         dir="$$(pkg-config $$pkg --variable=prefix)"; \
+       if ! pkg-config --exists QtCore 2> /dev/null; then \
+           echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
+           pkg-config --exists qt 2> /dev/null && pkg=qt; \
+           pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
+           if [ -n "$$pkg" ]; then \
+             cflags="\$$(shell pkg-config $$pkg --cflags)"; \
+             libs="\$$(shell pkg-config $$pkg --libs)"; \
+             moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
+             dir="$$(pkg-config $$pkg --variable=prefix)"; \
+           else \
+             for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
+               if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
+             done; \
+             if [ -z "$$dir" ]; then \
+               echo "*"; \
+               echo "* Unable to find any QT installation. Please make sure that"; \
+               echo "* the QT4 or QT3 development package is correctly installed and"; \
+               echo "* either qmake can be found or install pkg-config or set"; \
+               echo "* the QTDIR environment variable to the correct location."; \
+               echo "*"; \
+               false; \
+             fi; \
+             libpath=$$dir/lib; lib=qt; osdir=""; \
+             $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
+               osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
+             test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
+             test -f $$libpath/libqt-mt.so && lib=qt-mt; \
+             cflags="-I$$dir/include"; \
+             libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
+             moc="$$dir/bin/moc"; \
+           fi; \
+           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 "*"; \
+             moc="/usr/bin/moc"; \
+           fi; \
        else \
-         for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
-           if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
-         done; \
-         if [ -z "$$dir" ]; then \
-           echo "*"; \
-           echo "* Unable to find the QT3 installation. Please make sure that"; \
-           echo "* the QT3 development package is correctly installed and"; \
-           echo "* either install pkg-config or set the QTDIR environment"; \
-           echo "* variable to the correct location."; \
-           echo "*"; \
-           false; \
-         fi; \
-         libpath=$$dir/lib; lib=qt; osdir=""; \
-         $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
-           osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
-         test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
-         test -f $$libpath/libqt-mt.so && lib=qt-mt; \
-         cflags="-I$$dir/include"; \
-         libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
-         moc="$$dir/bin/moc"; \
-       fi; \
-       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 "*"; \
-         moc="/usr/bin/moc"; \
+         cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
+         libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
+         binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
+         moc="$$binpath/bin/moc"; \
        fi; \
        echo "KC_QT_CFLAGS=$$cflags" > $@; \
        echo "KC_QT_LIBS=$$libs" >> $@; \
index 33857cefefcd85d4db5f4b33c7b2d81b40b89e46..93005bf9839c63d424c4cdfd8ec3434571f90f65 100644 (file)
@@ -425,7 +425,7 @@ static void check_conf(struct menu *menu)
                    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
                        if (input_mode == listnewconfig) {
                                if (sym->name && !sym_is_choice_value(sym)) {
-                                       printf("CONFIG_%s\n", sym->name);
+                                       printf("%s%s\n", CONFIG_, sym->name);
                                }
                        } else if (input_mode != oldnoconfig) {
                                if (!conf_cnt++)
@@ -466,7 +466,7 @@ int main(int ac, char **av)
        bindtextdomain(PACKAGE, LOCALEDIR);
        textdomain(PACKAGE);
 
-       while ((opt = getopt_long_only(ac, av, "", long_opts, NULL)) != -1) {
+       while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
                input_mode = (enum input_mode)opt;
                switch (opt) {
                case silentoldconfig:
@@ -507,8 +507,7 @@ int main(int ac, char **av)
                name = conf_get_configname();
                if (stat(name, &tmpstat)) {
                        fprintf(stderr, _("***\n"
-                               "*** You have not yet configured your Buildroot!\n"
-                               "*** (missing .config file \"%s\")\n"
+                               "*** Configuration file \"%s\" not found!\n"
                                "***\n"
                                "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
                                "*** \"make menuconfig\" or \"make xconfig\").\n"
@@ -570,7 +569,7 @@ int main(int ac, char **av)
                        name = getenv("KCONFIG_NOSILENTUPDATE");
                        if (name && *name) {
                                fprintf(stderr,
-                                       _("\n*** Buildroot configuration requires explicit update.\n\n"));
+                                       _("\n*** The configuration requires explicit update.\n\n"));
                                return 1;
                        }
                }
@@ -622,11 +621,11 @@ int main(int ac, char **av)
                 * All other commands are only used to generate a config.
                 */
                if (conf_get_changed() && conf_write(NULL)) {
-                       fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
+                       fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
                        exit(1);
                }
                if (conf_write_autoconf()) {
-                       fprintf(stderr, _("\n*** Error during update of the Buildroot configuration.\n\n"));
+                       fprintf(stderr, _("\n*** Error during update of the configuration.\n\n"));
                        return 1;
                }
        } else if (input_mode == savedefconfig) {
@@ -637,7 +636,7 @@ int main(int ac, char **av)
                }
        } else if (input_mode != listnewconfig) {
                if (conf_write(NULL)) {
-                       fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
+                       fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
                        exit(1);
                }
        }
index 6455dc2fbf576324dca12f151f0df675f0ad2065..12d94dcfa9935b237be4cef552748f2e32f19d51 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <sys/stat.h>
 #include <ctype.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -19,6 +20,9 @@
 static void conf_warning(const char *fmt, ...)
        __attribute__ ((format (printf, 1, 2)));
 
+static void conf_message(const char *fmt, ...)
+       __attribute__ ((format (printf, 1, 2)));
+
 static const char *conf_filename;
 static int conf_lineno, conf_warnings, conf_unsaved;
 
@@ -35,6 +39,29 @@ static void conf_warning(const char *fmt, ...)
        conf_warnings++;
 }
 
+static void conf_default_message_callback(const char *fmt, va_list ap)
+{
+       printf("#\n# ");
+       vprintf(fmt, ap);
+       printf("\n#\n");
+}
+
+static void (*conf_message_callback) (const char *fmt, va_list ap) =
+       conf_default_message_callback;
+void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
+{
+       conf_message_callback = fn;
+}
+
+static void conf_message(const char *fmt, ...)
+{
+       va_list ap;
+
+       va_start(ap, fmt);
+       if (conf_message_callback)
+               conf_message_callback(fmt, ap);
+}
+
 const char *conf_get_configname(void)
 {
        char *name = getenv("BUILDROOT_CONFIG");
@@ -182,9 +209,8 @@ int conf_read_simple(const char *name, int def)
                        name = conf_expand_value(prop->expr->left.sym->name);
                        in = zconf_fopen(name);
                        if (in) {
-                               printf(_("#\n"
-                                        "# using defaults found in %s\n"
-                                        "#\n"), name);
+                               conf_message(_("using defaults found in %s"),
+                                        name);
                                goto load;
                        }
                }
@@ -219,9 +245,8 @@ load:
        while (fgets(line, sizeof(line), in)) {
                conf_lineno++;
                sym = NULL;
-               switch (line[0]) {
-               case '#':
-                       if (line[1]!=' ')
+               if (line[0] == '#') {
+                       if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
                                continue;
                        p = strchr(line + 2, ' ');
                        if (!p)
@@ -233,7 +258,7 @@ load:
                                sym = sym_find(line + 2);
                                if (!sym) {
                                        sym_add_change_count(1);
-                                       break;
+                                       goto setsym;
                                }
                        } else {
                                sym = sym_lookup(line + 2, 0);
@@ -252,8 +277,7 @@ load:
                        default:
                                ;
                        }
-                       break;
-               case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+               } else if (isupper(line[0])) {
                        p = strchr(line, '=');
                        if (!p)
                                continue;
@@ -268,7 +292,7 @@ load:
                                sym = sym_find(line);
                                if (!sym) {
                                        sym_add_change_count(1);
-                                       break;
+                                       goto setsym;
                                }
                        } else {
                                sym = sym_lookup(line, 0);
@@ -280,14 +304,12 @@ load:
                        }
                        if (conf_set_sym_val(sym, def, def_flags, p))
                                continue;
-                       break;
-               case '\r':
-               case '\n':
-                       break;
-               default:
-                       conf_warning("unexpected data");
+               } else {
+                       if (line[0] != '\r' && line[0] != '\n')
+                               conf_warning("unexpected data");
                        continue;
                }
+setsym:
                if (sym && sym_is_choice_value(sym)) {
                        struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
                        switch (sym->def[def].tri) {
@@ -428,7 +450,8 @@ static void conf_write_symbol(struct symbol *sym, enum symbol_type type,
                switch (sym_get_tristate_value(sym)) {
                case no:
                        if (write_no)
-                               fprintf(out, "# %s is not set\n", sym->name);
+                               fprintf(out, "# %s is not set\n",
+                                   sym->name);
                        break;
                case mod:
                        fprintf(out, "%s=m\n", sym->name);
@@ -579,8 +602,6 @@ int conf_write(const char *name)
        if (!out)
                return 1;
 
-       sym = sym_lookup("BR2_VERSION", 0);
-       sym_calc_value(sym);
        time(&now);
        env = getenv("KCONFIG_NOTIMESTAMP");
        if (env && *env)
@@ -588,10 +609,10 @@ int conf_write(const char *name)
 
        fprintf(out, _("#\n"
                       "# Automatically generated make config: don't edit\n"
-                      "# Buildroot version: %s\n"
+                      "# %s\n"
                       "%s%s"
                       "#\n"),
-                    sym_get_string_value(sym),
+                    rootmenu.prompt->text,
                     use_timestamp ? "# " : "",
                     use_timestamp ? ctime(&now) : "");
 
@@ -648,9 +669,7 @@ next:
                        return 1;
        }
 
-       printf(_("#\n"
-                "# configuration written to %s\n"
-                "#\n"), newname);
+       conf_message(_("configuration written to %s"), newname);
 
        sym_set_change_count(0);
 
@@ -830,24 +849,22 @@ int conf_write_autoconf(void)
                return 1;
        }
 
-       sym = sym_lookup("BR2_VERSION", 0);
-       sym_calc_value(sym);
        time(&now);
        fprintf(out, "#\n"
                     "# Automatically generated make config: don't edit\n"
-                    "# Buildroot version: %s\n"
+                    "# %s\n"
                     "# %s"
                     "#\n",
-                    sym_get_string_value(sym),
-                    ctime(&now));
+                    rootmenu.prompt->text, ctime(&now));
        fprintf(tristate, "#\n"
                          "# Automatically generated - do not edit\n"
                          "\n");
        fprintf(out_h, "/*\n"
                       " * Automatically generated C config: don't edit\n"
+                      " * %s\n"
                       " * %s"
                       " */\n",
-                      ctime(&now));
+                      rootmenu.prompt->text, ctime(&now));
 
        for_all_symbols(i, sym) {
                sym_calc_value(sym);
@@ -865,14 +882,17 @@ int conf_write_autoconf(void)
                        case no:
                                break;
                        case mod:
-                               fprintf(tristate, "%s=M\n", sym->name);
-                               fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
+                               fprintf(tristate, "%s=M\n",
+                                   sym->name);
+                               fprintf(out_h, "#define %s_MODULE 1\n",
+                                   sym->name);
                                break;
                        case yes:
                                if (sym->type == S_TRISTATE)
-                                       fprintf(tristate, "%s=Y\n",
-                                                       sym->name);
-                               fprintf(out_h, "#define %s 1\n", sym->name);
+                                       fprintf(tristate,"%s=Y\n",
+                                           sym->name);
+                               fprintf(out_h, "#define %s 1\n",
+                                   sym->name);
                                break;
                        }
                        break;
@@ -882,12 +902,14 @@ int conf_write_autoconf(void)
                case S_HEX:
                        str = sym_get_string_value(sym);
                        if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
-                               fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
+                               fprintf(out_h, "#define %s 0x%s\n",
+                                   sym->name, str);
                                break;
                        }
                case S_INT:
                        str = sym_get_string_value(sym);
-                       fprintf(out_h, "#define %s %s\n", sym->name, str);
+                       fprintf(out_h, "#define %s %s\n",
+                           sym->name, str);
                        break;
                default:
                        break;
index 170459c224a13d94be08b00b72b63c1503303ed1..184eb6a0b505cc50e7435950b7a770923ba06cb2 100644 (file)
@@ -18,7 +18,7 @@ extern "C" {
 struct file {
        struct file *next;
        struct file *parent;
-       char *name;
+       const char *name;
        int lineno;
        int flags;
 };
index f626061de59d62e25be914a49fa49c067ba311a4..21185a0cbde60b8a3dbb97eaa4e9b98dd8f620bc 100644 (file)
@@ -133,7 +133,6 @@ void init_main_window(const gchar * glade_file)
        GladeXML *xml;
        GtkWidget *widget;
        GtkTextBuffer *txtbuf;
-       char title[256];
        GtkStyle *style;
 
        xml = glade_xml_new(glade_file, "window1", NULL);
@@ -210,9 +209,7 @@ void init_main_window(const gchar * glade_file)
                                          /*"style", PANGO_STYLE_OBLIQUE, */
                                          NULL);
 
-       sprintf(title, _("Buildroot v%s Configuration"),
-               getenv("BR2_VERSION"));
-       gtk_window_set_title(GTK_WINDOW(main_wnd), title);
+       gtk_window_set_title(GTK_WINDOW(main_wnd), rootmenu.prompt->text);
 
        gtk_widget_show(main_wnd);
 }
@@ -671,8 +668,7 @@ void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
 {
        GtkWidget *dialog;
        const gchar *intro_text = _(
-           "Welcome to gkc, the GTK+ graphical kernel configuration tool\n"
-           "for Linux.\n"
+           "Welcome to gkc, the GTK+ graphical configuration tool\n"
            "For each option, a blank box indicates the feature is disabled, a\n"
            "check indicates it is enabled, and a dot indicates that it is to\n"
            "be compiled as a module.  Clicking on the box will cycle through the three states.\n"
@@ -1531,12 +1527,6 @@ int main(int ac, char *av[])
        else
                glade_file = g_strconcat(g_get_current_dir(), "/", av[0], ".glade", NULL);
 
-       /* Load the interface and connect signals */
-       init_main_window(glade_file);
-       init_tree_model();
-       init_left_tree();
-       init_right_tree();
-
        /* Conf stuffs */
        if (ac > 1 && av[1][0] == '-') {
                switch (av[1][1]) {
@@ -1556,6 +1546,12 @@ int main(int ac, char *av[])
        fixup_rootmenu(&rootmenu);
        conf_read(NULL);
 
+       /* Load the interface and connect signals */
+       init_main_window(glade_file);
+       init_tree_model();
+       init_left_tree();
+       init_right_tree();
+
        switch (view_mode) {
        case SINGLE_VIEW:
                display_tree_part();
index 8e7d99e37e0bd6482a63573ccc614cf1abedd7e5..6cbc1bb45908d4ddc484d7a9962d27278bdce7e9 100644 (file)
@@ -1,5 +1,4 @@
 <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
 
 <glade-interface>
 
index dcc3fcc0cc9a3d63989932ea1e5139200544fd75..e9d8e791bf0d2d71e19dbaa447488b138a5d00fe 100644 (file)
@@ -63,11 +63,11 @@ next:
 
 struct file_line {
        struct file_line *next;
-       char*            file;
-       int              lineno;
+       const char *file;
+       int lineno;
 };
 
-static struct file_line *file_line__new(char *file, int lineno)
+static struct file_line *file_line__new(const char *file, int lineno)
 {
        struct file_line *self = malloc(sizeof(*self));
 
@@ -90,7 +90,8 @@ struct message {
 
 static struct message *message__list;
 
-static struct message *message__new(const char *msg, char *option, char *file, int lineno)
+static struct message *message__new(const char *msg, char *option,
+                                   const char *file, int lineno)
 {
        struct message *self = malloc(sizeof(*self));
 
@@ -130,7 +131,8 @@ static struct message *mesage__find(const char *msg)
        return m;
 }
 
-static int message__add_file_line(struct message *self, char *file, int lineno)
+static int message__add_file_line(struct message *self, const char *file,
+                                 int lineno)
 {
        int rc = -1;
        struct file_line *fl = file_line__new(file, lineno);
@@ -145,7 +147,8 @@ out:
        return rc;
 }
 
-static int message__add(const char *msg, char *option, char *file, int lineno)
+static int message__add(const char *msg, char *option, const char *file,
+                       int lineno)
 {
        int rc = 0;
        char bf[16384];
index fdc7113b08d112ae5db2c2a6a93dae5ca44ef065..6eb039718259a38838268c7df29a2212cb265bed 100644 (file)
@@ -2373,9 +2373,10 @@ void zconf_nextfile(const char *name)
        memset(buf, 0, sizeof(*buf));
 
        current_buf->state = YY_CURRENT_BUFFER;
-       zconfin = zconf_fopen(name);
+       zconfin = zconf_fopen(file->name);
        if (!zconfin) {
-               printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+               printf("%s:%d: can't open file \"%s\"\n",
+                   zconf_curname(), zconf_lineno(), file->name);
                exit(1);
        }
        zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
@@ -2422,7 +2423,7 @@ int zconf_lineno(void)
        return current_pos.lineno;
 }
 
-char *zconf_curname(void)
+const char *zconf_curname(void)
 {
        return current_pos.file ? current_pos.file->name : "<none>";
 }
index bdf71bd314127755cdf3f5d5d3ac02ecbeeb1f71..ec5b41820febb7efced719ed4317ef78f0325cc5 100644 (file)
@@ -31,12 +31,18 @@ extern "C" {
 
 #define SRCTREE "srctree"
 
+#ifndef PACKAGE
 #define PACKAGE "linux"
+#endif
+
 #define LOCALEDIR "/usr/share/locale"
 
 #define _(text) gettext(text)
 #define N_(text) (text)
 
+#ifndef CONFIG_
+#define CONFIG_ "BR2_"
+#endif
 
 #define TF_COMMAND     0x0001
 #define TF_PARAM       0x0002
@@ -70,7 +76,7 @@ FILE *zconf_fopen(const char *name);
 void zconf_initscan(const char *name);
 void zconf_nextfile(const char *name);
 int zconf_lineno(void);
-char *zconf_curname(void);
+const char *zconf_curname(void);
 
 /* conf.c */
 void xfgets(char *str, int size, FILE *in);
index 9a948c9ce44edd4732d6beb579266b23b9049cb0..17342fef38b94b877f0b5e93481314c27211d093 100644 (file)
@@ -1,3 +1,4 @@
+#include <stdarg.h>
 
 /* confdata.c */
 P(conf_parse,void,(const char *name));
@@ -8,6 +9,7 @@ P(conf_write,int,(const char *name));
 P(conf_write_autoconf,int,(void));
 P(conf_get_changed,bool,(void));
 P(conf_set_changed_callback, void,(void (*fn)(void)));
+P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
 
 /* menu.c */
 P(rootmenu,struct menu,);
@@ -28,6 +30,7 @@ P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
 
 P(sym_lookup,struct symbol *,(const char *name, int flags));
 P(sym_find,struct symbol *,(const char *name));
+P(sym_expand_string_value,const char *,(const char *in));
 P(sym_re_search,struct symbol **,(const char *pattern));
 P(sym_type_name,const char *,(enum symbol_type type));
 P(sym_calc_value,void,(struct symbol *sym));
index 361866f68e7853ef56dd270e6d65e93edbfa8a95..969cd4cc0e90b7dc9e6fe38a2eea1ba29f8d37bd 100644 (file)
@@ -23,6 +23,8 @@ ccflags()
                echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
        elif [ -f /usr/include/ncurses/curses.h ]; then
                echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
+       elif [ -f /usr/include/ncursesw/curses.h ]; then
+               echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
        elif [ -f /usr/include/ncurses.h ]; then
                echo '-DCURSES_LOC="<ncurses.h>"'
        else
index c0903ddff63652bd36b9921d8a4556f9b7c8f0ec..3ed8a253001ed1335994aace333d52d77cb7777a 100644 (file)
 static const char mconf_readme[] = N_(
 "Overview\n"
 "--------\n"
-"Some features may be built directly into Buildroot. Some features\n"
-"may be completely removed altogether.  There are also certain\n"
-"parameters which are not really features, but must be\n"
-"entered in as decimal or hexadecimal numbers or possibly text.\n"
+"This interface let you select features and parameters for the build.\n"
+"Features can either be built-in, modularized, or ignored. Parameters\n"
+"must be entered in as decimal or hexadecimal numbers or text.\n"
 "\n"
 "Menu items beginning with following braces represent features that\n"
 "  [ ] can be built in or removed\n"
@@ -149,9 +148,9 @@ static const char mconf_readme[] = N_(
 "\n"
 "Optional personality available\n"
 "------------------------------\n"
-"If you prefer to have all of the options listed in a single\n"
-"menu, rather than the default multimenu hierarchy, run the menuconfig\n"
-"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
+"If you prefer to have all of the options listed in a single menu, rather\n"
+"than the default multimenu hierarchy, run the menuconfig with\n"
+"MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
 "\n"
 "make MENUCONFIG_MODE=single_menu menuconfig\n"
 "\n"
@@ -206,12 +205,12 @@ load_config_text[] = N_(
        "last retrieved.  Leave blank to abort."),
 load_config_help[] = N_(
        "\n"
-       "For various reasons, one may wish to keep several different Buildroot\n"
+       "For various reasons, one may wish to keep several different\n"
        "configurations available on a single machine.\n"
        "\n"
        "If you have saved a previous configuration in a file other than the\n"
-       "Buildroot's default, entering the name of the file here will allow you\n"
-       "to modify that configuration.\n"
+       "default one, entering its name here will allow you to modify that\n"
+       "configuration.\n"
        "\n"
        "If you are uncertain, then you have probably never used alternate\n"
        "configuration files. You should therefore leave this blank to abort.\n"),
@@ -220,8 +219,8 @@ save_config_text[] = N_(
        "as an alternate.  Leave blank to abort."),
 save_config_help[] = N_(
        "\n"
-       "For various reasons, one may wish to keep different Buildroot\n"
-       "configurations available on a single machine.\n"
+       "For various reasons, one may wish to keep different configurations\n"
+       "available on a single machine.\n"
        "\n"
        "Entering a file name here will allow you to later retrieve, modify\n"
        "and use the current configuration as an alternate to whatever\n"
@@ -231,7 +230,7 @@ save_config_help[] = N_(
        "leave this blank.\n"),
 search_help[] = N_(
        "\n"
-       "Search for CONFIG_ symbols and display their relations.\n"
+       "Search for symbols and display their relations.\n"
        "Regular expressions are allowed.\n"
        "Example: search for \"^FOO\"\n"
        "Result:\n"
@@ -248,7 +247,7 @@ search_help[] = N_(
        "Selected by: BAR\n"
        "-----------------------------------------------------------------\n"
        "o The line 'Prompt:' shows the text used in the menu structure for\n"
-       "  this CONFIG_ symbol\n"
+       "  this symbol\n"
        "o The 'Defined at' line tell at what file / line number the symbol\n"
        "  is defined\n"
        "o The 'Depends on:' line tell what symbols needs to be defined for\n"
@@ -264,9 +263,9 @@ search_help[] = N_(
        "Only relevant lines are shown.\n"
        "\n\n"
        "Search examples:\n"
-       "Examples: USB  => find all CONFIG_ symbols containing USB\n"
-       "          ^USB => find all CONFIG_ symbols starting with USB\n"
-       "          USB$ => find all CONFIG_ symbols ending with USB\n"
+       "Examples: USB  => find all symbols containing USB\n"
+       "          ^USB => find all symbols starting with USB\n"
+       "          USB$ => find all symbols ending with USB\n"
        "\n");
 
 static int indent;
@@ -289,13 +288,9 @@ static void set_config_filename(const char *config_filename)
 {
        static char menu_backtitle[PATH_MAX+128];
        int size;
-       struct symbol *sym;
 
-       sym = sym_lookup("BR2_VERSION", 0);
-       sym_calc_value(sym);
        size = snprintf(menu_backtitle, sizeof(menu_backtitle),
-                       _("%s - buildroot v%s Configuration"),
-                       config_filename, sym_get_string_value(sym));
+                       "%s - %s", config_filename, rootmenu.prompt->text);
        if (size >= sizeof(menu_backtitle))
                menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
        set_dialog_backtitle(menu_backtitle);
@@ -315,7 +310,8 @@ static void search_conf(void)
 again:
        dialog_clear();
        dres = dialog_inputbox(_("Search Configuration Parameter"),
-                             _("Enter (sub)string to search for"),
+                             _("Enter " CONFIG_ " (sub)string to search for "
+                               "(with or without \"" CONFIG_ "\")"),
                              10, 75, "");
        switch (dres) {
        case 0:
@@ -327,10 +323,10 @@ again:
                return;
        }
 
-       /* strip CONFIG_ if necessary */
+       /* strip the prefix if necessary */
        dialog_input = dialog_input_result;
-       if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
-               dialog_input += 7;
+       if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
+               dialog_input += strlen(CONFIG_);
 
        sym_arr = sym_re_search(dialog_input);
        res = get_relations_str(sym_arr);
@@ -832,7 +828,7 @@ int main(int ac, char **av)
                if (conf_get_changed())
                        res = dialog_yesno(NULL,
                                           _("Do you wish to save your "
-                                            "new Buildroot configuration?\n"
+                                            "new configuration?\n"
                                             "<ESC><ESC> to continue."),
                                           6, 60);
                else
@@ -844,20 +840,20 @@ int main(int ac, char **av)
        case 0:
                if (conf_write(filename)) {
                        fprintf(stderr, _("\n\n"
-                               "Error during writing of the Buildroot configuration.\n"
-                               "Your Buildroot configuration changes were NOT saved."
+                               "Error while writing of the configuration.\n"
+                               "Your configuration changes were NOT saved."
                                "\n\n"));
                        return 1;
                }
        case -1:
                printf(_("\n\n"
-                       "*** End of Buildroot configuration.\n"
-                       "*** Execute 'make' to build Buildroot or try 'make help'."
+                       "*** End of the configuration.\n"
+                       "*** Execute 'make' to start the build or try 'make help'."
                        "\n\n"));
                break;
        default:
                fprintf(stderr, _("\n\n"
-                       "Your Buildroot configuration changes were NOT saved."
+                       "Your configuration changes were NOT saved."
                        "\n\n"));
        }
 
index edda8b49619d9e66ff70e16dd8ef68caf4a86bc6..11afee2bc37e118d7c020b5d8a2dc5dafc9dcb4a 100644 (file)
@@ -10,7 +10,7 @@
 #include "lkc.h"
 
 static const char nohelp_text[] = N_(
-       "There is no help available for this kernel option.\n");
+       "There is no help available for this option.\n");
 
 struct menu rootmenu;
 static struct menu **last_entry_ptr;
@@ -138,7 +138,7 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e
                        while (isspace(*prompt))
                                prompt++;
                }
-               if (current_entry->prompt)
+               if (current_entry->prompt && current_entry != &rootmenu)
                        prop_warn(prop, "prompt redefined");
                current_entry->prompt = prop;
        }
@@ -563,7 +563,7 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
 
        if (menu_has_help(menu)) {
                if (sym->name) {
-                       str_printf(help, "CONFIG_%s:\n\n", sym->name);
+                       str_printf(help, "%s:\n\n", sym->name);
                        str_append(help, _(menu_get_help(menu)));
                        str_append(help, "\n");
                }
index 2ba71bcd38e65381aa347e093a2dc7b338d03dc0..272a987f23e0bc56040c0931a363277395c511f1 100644 (file)
@@ -5,25 +5,26 @@
  * Derived from menuconfig.
  *
  */
+#define _GNU_SOURCE
+#include <string.h>
 #define LKC_DIRECT_LINK
 #include "lkc.h"
 #include "nconf.h"
+#include <ctype.h>
 
 static const char nconf_readme[] = N_(
 "Overview\n"
 "--------\n"
-"Some kernel features may be built directly into the kernel.\n"
-"Some may be made into loadable runtime modules.  Some features\n"
-"may be completely removed altogether.  There are also certain\n"
-"kernel parameters which are not really features, but must be\n"
-"entered in as decimal or hexadecimal numbers or possibly text.\n"
+"This interface let you select features and parameters for the build.\n"
+"Features can either be built-in, modularized, or ignored. Parameters\n"
+"must be entered in as decimal or hexadecimal numbers or text.\n"
 "\n"
 "Menu items beginning with following braces represent features that\n"
 "  [ ] can be built in or removed\n"
 "  < > can be built in, modularized or removed\n"
 "  { } can be built in or modularized (selected by other feature)\n"
 "  - - are selected by other feature,\n"
-"  XXX cannot be selected. use Symbol Info to find out why,\n"
+"  XXX cannot be selected. Use Symbol Info to find out why,\n"
 "while *, M or whitespace inside braces means to build in, build as\n"
 "a module or to exclude the feature respectively.\n"
 "\n"
@@ -41,9 +42,13 @@ static const char nconf_readme[] = N_(
 "   pressing <Enter> of <right-arrow>. Use <Esc> or <left-arrow> to go back.\n"
 "   Submenus are designated by \"--->\".\n"
 "\n"
-"   Shortcut: Press the option's highlighted letter (hotkey).\n"
-"             Pressing a hotkey more than once will sequence\n"
-"             through all visible items which use that hotkey.\n"
+"   Searching: pressing '/' triggers interactive search mode.\n"
+"              nconfig performs a case insensitive search for the string\n"
+"              in the menu prompts (no regex support).\n"
+"              Pressing the up/down keys highlights the previous/next\n"
+"              matching item. Backspace removes one character from the\n"
+"              match string. Pressing either '/' again or ESC exits\n"
+"              search mode. All other keys behave normally.\n"
 "\n"
 "   You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
 "   unseen options into view.\n"
@@ -88,7 +93,7 @@ static const char nconf_readme[] = N_(
 "-----------------------------\n"
 "nconfig supports the use of alternate configuration files for\n"
 "those who, for various reasons, find it necessary to switch\n"
-"between different kernel configurations.\n"
+"between different configurations.\n"
 "\n"
 "At the end of the main menu you will find two options.  One is\n"
 "for saving the current configuration to a file of your choosing.\n"
@@ -121,9 +126,9 @@ static const char nconf_readme[] = N_(
 "\n"
 "Optional personality available\n"
 "------------------------------\n"
-"If you prefer to have all of the kernel options listed in a single\n"
-"menu, rather than the default multimenu hierarchy, run the nconfig\n"
-"with NCONFIG_MODE environment variable set to single_menu. Example:\n"
+"If you prefer to have all of the options listed in a single menu, rather\n"
+"than the default multimenu hierarchy, run the nconfig with NCONFIG_MODE\n"
+"environment variable set to single_menu. Example:\n"
 "\n"
 "make NCONFIG_MODE=single_menu nconfig\n"
 "\n"
@@ -141,21 +146,21 @@ menu_no_f_instructions[] = N_(
 " <Enter> or <right-arrow> selects submenus --->.\n"
 " Capital Letters are hotkeys.\n"
 " Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
-" Pressing SpaceBar toggles between the above options\n"
-" Press <Esc> or <left-arrow> to go back one menu, \n"
+" Pressing SpaceBar toggles between the above options.\n"
+" Press <Esc> or <left-arrow> to go back one menu,\n"
 " <?> or <h> for Help, </> for Search.\n"
-" <1> is interchangable with <F1>, <2> with <F2>, etc.\n"
+" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
 " Legend: [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-" <Esc> always leaves the current window\n"),
+" <Esc> always leaves the current window.\n"),
 menu_instructions[] = N_(
 " Arrow keys navigate the menu.\n"
 " <Enter> or <right-arrow> selects submenus --->.\n"
 " Capital Letters are hotkeys.\n"
 " Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
 " Pressing SpaceBar toggles between the above options\n"
-" Press <Esc>, <F3> or <left-arrow> to go back one menu, \n"
+" Press <Esc>, <F5> or <left-arrow> to go back one menu,\n"
 " <?>, <F1> or <h> for Help, </> for Search.\n"
-" <1> is interchangable with <F1>, <2> with <F2>, etc.\n"
+" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
 " Legend: [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
 " <Esc> always leaves the current window\n"),
 radiolist_instructions[] = N_(
@@ -178,19 +183,19 @@ setmod_text[] = N_(
 "has been configured as a module.\n"
 "As a result, this feature will be built as a module."),
 nohelp_text[] = N_(
-"There is no help available for this kernel option.\n"),
+"There is no help available for this option.\n"),
 load_config_text[] = N_(
 "Enter the name of the configuration file you wish to load.\n"
 "Accept the name shown to restore the configuration you\n"
 "last retrieved.  Leave blank to abort."),
 load_config_help[] = N_(
 "\n"
-"For various reasons, one may wish to keep several different kernel\n"
+"For various reasons, one may wish to keep several different\n"
 "configurations available on a single machine.\n"
 "\n"
 "If you have saved a previous configuration in a file other than the\n"
-"kernel's default, entering the name of the file here will allow you\n"
-"to modify that configuration.\n"
+"default one, entering its name here will allow you to modify that\n"
+"configuration.\n"
 "\n"
 "If you are uncertain, then you have probably never used alternate\n"
 "configuration files.  You should therefor leave this blank to abort.\n"),
@@ -199,8 +204,8 @@ save_config_text[] = N_(
 "as an alternate.  Leave blank to abort."),
 save_config_help[] = N_(
 "\n"
-"For various reasons, one may wish to keep different kernel\n"
-"configurations available on a single machine.\n"
+"For various reasons, one may wish to keep different configurations\n"
+"available on a single machine.\n"
 "\n"
 "Entering a file name here will allow you to later retrieve, modify\n"
 "and use the current configuration as an alternate to whatever\n"
@@ -210,8 +215,8 @@ save_config_help[] = N_(
 "leave this blank.\n"),
 search_help[] = N_(
 "\n"
-"Search for CONFIG_ symbols and display their relations.\n"
-"Regular expressions are allowed.\n"
+"Search for symbols and display their relations. Regular expressions\n"
+"are allowed.\n"
 "Example: search for \"^FOO\"\n"
 "Result:\n"
 "-----------------------------------------------------------------\n"
@@ -227,7 +232,7 @@ search_help[] = N_(
 "Selected by: BAR\n"
 "-----------------------------------------------------------------\n"
 "o The line 'Prompt:' shows the text used in the menu structure for\n"
-"  this CONFIG_ symbol\n"
+"  this symbol\n"
 "o The 'Defined at' line tell at what file / line number the symbol\n"
 "  is defined\n"
 "o The 'Depends on:' line tell what symbols needs to be defined for\n"
@@ -243,16 +248,15 @@ search_help[] = N_(
 "Only relevant lines are shown.\n"
 "\n\n"
 "Search examples:\n"
-"Examples: USB   = > find all CONFIG_ symbols containing USB\n"
-"          ^USB => find all CONFIG_ symbols starting with USB\n"
-"          USB$ => find all CONFIG_ symbols ending with USB\n"
+"Examples: USB   = > find all symbols containing USB\n"
+"          ^USB => find all symbols starting with USB\n"
+"          USB$ => find all symbols ending with USB\n"
 "\n");
 
 struct mitem {
        char str[256];
        char tag;
        void *usrptr;
-       int is_hot;
        int is_visible;
 };
 
@@ -275,14 +279,6 @@ static int items_num;
 static int global_exit;
 /* the currently selected button */
 const char *current_instructions = menu_instructions;
-/* this array is used to implement hot keys. it is updated in item_make and
- * resetted in clean_items. It would be better to use a hash, but lets keep it
- * simple... */
-#define MAX_SAME_KEY MAX_MENU_ITEMS
-struct {
-       int count;
-       int ptrs[MAX_MENU_ITEMS];
-} hotkeys[1<<(sizeof(char)*8)];
 
 static void conf(struct menu *menu);
 static void conf_choice(struct menu *menu);
@@ -292,6 +288,7 @@ static void conf_save(void);
 static void show_help(struct menu *menu);
 static int do_exit(void);
 static void setup_windows(void);
+static void search_conf(void);
 
 typedef void (*function_key_handler_t)(int *key, struct menu *menu);
 static void handle_f1(int *key, struct menu *current_item);
@@ -302,6 +299,7 @@ static void handle_f5(int *key, struct menu *current_item);
 static void handle_f6(int *key, struct menu *current_item);
 static void handle_f7(int *key, struct menu *current_item);
 static void handle_f8(int *key, struct menu *current_item);
+static void handle_f9(int *key, struct menu *current_item);
 
 struct function_keys {
        const char *key_str;
@@ -310,7 +308,7 @@ struct function_keys {
        function_key_handler_t handler;
 };
 
-static const int function_keys_num = 8;
+static const int function_keys_num = 9;
 struct function_keys function_keys[] = {
        {
                .key_str = "F1",
@@ -320,13 +318,13 @@ struct function_keys function_keys[] = {
        },
        {
                .key_str = "F2",
-               .func = "Symbol Info",
+               .func = "Sym Info",
                .key = F_SYMBOL,
                .handler = handle_f2,
        },
        {
                .key_str = "F3",
-               .func = "Instructions",
+               .func = "Insts",
                .key = F_INSTS,
                .handler = handle_f3,
        },
@@ -356,9 +354,15 @@ struct function_keys function_keys[] = {
        },
        {
                .key_str = "F8",
+               .func = "Sym Search",
+               .key = F_SEARCH,
+               .handler = handle_f8,
+       },
+       {
+               .key_str = "F9",
                .func = "Exit",
                .key = F_EXIT,
-               .handler = handle_f8,
+               .handler = handle_f9,
        },
 };
 
@@ -444,8 +448,15 @@ static void handle_f7(int *key, struct menu *current_item)
        return;
 }
 
-/* exit */
+/* search */
 static void handle_f8(int *key, struct menu *current_item)
+{
+       search_conf();
+       return;
+}
+
+/* exit */
+static void handle_f9(int *key, struct menu *current_item)
 {
        do_exit();
        return;
@@ -479,110 +490,44 @@ static void clean_items(void)
                free_item(curses_menu_items[i]);
        bzero(curses_menu_items, sizeof(curses_menu_items));
        bzero(k_menu_items, sizeof(k_menu_items));
-       bzero(hotkeys, sizeof(hotkeys));
        items_num = 0;
 }
 
-/* return the index of the next hot item, or -1 if no such item exists */
-static int get_next_hot(int c)
-{
-       static int hot_index;
-       static int hot_char;
-
-       if (c < 0 || c > 255 || hotkeys[c].count <= 0)
-               return -1;
-
-       if (hot_char == c) {
-               hot_index = (hot_index+1)%hotkeys[c].count;
-               return hotkeys[c].ptrs[hot_index];
-       } else {
-               hot_char = c;
-               hot_index = 0;
-               return hotkeys[c].ptrs[0];
-       }
-}
-
-/* can the char c be a hot key? no, if c is a common shortcut used elsewhere */
-static int canbhot(char c)
-{
-       c = tolower(c);
-       return isalnum(c) && c != 'y' && c != 'm' && c != 'h' &&
-               c != 'n' && c != '?';
-}
-
-/* check if str already contains a hot key. */
-static int is_hot(int index)
-{
-       return k_menu_items[index].is_hot;
-}
+typedef enum {MATCH_TINKER_PATTERN_UP, MATCH_TINKER_PATTERN_DOWN,
+       FIND_NEXT_MATCH_DOWN, FIND_NEXT_MATCH_UP} match_f;
 
-/* find the first possible hot key, and mark it.
- * index is the index of the item in the menu
- * return 0 on success*/
-static int make_hot(char *dest, int len, const char *org, int index)
+/* return the index of the matched item, or -1 if no such item exists */
+static int get_mext_match(const char *match_str, match_f flag)
 {
-       int position = -1;
-       int i;
-       int tmp;
-       int c;
-       int org_len = strlen(org);
-
-       if (org == NULL || is_hot(index))
-               return 1;
-
-       /* make sure not to make hot keys out of markers.
-        * find where to start looking for a hot key
-        */
-       i = 0;
-       /* skip white space */
-       while (i < org_len && org[i] == ' ')
-               i++;
-       if (i == org_len)
-               return -1;
-       /* if encountering '(' or '<' or '[', find the match and look from there
-        **/
-       if (org[i] == '[' || org[i] == '<' || org[i] == '(') {
-               i++;
-               for (; i < org_len; i++)
-                       if (org[i] == ']' || org[i] == '>' || org[i] == ')')
-                               break;
-       }
-       if (i == org_len)
-               return -1;
-       for (; i < org_len; i++) {
-               if (canbhot(org[i]) && org[i-1] != '<' && org[i-1] != '(') {
-                       position = i;
-                       break;
-               }
+       int match_start = item_index(current_item(curses_menu));
+       int index;
+
+       if (flag == FIND_NEXT_MATCH_DOWN)
+               ++match_start;
+       else if (flag == FIND_NEXT_MATCH_UP)
+               --match_start;
+
+       index = match_start;
+       index = (index + items_num) % items_num;
+       while (true) {
+               char *str = k_menu_items[index].str;
+               if (strcasestr(str, match_str) != 0)
+                       return index;
+               if (flag == FIND_NEXT_MATCH_UP ||
+                   flag == MATCH_TINKER_PATTERN_UP)
+                       --index;
+               else
+                       ++index;
+               index = (index + items_num) % items_num;
+               if (index == match_start)
+                       return -1;
        }
-       if (position == -1)
-               return 1;
-
-       /* ok, char at org[position] should be a hot key to this item */
-       c = tolower(org[position]);
-       tmp = hotkeys[c].count;
-       hotkeys[c].ptrs[tmp] = index;
-       hotkeys[c].count++;
-       /*
-          snprintf(dest, len, "%.*s(%c)%s", position, org, org[position],
-          &org[position+1]);
-          */
-       /* make org[position] uppercase, and all leading letter small case */
-       strncpy(dest, org, len);
-       for (i = 0; i < position; i++)
-               dest[i] = tolower(dest[i]);
-       dest[position] = toupper(dest[position]);
-       k_menu_items[index].is_hot = 1;
-       return 0;
 }
 
-/* Make a new item. Add a hotkey mark in the first possible letter.
- * As ncurses does not allow any attributes inside menue item, we mark the
- * hot key as the first capitalized letter in the string */
+/* Make a new item. */
 static void item_make(struct menu *menu, char tag, const char *fmt, ...)
 {
        va_list ap;
-       char tmp_str[256];
 
        if (items_num > MAX_MENU_ITEMS-1)
                return;
@@ -597,16 +542,13 @@ static void item_make(struct menu *menu, char tag, const char *fmt, ...)
                k_menu_items[items_num].is_visible = 1;
 
        va_start(ap, fmt);
-       vsnprintf(tmp_str, sizeof(tmp_str), fmt, ap);
-       if (!k_menu_items[items_num].is_visible)
-               memcpy(tmp_str, "XXX", 3);
+       vsnprintf(k_menu_items[items_num].str,
+                 sizeof(k_menu_items[items_num].str),
+                 fmt, ap);
        va_end(ap);
-       if (make_hot(
-               k_menu_items[items_num].str,
-               sizeof(k_menu_items[items_num].str), tmp_str, items_num) != 0)
-               strncpy(k_menu_items[items_num].str,
-                       tmp_str,
-                       sizeof(k_menu_items[items_num].str));
+
+       if (!k_menu_items[items_num].is_visible)
+               memcpy(k_menu_items[items_num].str, "XXX", 3);
 
        curses_menu_items[items_num] = new_item(
                        k_menu_items[items_num].str,
@@ -638,11 +580,9 @@ static void item_add_str(const char *fmt, ...)
        va_end(ap);
        snprintf(tmp_str, sizeof(tmp_str), "%s%s",
                        k_menu_items[index].str, new_str);
-       if (make_hot(k_menu_items[index].str,
-                       sizeof(k_menu_items[index].str), tmp_str, index) != 0)
-               strncpy(k_menu_items[index].str,
-                       tmp_str,
-                       sizeof(k_menu_items[index].str));
+       strncpy(k_menu_items[index].str,
+               tmp_str,
+               sizeof(k_menu_items[index].str));
 
        free_item(curses_menu_items[index]);
        curses_menu_items[index] = new_item(
@@ -693,13 +633,9 @@ static char menu_backtitle[PATH_MAX+128];
 static const char *set_config_filename(const char *config_filename)
 {
        int size;
-       struct symbol *sym;
 
-       sym = sym_lookup("KERNELVERSION", 0);
-       sym_calc_value(sym);
        size = snprintf(menu_backtitle, sizeof(menu_backtitle),
-                       _("%s - Linux Kernel v%s Configuration"),
-                       config_filename, sym_get_string_value(sym));
+                       "%s - %s", config_filename, rootmenu.prompt->text);
        if (size >= sizeof(menu_backtitle))
                menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
 
@@ -709,25 +645,6 @@ static const char *set_config_filename(const char *config_filename)
        return menu_backtitle;
 }
 
-/* command = 0 is supress, 1 is restore */
-static void supress_stdout(int command)
-{
-       static FILE *org_stdout;
-       static FILE *org_stderr;
-
-       if (command == 0) {
-               org_stdout = stdout;
-               org_stderr = stderr;
-               stdout = fopen("/dev/null", "a");
-               stderr = fopen("/dev/null", "a");
-       } else {
-               fclose(stdout);
-               fclose(stderr);
-               stdout = org_stdout;
-               stderr = org_stderr;
-       }
-}
-
 /* return = 0 means we are successful.
  * -1 means go on doing what you were doing
  */
@@ -739,8 +656,7 @@ static int do_exit(void)
                return 0;
        }
        res = btn_dialog(main_window,
-                       _("Do you wish to save your "
-                               "new kernel configuration?\n"
+                       _("Do you wish to save your new configuration?\n"
                                "<ESC> to cancel and resume nconfig."),
                        2,
                        "   <save>   ",
@@ -753,36 +669,19 @@ static int do_exit(void)
        /* if we got here, the user really wants to exit */
        switch (res) {
        case 0:
-               supress_stdout(0);
                res = conf_write(filename);
-               supress_stdout(1);
                if (res)
                        btn_dialog(
                                main_window,
-                               _("Error during writing of the kernel "
-                                 "configuration.\n"
-                                 "Your kernel configuration "
-                                 "changes were NOT saved."),
+                               _("Error during writing of configuration.\n"
+                                 "Your configuration changes were NOT saved."),
                                  1,
                                  "<OK>");
-               else {
-                       char buf[1024];
-                       snprintf(buf, 1024,
-                               _("Configuration written to %s\n"
-                                 "End of Linux kernel configuration.\n"
-                                 "Execute 'make' to build the kernel or try"
-                                 " 'make help'."), filename);
-                       btn_dialog(
-                               main_window,
-                               buf,
-                               1,
-                               "<OK>");
-               }
                break;
        default:
                btn_dialog(
                        main_window,
-                       _("Your kernel configuration changes were NOT saved."),
+                       _("Your configuration changes were NOT saved."),
                        1,
                        "<OK>");
                break;
@@ -802,8 +701,8 @@ static void search_conf(void)
 again:
        dres = dialog_inputbox(main_window,
                        _("Search Configuration Parameter"),
-                       _("Enter CONFIG_ (sub)string to search for "
-                               "(with or without \"CONFIG\")"),
+                       _("Enter " CONFIG_ " (sub)string to search for "
+                               "(with or without \"" CONFIG_ "\")"),
                        "", dialog_input_result, 99);
        switch (dres) {
        case 0:
@@ -816,10 +715,10 @@ again:
                return;
        }
 
-       /* strip CONFIG_ if necessary */
+       /* strip the prefix if necessary */
        dialog_input = dialog_input_result;
-       if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
-               dialog_input += 7;
+       if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
+               dialog_input += strlen(CONFIG_);
 
        sym_arr = sym_re_search(dialog_input);
        res = get_relations_str(sym_arr);
@@ -1027,23 +926,18 @@ static void reset_menu(void)
 static void center_item(int selected_index, int *last_top_row)
 {
        int toprow;
-       int maxy, maxx;
 
-       scale_menu(curses_menu, &maxy, &maxx);
        set_top_row(curses_menu, *last_top_row);
        toprow = top_row(curses_menu);
-       if (selected_index >= toprow && selected_index < toprow+maxy) {
-               /* we can only move the selected item. no need to scroll */
-               set_current_item(curses_menu,
-                               curses_menu_items[selected_index]);
-       } else {
-               toprow = max(selected_index-maxy/2, 0);
-               if (toprow >= item_count(curses_menu)-maxy)
+       if (selected_index < toprow ||
+           selected_index >= toprow+mwin_max_lines) {
+               toprow = max(selected_index-mwin_max_lines/2, 0);
+               if (toprow >= item_count(curses_menu)-mwin_max_lines)
                        toprow = item_count(curses_menu)-mwin_max_lines;
                set_top_row(curses_menu, toprow);
-               set_current_item(curses_menu,
-                               curses_menu_items[selected_index]);
        }
+       set_current_item(curses_menu,
+                       curses_menu_items[selected_index]);
        *last_top_row = toprow;
        post_menu(curses_menu);
        refresh_all_windows(main_window);
@@ -1075,7 +969,7 @@ static void show_menu(const char *prompt, const char *instructions,
        /* position the menu at the middle of the screen */
        scale_menu(curses_menu, &maxy, &maxx);
        maxx = min(maxx, mwin_max_cols-2);
-       maxy = mwin_max_lines-2;
+       maxy = mwin_max_lines;
        menu_window = derwin(main_window,
                        maxy,
                        maxx,
@@ -1099,10 +993,77 @@ static void show_menu(const char *prompt, const char *instructions,
        refresh_all_windows(main_window);
 }
 
+static void adj_match_dir(match_f *match_direction)
+{
+       if (*match_direction == FIND_NEXT_MATCH_DOWN)
+               *match_direction =
+                       MATCH_TINKER_PATTERN_DOWN;
+       else if (*match_direction == FIND_NEXT_MATCH_UP)
+               *match_direction =
+                       MATCH_TINKER_PATTERN_UP;
+       /* else, do no change.. */
+}
 
-static void conf(struct menu *menu)
+struct match_state
 {
+       int in_search;
+       match_f match_direction;
        char pattern[256];
+};
+
+/* Return 0 means I have handled the key. In such a case, ans should hold the
+ * item to center, or -1 otherwise.
+ * Else return -1 .
+ */
+static int do_match(int key, struct match_state *state, int *ans)
+{
+       char c = (char) key;
+       int terminate_search = 0;
+       *ans = -1;
+       if (key == '/' || (state->in_search && key == 27)) {
+               move(0, 0);
+               refresh();
+               clrtoeol();
+               state->in_search = 1-state->in_search;
+               bzero(state->pattern, sizeof(state->pattern));
+               state->match_direction = MATCH_TINKER_PATTERN_DOWN;
+               return 0;
+       } else if (!state->in_search)
+               return 1;
+
+       if (isalnum(c) || isgraph(c) || c == ' ') {
+               state->pattern[strlen(state->pattern)] = c;
+               state->pattern[strlen(state->pattern)] = '\0';
+               adj_match_dir(&state->match_direction);
+               *ans = get_mext_match(state->pattern,
+                               state->match_direction);
+       } else if (key == KEY_DOWN) {
+               state->match_direction = FIND_NEXT_MATCH_DOWN;
+               *ans = get_mext_match(state->pattern,
+                               state->match_direction);
+       } else if (key == KEY_UP) {
+               state->match_direction = FIND_NEXT_MATCH_UP;
+               *ans = get_mext_match(state->pattern,
+                               state->match_direction);
+       } else if (key == KEY_BACKSPACE || key == 127) {
+               state->pattern[strlen(state->pattern)-1] = '\0';
+               adj_match_dir(&state->match_direction);
+       } else
+               terminate_search = 1;
+
+       if (terminate_search) {
+               state->in_search = 0;
+               bzero(state->pattern, sizeof(state->pattern));
+               move(0, 0);
+               refresh();
+               clrtoeol();
+               return -1;
+       }
+       return 0;
+}
+
+static void conf(struct menu *menu)
+{
        struct menu *submenu = 0;
        const char *prompt = menu_get_prompt(menu);
        struct symbol *sym;
@@ -1110,8 +1071,11 @@ static void conf(struct menu *menu)
        int res;
        int current_index = 0;
        int last_top_row = 0;
-
-       bzero(pattern, sizeof(pattern));
+       struct match_state match_state = {
+               .in_search = 0,
+               .match_direction = MATCH_TINKER_PATTERN_DOWN,
+               .pattern = "",
+       };
 
        while (!global_exit) {
                reset_menu();
@@ -1124,7 +1088,22 @@ static void conf(struct menu *menu)
                                _(menu_instructions),
                                current_index, &last_top_row);
                keypad((menu_win(curses_menu)), TRUE);
-               while (!global_exit && (res = wgetch(menu_win(curses_menu)))) {
+               while (!global_exit) {
+                       if (match_state.in_search) {
+                               mvprintw(0, 0,
+                                       "searching: %s", match_state.pattern);
+                               clrtoeol();
+                       }
+                       refresh_all_windows(main_window);
+                       res = wgetch(menu_win(curses_menu));
+                       if (!res)
+                               break;
+                       if (do_match(res, &match_state, &current_index) == 0) {
+                               if (current_index != -1)
+                                       center_item(current_index,
+                                                   &last_top_row);
+                               continue;
+                       }
                        if (process_special_keys(&res,
                                                (struct menu *) item_data()))
                                break;
@@ -1155,19 +1134,13 @@ static void conf(struct menu *menu)
                        if (res == 10 || res == 27 ||
                                res == 32 || res == 'n' || res == 'y' ||
                                res == KEY_LEFT || res == KEY_RIGHT ||
-                               res == 'm' || res == '/')
+                               res == 'm')
                                break;
-                       else if (canbhot(res)) {
-                               /* check for hot keys: */
-                               int tmp = get_next_hot(res);
-                               if (tmp != -1)
-                                       center_item(tmp, &last_top_row);
-                       }
                        refresh_all_windows(main_window);
                }
 
                refresh_all_windows(main_window);
-               /* if ESC  or left*/
+               /* if ESC or left*/
                if (res == 27 || (menu != &rootmenu && res == KEY_LEFT))
                        break;
 
@@ -1235,23 +1208,30 @@ static void conf(struct menu *menu)
                        if (item_is_tag('t'))
                                sym_set_tristate_value(sym, mod);
                        break;
-               case '/':
-                       search_conf();
-                       break;
                }
        }
 }
 
+static void conf_message_callback(const char *fmt, va_list ap)
+{
+       char buf[1024];
+
+       vsnprintf(buf, sizeof(buf), fmt, ap);
+       btn_dialog(main_window, buf, 1, "<OK>");
+}
+
 static void show_help(struct menu *menu)
 {
        struct gstr help = str_new();
 
        if (menu && menu->sym && menu_has_help(menu)) {
                if (menu->sym->name) {
-                       str_printf(&help, "CONFIG_%s:\n\n", menu->sym->name);
+                       str_printf(&help, "%s%s:\n\n", CONFIG_, menu->sym->name);
                        str_append(&help, _(menu_get_help(menu)));
                        str_append(&help, "\n");
                        get_symbol_str(&help, menu->sym);
+               } else {
+                       str_append(&help, _(menu_get_help(menu)));
                }
        } else {
                str_append(&help, nohelp_text);
@@ -1268,6 +1248,11 @@ static void conf_choice(struct menu *menu)
        int selected_index = 0;
        int last_top_row = 0;
        int res, i = 0;
+       struct match_state match_state = {
+               .in_search = 0,
+               .match_direction = MATCH_TINKER_PATTERN_DOWN,
+               .pattern = "",
+       };
 
        active = sym_get_choice_value(menu->sym);
        /* this is mostly duplicated from the conf() function. */
@@ -1294,7 +1279,22 @@ static void conf_choice(struct menu *menu)
                                _(radiolist_instructions),
                                selected_index,
                                &last_top_row);
-               while (!global_exit && (res = wgetch(menu_win(curses_menu)))) {
+               while (!global_exit) {
+                       if (match_state.in_search) {
+                               mvprintw(0, 0, "searching: %s",
+                                        match_state.pattern);
+                               clrtoeol();
+                       }
+                       refresh_all_windows(main_window);
+                       res = wgetch(menu_win(curses_menu));
+                       if (!res)
+                               break;
+                       if (do_match(res, &match_state, &selected_index) == 0) {
+                               if (selected_index != -1)
+                                       center_item(selected_index,
+                                                   &last_top_row);
+                               continue;
+                       }
                        if (process_special_keys(
                                                &res,
                                                (struct menu *) item_data()))
@@ -1324,13 +1324,8 @@ static void conf_choice(struct menu *menu)
                                break;
                        }
                        if (res == 10 || res == 27 || res == ' ' ||
-                               res == KEY_LEFT)
+                                       res == KEY_LEFT){
                                break;
-                       else if (canbhot(res)) {
-                               /* check for hot keys: */
-                               int tmp = get_next_hot(res);
-                               if (tmp != -1)
-                                       center_item(tmp, &last_top_row);
                        }
                        refresh_all_windows(main_window);
                }
@@ -1449,16 +1444,8 @@ static void conf_save(void)
                case 0:
                        if (!dialog_input_result[0])
                                return;
-                       supress_stdout(0);
                        res = conf_write(dialog_input_result);
-                       supress_stdout(1);
                        if (!res) {
-                               char buf[1024];
-                               sprintf(buf, "%s %s",
-                                       _("configuration file saved to: "),
-                                       dialog_input_result);
-                               btn_dialog(main_window,
-                                          buf, 1, "<OK>");
                                set_config_filename(dialog_input_result);
                                return;
                        }
@@ -1485,7 +1472,7 @@ void setup_windows(void)
        /* set up the menu and menu window */
        main_window = newwin(LINES-2, COLS-2, 2, 1);
        keypad(main_window, TRUE);
-       mwin_max_lines = LINES-6;
+       mwin_max_lines = LINES-7;
        mwin_max_cols = COLS-6;
 
        /* panels order is from bottom to top */
@@ -1532,9 +1519,10 @@ int main(int ac, char **av)
        /* set btns menu */
        curses_menu = new_menu(curses_menu_items);
        menu_opts_off(curses_menu, O_SHOWDESC);
-       menu_opts_off(curses_menu, O_SHOWMATCH);
+       menu_opts_on(curses_menu, O_SHOWMATCH);
        menu_opts_on(curses_menu, O_ONEVALUE);
        menu_opts_on(curses_menu, O_NONCYCLIC);
+       menu_opts_on(curses_menu, O_IGNORECASE);
        set_menu_mark(curses_menu, " ");
        set_menu_fore(curses_menu, attributes[MAIN_MENU_FORE]);
        set_menu_back(curses_menu, attributes[MAIN_MENU_BACK]);
@@ -1550,8 +1538,7 @@ int main(int ac, char **av)
                                _(menu_no_f_instructions));
        }
 
-
-
+       conf_set_message_callback(conf_message_callback);
        /* do the work */
        while (!global_exit) {
                conf(&rootmenu);
index a9d9344e136504781c52b0e59361fea6b10be06b..f8137b3a5382fd0862ed6f6ae6d4d545de26ec8c 100644 (file)
@@ -137,7 +137,7 @@ void set_colors()
        if (has_colors()) {
                normal_color_theme();
        } else {
-               /* give deafults */
+               /* give defaults */
                no_colors_theme();
        }
 }
@@ -167,7 +167,7 @@ void print_in_middle(WINDOW *win,
        length = strlen(string);
        temp = (width - length) / 2;
        x = startx + (int)temp;
-       wattrset(win, color);
+       (void) wattrset(win, color);
        mvwprintw(win, y, x, "%s", string);
        refresh();
 }
@@ -297,11 +297,11 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
        set_menu_fore(menu, attributes[DIALOG_MENU_FORE]);
        set_menu_back(menu, attributes[DIALOG_MENU_BACK]);
 
-       wattrset(win, attributes[DIALOG_BOX]);
+       (void) wattrset(win, attributes[DIALOG_BOX]);
        box(win, 0, 0);
 
        /* print message */
-       wattrset(msg_win, attributes[DIALOG_TEXT]);
+       (void) wattrset(msg_win, attributes[DIALOG_TEXT]);
        fill_window(msg_win, msg);
 
        set_menu_win(menu, win);
@@ -392,16 +392,16 @@ int dialog_inputbox(WINDOW *main_window,
        form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
        keypad(form_win, TRUE);
 
-       wattrset(form_win, attributes[INPUT_FIELD]);
+       (void) wattrset(form_win, attributes[INPUT_FIELD]);
 
-       wattrset(win, attributes[INPUT_BOX]);
+       (void) wattrset(win, attributes[INPUT_BOX]);
        box(win, 0, 0);
-       wattrset(win, attributes[INPUT_HEADING]);
+       (void) wattrset(win, attributes[INPUT_HEADING]);
        if (title)
                mvwprintw(win, 0, 3, "%s", title);
 
        /* print message */
-       wattrset(prompt_win, attributes[INPUT_TEXT]);
+       (void) wattrset(prompt_win, attributes[INPUT_TEXT]);
        fill_window(prompt_win, prompt);
 
        mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
@@ -531,7 +531,7 @@ void show_scroll_win(WINDOW *main_window,
 
        /* create the pad */
        pad = newpad(total_lines+10, total_cols+10);
-       wattrset(pad, attributes[SCROLLWIN_TEXT]);
+       (void) wattrset(pad, attributes[SCROLLWIN_TEXT]);
        fill_window(pad, text);
 
        win_lines = min(total_lines+4, LINES-2);
@@ -546,9 +546,9 @@ void show_scroll_win(WINDOW *main_window,
        win = newwin(win_lines, win_cols, y, x);
        keypad(win, TRUE);
        /* show the help in the help window, and show the help panel */
-       wattrset(win, attributes[SCROLLWIN_BOX]);
+       (void) wattrset(win, attributes[SCROLLWIN_BOX]);
        box(win, 0, 0);
-       wattrset(win, attributes[SCROLLWIN_HEADING]);
+       (void) wattrset(win, attributes[SCROLLWIN_HEADING]);
        mvwprintw(win, 0, 3, " %s ", title);
        panel = new_panel(win);
 
index fb4296666004c43cf9f89840888701ba4359fc07..58fbda8fc0dc9e6df9941fe78e3127cee91da1d2 100644 (file)
@@ -69,7 +69,8 @@ typedef enum {
        F_BACK = 5,
        F_SAVE = 6,
        F_LOAD = 7,
-       F_EXIT = 8
+       F_SEARCH = 8,
+       F_EXIT = 9,
 } function_key;
 
 void set_colors(void);
index 08fabc13a02a224c07a95bd0bd08a0fc5502d14b..a7d729de02ebe67b10743e94d885ed87c280e3ab 100644 (file)
 ---
- conf.c              |   12 ++++++------
- confdata.c          |   14 +++++++-------
- gconf.c             |    4 ++--
  gconf.glade         |    2 +-
- mconf.c             |   38 ++++++++++++++++++--------------------
- qconf.cc            |    4 ++--
+ mconf.c             |    4 ++--
  zconf.tab.c_shipped |    2 +-
  zconf.y             |    2 +-
8 files changed, 38 insertions(+), 40 deletions(-)
4 files changed, 5 insertions(+), 5 deletions(-)
 
-Index: config/conf.c
-===================================================================
---- config.orig/conf.c
-+++ config/conf.c
-@@ -508,8 +508,8 @@
-               name = conf_get_configname();
-               if (stat(name, &tmpstat)) {
-                       fprintf(stderr, _("***\n"
--                              "*** You have not yet configured your kernel!\n"
--                              "*** (missing kernel config file \"%s\")\n"
-+                              "*** You have not yet configured your Buildroot!\n"
-+                              "*** (missing .config file \"%s\")\n"
-                               "***\n"
-                               "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
-                               "*** \"make menuconfig\" or \"make xconfig\").\n"
-@@ -571,7 +571,7 @@
-                       name = getenv("KCONFIG_NOSILENTUPDATE");
-                       if (name && *name) {
-                               fprintf(stderr,
--                                      _("\n*** Kernel configuration requires explicit update.\n\n"));
-+                                      _("\n*** Buildroot configuration requires explicit update.\n\n"));
-                               return 1;
-                       }
-               }
-@@ -623,11 +623,11 @@
-                * All other commands are only used to generate a config.
-                */
-               if (conf_get_changed() && conf_write(NULL)) {
--                      fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
-+                      fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
-                       exit(1);
-               }
-               if (conf_write_autoconf()) {
--                      fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n"));
-+                      fprintf(stderr, _("\n*** Error during update of the Buildroot configuration.\n\n"));
-                       return 1;
-               }
-       } else if (input_mode == savedefconfig) {
-@@ -638,7 +638,7 @@
-               }
-       } else if (input_mode != listnewconfig) {
-               if (conf_write(NULL)) {
--                      fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
-+                      fprintf(stderr, _("\n*** Error during writing of the Buildroot configuration.\n\n"));
-                       exit(1);
-               }
-       }
-Index: config/confdata.c
-===================================================================
---- config.orig/confdata.c
-+++ config/confdata.c
-@@ -581,7 +581,7 @@
-       if (!out)
-               return 1;
--      sym = sym_lookup("KERNELVERSION", 0);
-+      sym = sym_lookup("BR2_VERSION", 0);
-       sym_calc_value(sym);
-       time(&now);
-       env = getenv("KCONFIG_NOTIMESTAMP");
-@@ -590,7 +590,7 @@
-       fprintf(out, _("#\n"
-                      "# Automatically generated make config: don't edit\n"
--                     "# Linux kernel version: %s\n"
-+                     "# Buildroot version: %s\n"
-                      "%s%s"
-                      "#\n"),
-                    sym_get_string_value(sym),
-@@ -804,25 +804,25 @@
-               return 1;
-       }
--      sym = sym_lookup("KERNELVERSION", 0);
-+      sym = sym_lookup("BR2_VERSION", 0);
-       sym_calc_value(sym);
-       time(&now);
-       fprintf(out, "#\n"
-                    "# Automatically generated make config: don't edit\n"
--                   "# Linux kernel version: %s\n"
-+                   "# Buildroot version: %s\n"
-                    "# %s"
-                    "#\n",
--                   sym_get_string_value(sym), ctime(&now));
-+                   sym_get_string_value(sym),
-+                   ctime(&now));
-       fprintf(tristate, "#\n"
-                         "# Automatically generated - do not edit\n"
-                         "\n");
-       fprintf(out_h, "/*\n"
-                      " * Automatically generated C config: don't edit\n"
--                     " * Linux kernel version: %s\n"
-                      " * %s"
-                      " */\n"
-                      "#define AUTOCONF_INCLUDED\n",
--                     sym_get_string_value(sym), ctime(&now));
-+                     ctime(&now));
-       for_all_symbols(i, sym) {
-               sym_calc_value(sym);
-Index: config/gconf.c
-===================================================================
---- config.orig/gconf.c
-+++ config/gconf.c
-@@ -210,8 +210,8 @@
-                                         /*"style", PANGO_STYLE_OBLIQUE, */
-                                         NULL);
--      sprintf(title, _("Linux Kernel v%s Configuration"),
--              getenv("KERNELVERSION"));
-+      sprintf(title, _("Buildroot v%s Configuration"),
-+              getenv("BR2_VERSION"));
-       gtk_window_set_title(GTK_WINDOW(main_wnd), title);
-       gtk_widget_show(main_wnd);
 Index: config/gconf.glade
 ===================================================================
 --- config.orig/gconf.glade
 +++ config/gconf.glade
-@@ -5,7 +5,7 @@
+@@ -4,7 +4,7 @@
  
  <widget class="GtkWindow" id="window1">
    <property name="visible">True</property>
@@ -141,38 +22,7 @@ Index: config/mconf.c
 ===================================================================
 --- config.orig/mconf.c
 +++ config/mconf.c
-@@ -25,10 +25,9 @@
- static const char mconf_readme[] = N_(
- "Overview\n"
- "--------\n"
--"Some kernel features may be built directly into the kernel.\n"
--"Some may be made into loadable runtime modules.  Some features\n"
-+"Some features may be built directly into Buildroot. Some features\n"
- "may be completely removed altogether.  There are also certain\n"
--"kernel parameters which are not really features, but must be\n"
-+"parameters which are not really features, but must be\n"
- "entered in as decimal or hexadecimal numbers or possibly text.\n"
- "\n"
- "Menu items beginning with following braces represent features that\n"
-@@ -117,7 +116,7 @@
- "-----------------------------\n"
- "Menuconfig supports the use of alternate configuration files for\n"
- "those who, for various reasons, find it necessary to switch\n"
--"between different kernel configurations.\n"
-+"between different configurations.\n"
- "\n"
- "At the end of the main menu you will find two options.  One is\n"
- "for saving the current configuration to a file of your choosing.\n"
-@@ -150,7 +149,7 @@
- "\n"
- "Optional personality available\n"
- "------------------------------\n"
--"If you prefer to have all of the kernel options listed in a single\n"
-+"If you prefer to have all of the options listed in a single\n"
- "menu, rather than the default multimenu hierarchy, run the menuconfig\n"
- "with MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
- "\n"
-@@ -180,9 +179,9 @@
+@@ -178,9 +178,9 @@
        "Arrow keys navigate the menu.  "
        "<Enter> selects submenus --->.  "
        "Highlighted letters are hotkeys.  "
@@ -184,107 +34,11 @@ Index: config/mconf.c
  radiolist_instructions[] = N_(
        "Use the arrow keys to navigate this window or "
        "press the hotkey of the item you wish to select "
-@@ -207,11 +206,11 @@
-       "last retrieved.  Leave blank to abort."),
- load_config_help[] = N_(
-       "\n"
--      "For various reasons, one may wish to keep several different kernel\n"
-+      "For various reasons, one may wish to keep several different Buildroot\n"
-       "configurations available on a single machine.\n"
-       "\n"
-       "If you have saved a previous configuration in a file other than the\n"
--      "kernel's default, entering the name of the file here will allow you\n"
-+      "Buildroot's default, entering the name of the file here will allow you\n"
-       "to modify that configuration.\n"
-       "\n"
-       "If you are uncertain, then you have probably never used alternate\n"
-@@ -221,7 +220,7 @@
-       "as an alternate.  Leave blank to abort."),
- save_config_help[] = N_(
-       "\n"
--      "For various reasons, one may wish to keep different kernel\n"
-+      "For various reasons, one may wish to keep different Buildroot\n"
-       "configurations available on a single machine.\n"
-       "\n"
-       "Entering a file name here will allow you to later retrieve, modify\n"
-@@ -292,10 +291,10 @@
-       int size;
-       struct symbol *sym;
--      sym = sym_lookup("KERNELVERSION", 0);
-+      sym = sym_lookup("BR2_VERSION", 0);
-       sym_calc_value(sym);
-       size = snprintf(menu_backtitle, sizeof(menu_backtitle),
--                      _("%s - Linux Kernel v%s Configuration"),
-+                      _("%s - buildroot v%s Configuration"),
-                       config_filename, sym_get_string_value(sym));
-       if (size >= sizeof(menu_backtitle))
-               menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
-@@ -316,8 +315,7 @@
- again:
-       dialog_clear();
-       dres = dialog_inputbox(_("Search Configuration Parameter"),
--                            _("Enter CONFIG_ (sub)string to search for "
--                              "(with or without \"CONFIG\")"),
-+                            _("Enter (sub)string to search for"),
-                             10, 75, "");
-       switch (dres) {
-       case 0:
-@@ -834,7 +832,7 @@
-               if (conf_get_changed())
-                       res = dialog_yesno(NULL,
-                                          _("Do you wish to save your "
--                                           "new kernel configuration?\n"
-+                                           "new Buildroot configuration?\n"
-                                            "<ESC><ESC> to continue."),
-                                          6, 60);
-               else
-@@ -846,20 +844,20 @@
-       case 0:
-               if (conf_write(filename)) {
-                       fprintf(stderr, _("\n\n"
--                              "Error during writing of the kernel configuration.\n"
--                              "Your kernel configuration changes were NOT saved."
-+                              "Error during writing of the Buildroot configuration.\n"
-+                              "Your Buildroot configuration changes were NOT saved."
-                               "\n\n"));
-                       return 1;
-               }
-       case -1:
-               printf(_("\n\n"
--                      "*** End of Linux kernel configuration.\n"
--                      "*** Execute 'make' to build the kernel or try 'make help'."
-+                      "*** End of Buildroot configuration.\n"
-+                      "*** Execute 'make' to build Buildroot or try 'make help'."
-                       "\n\n"));
-               break;
-       default:
-               fprintf(stderr, _("\n\n"
--                      "Your kernel configuration changes were NOT saved."
-+                      "Your Buildroot configuration changes were NOT saved."
-                       "\n\n"));
-       }
-Index: config/qconf.cc
-===================================================================
---- config.orig/qconf.cc
-+++ config/qconf.cc
-@@ -1263,8 +1263,8 @@
-       char title[256];
-       QDesktopWidget *d = configApp->desktop();
--      snprintf(title, sizeof(title), _("Linux Kernel v%s Configuration"),
--              getenv("KERNELVERSION"));
-+      snprintf(title, sizeof(title), _("Buildroot v%s Configuration"),
-+              getenv("BR2_VERSION"));
-       setCaption(title);
-       width = configSettings->readNumEntry("/window width", d->width() - 64);
 Index: config/zconf.tab.c_shipped
 ===================================================================
 --- config.orig/zconf.tab.c_shipped
 +++ config/zconf.tab.c_shipped
-@@ -2224,7 +2224,7 @@
+@@ -2239,7 +2239,7 @@
        modules_sym = sym_lookup(NULL, 0);
        modules_sym->type = S_BOOLEAN;
        modules_sym->flags |= SYMBOL_AUTO;
@@ -297,7 +51,7 @@ Index: config/zconf.y
 ===================================================================
 --- config.orig/zconf.y
 +++ config/zconf.y
-@@ -479,7 +479,7 @@
+@@ -487,7 +487,7 @@
        modules_sym = sym_lookup(NULL, 0);
        modules_sym->type = S_BOOLEAN;
        modules_sym->flags |= SYMBOL_AUTO;
index 9e93f682c6feb7a96dc8caaf0a27f82d99695c8f..707dcf4ce79e3b20d2747ba1d002d2f92a5f230e 100644 (file)
@@ -1,12 +1,14 @@
 ---
- confdata.c |   49 +++++++++++++++++++++++--------------------------
- 1 file changed, 23 insertions(+), 26 deletions(-)
+ confdata.c |   57 +++++++++++++++++++++++++++++----------------------------
+ lkc.h      |    2 +-
+ menu.c     |    2 +-
+ 3 files changed, 31 insertions(+), 30 deletions(-)
 
 Index: config/confdata.c
 ===================================================================
 --- config.orig/confdata.c
 +++ config/confdata.c
-@@ -11,6 +11,7 @@
+@@ -12,6 +12,7 @@
  #include <string.h>
  #include <time.h>
  #include <unistd.h>
@@ -14,7 +16,7 @@ Index: config/confdata.c
  
  #define LKC_DIRECT_LINK
  #include "lkc.h"
-@@ -21,7 +22,7 @@
+@@ -25,7 +26,7 @@
  static const char *conf_filename;
  static int conf_lineno, conf_warnings, conf_unsaved;
  
@@ -23,7 +25,7 @@ Index: config/confdata.c
  
  static void conf_warning(const char *fmt, ...)
  {
-@@ -36,7 +37,7 @@
+@@ -63,7 +64,7 @@
  
  const char *conf_get_configname(void)
  {
@@ -32,14 +34,11 @@ Index: config/confdata.c
  
        return name ? name : ".config";
  }
-@@ -222,22 +223,22 @@
-               sym = NULL;
-               switch (line[0]) {
-               case '#':
--                      if (memcmp(line + 2, "CONFIG_", 7))
-+                      if (line[1]!=' ')
+@@ -249,20 +250,20 @@
+               if (line[0] == '#') {
+                       if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
                                continue;
--                      p = strchr(line + 9, ' ');
+-                      p = strchr(line + 2 + strlen(CONFIG_), ' ');
 +                      p = strchr(line + 2, ' ');
                        if (!p)
                                continue;
@@ -47,118 +46,153 @@ Index: config/confdata.c
                        if (strncmp(p, "is not set", 10))
                                continue;
                        if (def == S_DEF_USER) {
--                              sym = sym_find(line + 9);
+-                              sym = sym_find(line + 2 + strlen(CONFIG_));
 +                              sym = sym_find(line + 2);
                                if (!sym) {
                                        sym_add_change_count(1);
-                                       break;
+                                       goto setsym;
                                }
                        } else {
--                              sym = sym_lookup(line + 9, 0);
+-                              sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
 +                              sym = sym_lookup(line + 2, 0);
                                if (sym->type == S_UNKNOWN)
                                        sym->type = S_BOOLEAN;
                        }
-@@ -254,12 +255,8 @@
+@@ -278,8 +279,8 @@
+                       default:
                                ;
                        }
-                       break;
--              case 'C':
--                      if (memcmp(line, "CONFIG_", 7)) {
--                              conf_warning("unexpected data");
--                              continue;
--                      }
--                      p = strchr(line + 7, '=');
-+              case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+-              } else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) {
+-                      p = strchr(line + strlen(CONFIG_), '=');
++              } else if (isupper(line[0])) {
 +                      p = strchr(line, '=');
                        if (!p)
                                continue;
                        *p++ = 0;
-@@ -270,13 +267,13 @@
+@@ -290,13 +291,13 @@
                                        *p2 = 0;
                        }
                        if (def == S_DEF_USER) {
--                              sym = sym_find(line + 7);
+-                              sym = sym_find(line + strlen(CONFIG_));
 +                              sym = sym_find(line);
                                if (!sym) {
                                        sym_add_change_count(1);
-                                       break;
+                                       goto setsym;
                                }
                        } else {
--                              sym = sym_lookup(line + 7, 0);
+-                              sym = sym_lookup(line + strlen(CONFIG_), 0);
 +                              sym = sym_lookup(line, 0);
                                if (sym->type == S_UNKNOWN)
                                        sym->type = S_OTHER;
                        }
-@@ -405,9 +402,9 @@
+@@ -423,9 +424,9 @@
  {
        int l;
        if (headerfile)
--              fprintf(out, "#define CONFIG_%s \"", name);
+-              fprintf(out, "#define %s%s \"", CONFIG_, name);
 +              fprintf(out, "#define %s \"", name);
        else
--              fprintf(out, "CONFIG_%s=\"", name);
+-              fprintf(out, "%s%s=\"", CONFIG_, name);
 +              fprintf(out, "%s=\"", name);
  
        while (1) {
                l = strcspn(str, "\"\\");
-@@ -433,13 +430,13 @@
+@@ -451,14 +452,14 @@
                switch (sym_get_tristate_value(sym)) {
                case no:
                        if (write_no)
--                              fprintf(out, "# CONFIG_%s is not set\n", sym->name);
-+                              fprintf(out, "# %s is not set\n", sym->name);
+-                              fprintf(out, "# %s%s is not set\n",
+-                                  CONFIG_, sym->name);
++                              fprintf(out, "# %s is not set\n",
++                                  sym->name);
                        break;
                case mod:
--                      fprintf(out, "CONFIG_%s=m\n", sym->name);
+-                      fprintf(out, "%s%s=m\n", CONFIG_, sym->name);
 +                      fprintf(out, "%s=m\n", sym->name);
                        break;
                case yes:
--                      fprintf(out, "CONFIG_%s=y\n", sym->name);
+-                      fprintf(out, "%s%s=y\n", CONFIG_, sym->name);
 +                      fprintf(out, "%s=y\n", sym->name);
                        break;
                }
                break;
-@@ -449,7 +446,7 @@
+@@ -468,7 +469,7 @@
        case S_HEX:
        case S_INT:
                str = sym_get_string_value(sym);
--              fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
+-              fprintf(out, "%s%s=%s\n", CONFIG_, sym->name, str);
 +              fprintf(out, "%s=%s\n", sym->name, str);
                break;
        case S_OTHER:
        case S_UNKNOWN:
-@@ -840,14 +837,14 @@
+@@ -853,17 +854,17 @@
                        case no:
                                break;
                        case mod:
--                              fprintf(tristate, "CONFIG_%s=M\n", sym->name);
--                              fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
-+                              fprintf(tristate, "%s=M\n", sym->name);
-+                              fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
+-                              fprintf(tristate, "%s%s=M\n",
+-                                  CONFIG_, sym->name);
+-                              fprintf(out_h, "#define %s%s_MODULE 1\n",
+-                                  CONFIG_, sym->name);
++                              fprintf(tristate, "%s=M\n",
++                                  sym->name);
++                              fprintf(out_h, "#define %s_MODULE 1\n",
++                                  sym->name);
                                break;
                        case yes:
                                if (sym->type == S_TRISTATE)
--                                      fprintf(tristate, "CONFIG_%s=Y\n",
-+                                      fprintf(tristate, "%s=Y\n",
-                                                       sym->name);
--                              fprintf(out_h, "#define CONFIG_%s 1\n", sym->name);
-+                              fprintf(out_h, "#define %s 1\n", sym->name);
+-                                      fprintf(tristate,"%s%s=Y\n",
+-                                          CONFIG_, sym->name);
+-                              fprintf(out_h, "#define %s%s 1\n",
+-                                  CONFIG_, sym->name);
++                                      fprintf(tristate,"%s=Y\n",
++                                          sym->name);
++                              fprintf(out_h, "#define %s 1\n",
++                                  sym->name);
                                break;
                        }
                        break;
-@@ -857,12 +854,12 @@
+@@ -873,14 +874,14 @@
                case S_HEX:
                        str = sym_get_string_value(sym);
                        if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
--                              fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
-+                              fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
+-                              fprintf(out_h, "#define %s%s 0x%s\n",
+-                                  CONFIG_, sym->name, str);
++                              fprintf(out_h, "#define %s 0x%s\n",
++                                  sym->name, str);
                                break;
                        }
                case S_INT:
                        str = sym_get_string_value(sym);
--                      fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
-+                      fprintf(out_h, "#define %s %s\n", sym->name, str);
+-                      fprintf(out_h, "#define %s%s %s\n",
+-                          CONFIG_, sym->name, str);
++                      fprintf(out_h, "#define %s %s\n",
++                          sym->name, str);
                        break;
                default:
                        break;
+Index: config/lkc.h
+===================================================================
+--- config.orig/lkc.h
++++ config/lkc.h
+@@ -41,7 +41,7 @@
+ #define N_(text) (text)
+ #ifndef CONFIG_
+-#define CONFIG_ "CONFIG_"
++#define CONFIG_ "BR2_"
+ #endif
+ #define TF_COMMAND    0x0001
+Index: config/menu.c
+===================================================================
+--- config.orig/menu.c
++++ config/menu.c
+@@ -563,7 +563,7 @@
+       if (menu_has_help(menu)) {
+               if (sym->name) {
+-                      str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
++                      str_printf(help, "%s:\n\n", sym->name);
+                       str_append(help, _(menu_get_help(menu)));
+                       str_append(help, "\n");
+               }
index 50575e4726aee9e0442bbf4944885c0b0aab8154..a1517542ea0c3863fd5dc865d97b7f8c1a4d52df 100644 (file)
@@ -6,7 +6,7 @@ Index: config/Makefile
 ===================================================================
 --- config.orig/Makefile
 +++ config/Makefile
-@@ -199,10 +199,16 @@
+@@ -196,10 +196,16 @@
  gconf-objs    := gconf.o kconfig_load.o zconf.tab.o
  endif
  
index 128bbc02c4e7edc2bbd43bfceaa4f4bdad14c8ec..8a27e251ead30e4417d53c103f32c04e2fdc82f3 100644 (file)
@@ -6,7 +6,7 @@ Index: config/Makefile
 ===================================================================
 --- config.orig/Makefile
 +++ config/Makefile
-@@ -177,18 +177,30 @@
+@@ -174,18 +174,30 @@
  ifeq ($(MAKECMDGOALS),nconfig)
        hostprogs-y += nconf
  endif
index 686038a5b073c653fec7abc2bd6892f92c9f2004..0f9c7e308ffddd841d6c8a1077e085276e38cbdf 100644 (file)
@@ -6,7 +6,7 @@ Index: config/util.c
 ===================================================================
 --- config.orig/util.c
 +++ config/util.c
-@@ -26,6 +26,121 @@
+@@ -29,6 +29,121 @@
        return file;
  }
  
@@ -128,7 +128,7 @@ Index: config/util.c
  /* write a dependency file as used by kbuild to track dependencies */
  int file_write_dep(const char *name)
  {
-@@ -68,7 +183,7 @@
+@@ -71,7 +186,7 @@
        fprintf(out, "\n$(deps_config): ;\n");
        fclose(out);
        rename("..config.tmp", name);
index 6220931070578893bc78b9333d42070e13e21c1f..8ee5ea36c0ff7f571c9658587759e27e558d2bfa 100644 (file)
@@ -6,7 +6,7 @@ Index: config/confdata.c
 ===================================================================
 --- config.orig/confdata.c
 +++ config/confdata.c
-@@ -983,7 +983,16 @@
+@@ -1005,7 +1005,16 @@
  void conf_set_all_new_symbols(enum conf_def_mode mode)
  {
        struct symbol *sym, *csym;
@@ -24,7 +24,7 @@ Index: config/confdata.c
  
        for_all_symbols(i, sym) {
                if (sym_has_value(sym))
-@@ -1002,8 +1011,15 @@
+@@ -1024,8 +1033,15 @@
                                sym->def[S_DEF_USER].tri = no;
                                break;
                        case def_random:
index 60190b8774e388706574754c57908b2988c5c4d3..21ca2288311db2116cf2e41ef4d139014a737017 100644 (file)
@@ -6,7 +6,7 @@ Index: config/lxdialog/check-lxdialog.sh
 ===================================================================
 --- config.orig/lxdialog/check-lxdialog.sh
 +++ config/lxdialog/check-lxdialog.sh
-@@ -31,7 +31,7 @@
+@@ -33,7 +33,7 @@
  }
  
  # Temp file, try to clean up after us
index 140201cecdb09ec8cbb64966b563379e8b38fbe5..5b080c94bb6ddfb107444f3ab347fa6098f26d0e 100644 (file)
@@ -6,7 +6,7 @@ Index: config/gconf.c
 ===================================================================
 --- config.orig/gconf.c
 +++ config/gconf.c
-@@ -1525,7 +1525,7 @@
+@@ -1521,7 +1521,7 @@
        /* Determine GUI path */
        env = getenv(SRCTREE);
        if (env)
index 763e063c6200c9cc1b61bc8918624e2751bd398c..54d0bd99c348ba7fe30437be0b97c42db6a1796f 100644 (file)
@@ -20,7 +20,7 @@ Index: config/confdata.c
 ===================================================================
 --- config.orig/confdata.c
 +++ config/confdata.c
-@@ -44,9 +44,7 @@
+@@ -71,9 +71,7 @@
  
  const char *conf_get_autoconfig_name(void)
  {
@@ -31,7 +31,7 @@ Index: config/confdata.c
  }
  
  static char *conf_expand_value(const char *in)
-@@ -544,6 +542,9 @@
+@@ -567,6 +565,9 @@
        int use_timestamp = 1;
        char *env;
  
@@ -41,15 +41,15 @@ Index: config/confdata.c
        dirname[0] = 0;
        if (name && name[0]) {
                struct stat st;
-@@ -660,6 +661,7 @@
+@@ -679,6 +680,7 @@
  {
        const char *name;
-       char path[128];
+       char path[PATH_MAX+1];
 +      char *opwd, *dir, *_name;
        char *s, *d, c;
        struct symbol *sym;
        struct stat sb;
-@@ -668,8 +670,20 @@
+@@ -687,8 +689,20 @@
        name = conf_get_autoconfig_name();
        conf_read_simple(name, S_DEF_AUTO);
  
@@ -72,7 +72,7 @@ Index: config/confdata.c
  
        res = 0;
        for_all_symbols(i, sym) {
-@@ -762,9 +776,11 @@
+@@ -781,9 +795,11 @@
                close(fd);
        }
  out:
@@ -87,7 +87,7 @@ Index: config/confdata.c
        return res;
  }
  
-@@ -776,25 +792,38 @@
+@@ -795,25 +811,38 @@
        FILE *out, *tristate, *out_h;
        time_t now;
        int i;
@@ -130,17 +130,17 @@ Index: config/confdata.c
        if (!out_h) {
                fclose(out);
                fclose(tristate);
-@@ -817,8 +846,7 @@
-       fprintf(out_h, "/*\n"
+@@ -834,8 +863,7 @@
                       " * Automatically generated C config: don't edit\n"
+                      " * %s\n"
                       " * %s"
 -                     " */\n"
 -                     "#define AUTOCONF_INCLUDED\n",
 +                     " */\n",
-                      ctime(&now));
+                      rootmenu.prompt->text, ctime(&now));
  
        for_all_symbols(i, sym) {
-@@ -872,19 +900,22 @@
+@@ -894,19 +922,22 @@
        name = getenv("KCONFIG_AUTOHEADER");
        if (!name)
                name = "include/generated/autoconf.h";
@@ -170,7 +170,7 @@ Index: config/util.c
 ===================================================================
 --- config.orig/util.c
 +++ config/util.c
-@@ -144,6 +144,8 @@
+@@ -147,6 +147,8 @@
  /* write a dependency file as used by kbuild to track dependencies */
  int file_write_dep(const char *name)
  {
@@ -179,7 +179,7 @@ Index: config/util.c
        struct symbol *sym, *env_sym;
        struct expr *e;
        struct file *file;
-@@ -151,7 +153,16 @@
+@@ -154,7 +156,16 @@
  
        if (!name)
                name = ".kconfig.d";
@@ -197,7 +197,7 @@ Index: config/util.c
        if (!out)
                return 1;
        fprintf(out, "deps_config := \\\n");
-@@ -182,7 +193,8 @@
+@@ -185,7 +196,8 @@
  
        fprintf(out, "\n$(deps_config): ;\n");
        fclose(out);
diff --git a/package/config/patches/15-use-PATH_MAX-for-path-buffer.patch b/package/config/patches/15-use-PATH_MAX-for-path-buffer.patch
deleted file mode 100644 (file)
index 816aa44..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-From 1408b15b98635a13bad2e2a50b3c2ae2ccdf625b Mon Sep 17 00:00:00 2001
-From: Will Newton <will.newton@gmail.com>
-Date: Wed, 22 Sep 2010 15:59:13 +0100
-Subject: [PATCH] kconfig: Use PATH_MAX instead of 128 for path buffer sizes.
-
-This prevents the buffers being overflowed when using a config
-file with a long name. PATH_MAX is used elsewhere in the same
-file, so use it here as well.
-
-Signed-off-by: Will Newton <will.newton@imgtec.com>
-Acked-by: WANG Cong <xiyou.wangcong@gmail.com>
-Signed-off-by: Michal Marek <mmarek@suse.cz>
----
- confdata.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-Index: config/confdata.c
-===================================================================
---- config.orig/confdata.c
-+++ config/confdata.c
-@@ -536,7 +536,7 @@
-       struct menu *menu;
-       const char *basename;
-       const char *str;
--      char dirname[128], tmpname[128], newname[128];
-+      char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
-       enum symbol_type type;
-       time_t now;
-       int use_timestamp = 1;
-@@ -660,7 +660,7 @@
- static int conf_split_config(void)
- {
-       const char *name;
--      char path[128];
-+      char path[PATH_MAX+1];
-       char *opwd, *dir, *_name;
-       char *s, *d, c;
-       struct symbol *sym;
index 098b082cadcc5a7963357143fa9a5768b3d4b3b8..defdf58996bf04bdecccd51e76189c271e0ae16f 100644 (file)
@@ -9,4 +9,3 @@
 11-use-mktemp-for-lxdialog.patch
 12-fix-glade-file-path.patch
 14-support-out-of-tree-config.patch
-15-use-PATH_MAX-for-path-buffer.patch
index bbda3c81160ec2c5bf2436d558f484fd005ca93c..06dd2e33581de5de81863bd1b74b2fb7100af5ed 100644 (file)
@@ -3,25 +3,42 @@
  * Released under the terms of the GNU GPL v2.0.
  */
 
-#include <qapplication.h>
+#include <qglobal.h>
+
+#if QT_VERSION < 0x040000
 #include <qmainwindow.h>
+#include <qvbox.h>
+#include <qvaluelist.h>
+#include <qtextbrowser.h>
+#include <qaction.h>
+#include <qheader.h>
+#include <qfiledialog.h>
+#include <qdragobject.h>
+#include <qpopupmenu.h>
+#else
+#include <q3mainwindow.h>
+#include <q3vbox.h>
+#include <q3valuelist.h>
+#include <q3textbrowser.h>
+#include <q3action.h>
+#include <q3header.h>
+#include <q3filedialog.h>
+#include <q3dragobject.h>
+#include <q3popupmenu.h>
+#endif
+
+#include <qapplication.h>
 #include <qdesktopwidget.h>
 #include <qtoolbar.h>
 #include <qlayout.h>
-#include <qvbox.h>
 #include <qsplitter.h>
-#include <qlistview.h>
-#include <qtextbrowser.h>
 #include <qlineedit.h>
 #include <qlabel.h>
 #include <qpushbutton.h>
 #include <qmenubar.h>
 #include <qmessagebox.h>
-#include <qaction.h>
-#include <qheader.h>
-#include <qfiledialog.h>
-#include <qdragobject.h>
 #include <qregexp.h>
+#include <qevent.h>
 
 #include <stdlib.h>
 
@@ -39,7 +56,7 @@
 static QApplication *configApp;
 static ConfigSettings *configSettings;
 
-QAction *ConfigMainWindow::saveAction;
+Q3Action *ConfigMainWindow::saveAction;
 
 static inline QString qgettext(const char* str)
 {
@@ -54,9 +71,9 @@ static inline QString qgettext(const QString& str)
 /**
  * Reads a list of integer values from the application settings.
  */
-QValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
+Q3ValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
 {
-       QValueList<int> result;
+       Q3ValueList<int> result;
        QStringList entryList = readListEntry(key, ok);
        QStringList::Iterator it;
 
@@ -69,10 +86,10 @@ QValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
 /**
  * Writes a list of integer values to the application settings.
  */
-bool ConfigSettings::writeSizes(const QString& key, const QValueList<int>& value)
+bool ConfigSettings::writeSizes(const QString& key, const Q3ValueList<int>& value)
 {
        QStringList stringList;
-       QValueList<int>::ConstIterator it;
+       Q3ValueList<int>::ConstIterator it;
 
        for (it = value.begin(); it != value.end(); ++it)
                stringList.push_back(QString::number(*it));
@@ -80,7 +97,6 @@ bool ConfigSettings::writeSizes(const QString& key, const QValueList<int>& value
 }
 
 
-#if QT_VERSION >= 300
 /*
  * set the new data
  * TODO check the value
@@ -91,7 +107,6 @@ void ConfigItem::okRename(int col)
        sym_set_string_value(menu->sym, text(dataColIdx).latin1());
        listView()->updateList(this);
 }
-#endif
 
 /*
  * update the displayed of a menu entry
@@ -195,11 +210,9 @@ void ConfigItem::updateMenu(void)
 
                data = sym_get_string_value(sym);
 
-#if QT_VERSION >= 300
                int i = list->mapIdx(dataColIdx);
                if (i >= 0)
                        setRenameEnabled(i, TRUE);
-#endif
                setText(dataColIdx, data);
                if (type == S_STRING)
                        prompt = QString("%1: %2").arg(prompt).arg(data);
@@ -432,7 +445,7 @@ void ConfigList::updateList(ConfigItem* item)
        if (!rootEntry) {
                if (mode != listMode)
                        goto update;
-               QListViewItemIterator it(this);
+               Q3ListViewItemIterator it(this);
                ConfigItem* item;
 
                for (; it.current(); ++it) {
@@ -527,11 +540,9 @@ void ConfigList::changeValue(ConfigItem* item)
        case S_INT:
        case S_HEX:
        case S_STRING:
-#if QT_VERSION >= 300
                if (colMap[dataColIdx] >= 0)
                        item->startRename(colMap[dataColIdx]);
                else
-#endif
                        parent()->lineEdit->show(item);
                break;
        }
@@ -563,7 +574,7 @@ void ConfigList::setParentMenu(void)
                return;
        setRootMenu(menu_get_parent_menu(rootEntry->parent));
 
-       QListViewItemIterator it(this);
+       Q3ListViewItemIterator it(this);
        for (; (item = (ConfigItem*)it.current()); it++) {
                if (item->menu == oldroot) {
                        setCurrentItem(item);
@@ -645,7 +656,7 @@ void ConfigList::updateMenuList(P* parent, struct menu* menu)
 
 void ConfigList::keyPressEvent(QKeyEvent* ev)
 {
-       QListViewItem* i = currentItem();
+       Q3ListViewItem* i = currentItem();
        ConfigItem* item;
        struct menu *menu;
        enum prop_type type;
@@ -811,10 +822,10 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
 {
        if (e->y() <= header()->geometry().bottom()) {
                if (!headerPopup) {
-                       QAction *action;
+                       Q3Action *action;
 
-                       headerPopup = new QPopupMenu(this);
-                       action = new QAction(NULL, _("Show Name"), 0, this);
+                       headerPopup = new Q3PopupMenu(this);
+                       action = new Q3Action(NULL, _("Show Name"), 0, this);
                          action->setToggleAction(TRUE);
                          connect(action, SIGNAL(toggled(bool)),
                                  parent(), SLOT(setShowName(bool)));
@@ -822,7 +833,7 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
                                  action, SLOT(setOn(bool)));
                          action->setOn(showName);
                          action->addTo(headerPopup);
-                       action = new QAction(NULL, _("Show Range"), 0, this);
+                       action = new Q3Action(NULL, _("Show Range"), 0, this);
                          action->setToggleAction(TRUE);
                          connect(action, SIGNAL(toggled(bool)),
                                  parent(), SLOT(setShowRange(bool)));
@@ -830,7 +841,7 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
                                  action, SLOT(setOn(bool)));
                          action->setOn(showRange);
                          action->addTo(headerPopup);
-                       action = new QAction(NULL, _("Show Data"), 0, this);
+                       action = new Q3Action(NULL, _("Show Data"), 0, this);
                          action->setToggleAction(TRUE);
                          connect(action, SIGNAL(toggled(bool)),
                                  parent(), SLOT(setShowData(bool)));
@@ -914,7 +925,7 @@ void ConfigView::setShowData(bool b)
 
 void ConfigList::setAllOpen(bool open)
 {
-       QListViewItemIterator it(this);
+       Q3ListViewItemIterator it(this);
 
        for (; it.current(); it++)
                it.current()->setOpen(open);
@@ -937,7 +948,7 @@ void ConfigView::updateListAll(void)
 }
 
 ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
-       : Parent(parent, name), sym(0), menu(0)
+       : Parent(parent, name), sym(0), _menu(0)
 {
        if (name) {
                configSettings->beginGroup(name);
@@ -960,7 +971,7 @@ void ConfigInfoView::setShowDebug(bool b)
 {
        if (_showDebug != b) {
                _showDebug = b;
-               if (menu)
+               if (_menu)
                        menuInfo();
                else if (sym)
                        symbolInfo();
@@ -970,11 +981,11 @@ void ConfigInfoView::setShowDebug(bool b)
 
 void ConfigInfoView::setInfo(struct menu *m)
 {
-       if (menu == m)
+       if (_menu == m)
                return;
-       menu = m;
+       _menu = m;
        sym = NULL;
-       if (!menu)
+       if (!_menu)
                clear();
        else
                menuInfo();
@@ -1001,11 +1012,11 @@ void ConfigInfoView::menuInfo(void)
        struct symbol* sym;
        QString head, debug, help;
 
-       sym = menu->sym;
+       sym = _menu->sym;
        if (sym) {
-               if (menu->prompt) {
+               if (_menu->prompt) {
                        head += "<big><b>";
-                       head += print_filter(_(menu->prompt->text));
+                       head += print_filter(_(_menu->prompt->text));
                        head += "</b></big>";
                        if (sym->name) {
                                head += " (";
@@ -1031,23 +1042,23 @@ void ConfigInfoView::menuInfo(void)
                        debug = debug_info(sym);
 
                struct gstr help_gstr = str_new();
-               menu_get_ext_help(menu, &help_gstr);
+               menu_get_ext_help(_menu, &help_gstr);
                help = print_filter(str_get(&help_gstr));
                str_free(&help_gstr);
-       } else if (menu->prompt) {
+       } else if (_menu->prompt) {
                head += "<big><b>";
-               head += print_filter(_(menu->prompt->text));
+               head += print_filter(_(_menu->prompt->text));
                head += "</b></big><br><br>";
                if (showDebug()) {
-                       if (menu->prompt->visible.expr) {
+                       if (_menu->prompt->visible.expr) {
                                debug += "&nbsp;&nbsp;dep: ";
-                               expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
+                               expr_print(_menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
                                debug += "<br><br>";
                        }
                }
        }
        if (showDebug())
-               debug += QString().sprintf("defined at %s:%d<br><br>", menu->file->name, menu->lineno);
+               debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
 
        setText(head + debug + help);
 }
@@ -1150,10 +1161,10 @@ void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char
                *text += str2;
 }
 
-QPopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
+Q3PopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
 {
-       QPopupMenu* popup = Parent::createPopupMenu(pos);
-       QAction* action = new QAction(NULL, _("Show Debug Info"), 0, popup);
+       Q3PopupMenu* popup = Parent::createPopupMenu(pos);
+       Q3Action* action = new Q3Action(NULL, _("Show Debug Info"), 0, popup);
          action->setToggleAction(TRUE);
          connect(action, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool)));
          connect(this, SIGNAL(showDebugChanged(bool)), action, SLOT(setOn(bool)));
@@ -1210,7 +1221,7 @@ ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *nam
                        y = configSettings->readNumEntry("/window y", 0, &ok);
                if (ok)
                        move(x, y);
-               QValueList<int> sizes = configSettings->readSizes("/split", &ok);
+               Q3ValueList<int> sizes = configSettings->readSizes("/split", &ok);
                if (ok)
                        split->setSizes(sizes);
                configSettings->endGroup();
@@ -1263,8 +1274,14 @@ ConfigMainWindow::ConfigMainWindow(void)
        char title[256];
 
        QDesktopWidget *d = configApp->desktop();
-       snprintf(title, sizeof(title), _("Buildroot v%s Configuration"),
-               getenv("BR2_VERSION"));
+       snprintf(title, sizeof(title), "%s%s",
+               rootmenu.prompt->text,
+#if QT_VERSION < 0x040000
+               " (Qt3)"
+#else
+               ""
+#endif
+               );
        setCaption(title);
 
        width = configSettings->readNumEntry("/window width", d->width() - 64);
@@ -1297,42 +1314,42 @@ ConfigMainWindow::ConfigMainWindow(void)
        configList->setFocus();
 
        menu = menuBar();
-       toolBar = new QToolBar("Tools", this);
+       toolBar = new Q3ToolBar("Tools", this);
 
-       backAction = new QAction("Back", QPixmap(xpm_back), _("Back"), 0, this);
+       backAction = new Q3Action("Back", QPixmap(xpm_back), _("Back"), 0, this);
          connect(backAction, SIGNAL(activated()), SLOT(goBack()));
          backAction->setEnabled(FALSE);
-       QAction *quitAction = new QAction("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
+       Q3Action *quitAction = new Q3Action("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
          connect(quitAction, SIGNAL(activated()), SLOT(close()));
-       QAction *loadAction = new QAction("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
+       Q3Action *loadAction = new Q3Action("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
          connect(loadAction, SIGNAL(activated()), SLOT(loadConfig()));
-       saveAction = new QAction("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
+       saveAction = new Q3Action("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
          connect(saveAction, SIGNAL(activated()), SLOT(saveConfig()));
        conf_set_changed_callback(conf_changed);
        // Set saveAction's initial state
        conf_changed();
-       QAction *saveAsAction = new QAction("Save As...", _("Save &As..."), 0, this);
+       Q3Action *saveAsAction = new Q3Action("Save As...", _("Save &As..."), 0, this);
          connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs()));
-       QAction *searchAction = new QAction("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
+       Q3Action *searchAction = new Q3Action("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
          connect(searchAction, SIGNAL(activated()), SLOT(searchConfig()));
-       QAction *singleViewAction = new QAction("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
+       Q3Action *singleViewAction = new Q3Action("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
          connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView()));
-       QAction *splitViewAction = new QAction("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
+       Q3Action *splitViewAction = new Q3Action("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
          connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView()));
-       QAction *fullViewAction = new QAction("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
+       Q3Action *fullViewAction = new Q3Action("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
          connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView()));
 
-       QAction *showNameAction = new QAction(NULL, _("Show Name"), 0, this);
+       Q3Action *showNameAction = new Q3Action(NULL, _("Show Name"), 0, this);
          showNameAction->setToggleAction(TRUE);
          connect(showNameAction, SIGNAL(toggled(bool)), configView, SLOT(setShowName(bool)));
          connect(configView, SIGNAL(showNameChanged(bool)), showNameAction, SLOT(setOn(bool)));
          showNameAction->setOn(configView->showName());
-       QAction *showRangeAction = new QAction(NULL, _("Show Range"), 0, this);
+       Q3Action *showRangeAction = new Q3Action(NULL, _("Show Range"), 0, this);
          showRangeAction->setToggleAction(TRUE);
          connect(showRangeAction, SIGNAL(toggled(bool)), configView, SLOT(setShowRange(bool)));
          connect(configView, SIGNAL(showRangeChanged(bool)), showRangeAction, SLOT(setOn(bool)));
          showRangeAction->setOn(configList->showRange);
-       QAction *showDataAction = new QAction(NULL, _("Show Data"), 0, this);
+       Q3Action *showDataAction = new Q3Action(NULL, _("Show Data"), 0, this);
          showDataAction->setToggleAction(TRUE);
          connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
          connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
@@ -1345,9 +1362,15 @@ ConfigMainWindow::ConfigMainWindow(void)
        connect(optGroup, SIGNAL(selected(QAction *)), menuView,
                SLOT(setOptionMode(QAction *)));
 
-       configView->showNormalAction = new QAction(NULL, _("Show Normal Options"), 0, optGroup);
-       configView->showAllAction = new QAction(NULL, _("Show All Options"), 0, optGroup);
-       configView->showPromptAction = new QAction(NULL, _("Show Prompt Options"), 0, optGroup);
+#if QT_VERSION >= 0x040000
+       configView->showNormalAction = new QAction(_("Show Normal Options"), optGroup);
+       configView->showAllAction = new QAction(_("Show All Options"), optGroup);
+       configView->showPromptAction = new QAction(_("Show Prompt Options"), optGroup);
+#else
+       configView->showNormalAction = new QAction(_("Show Normal Options"), 0, optGroup);
+       configView->showAllAction = new QAction(_("Show All Options"), 0, optGroup);
+       configView->showPromptAction = new QAction(_("Show Prompt Options"), 0, optGroup);
+#endif
        configView->showNormalAction->setToggleAction(TRUE);
        configView->showNormalAction->setOn(configList->optMode == normalOpt);
        configView->showAllAction->setToggleAction(TRUE);
@@ -1355,15 +1378,15 @@ ConfigMainWindow::ConfigMainWindow(void)
        configView->showPromptAction->setToggleAction(TRUE);
        configView->showPromptAction->setOn(configList->optMode == promptOpt);
 
-       QAction *showDebugAction = new QAction(NULL, _("Show Debug Info"), 0, this);
+       Q3Action *showDebugAction = new Q3Action(NULL, _("Show Debug Info"), 0, this);
          showDebugAction->setToggleAction(TRUE);
          connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
          connect(helpText, SIGNAL(showDebugChanged(bool)), showDebugAction, SLOT(setOn(bool)));
          showDebugAction->setOn(helpText->showDebug());
 
-       QAction *showIntroAction = new QAction(NULL, _("Introduction"), 0, this);
+       Q3Action *showIntroAction = new Q3Action(NULL, _("Introduction"), 0, this);
          connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro()));
-       QAction *showAboutAction = new QAction(NULL, _("About"), 0, this);
+       Q3Action *showAboutAction = new Q3Action(NULL, _("About"), 0, this);
          connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout()));
 
        // init tool bar
@@ -1377,7 +1400,7 @@ ConfigMainWindow::ConfigMainWindow(void)
        fullViewAction->addTo(toolBar);
 
        // create config menu
-       QPopupMenu* config = new QPopupMenu(this);
+       Q3PopupMenu* config = new Q3PopupMenu(this);
        menu->insertItem(_("&File"), config);
        loadAction->addTo(config);
        saveAction->addTo(config);
@@ -1386,12 +1409,12 @@ ConfigMainWindow::ConfigMainWindow(void)
        quitAction->addTo(config);
 
        // create edit menu
-       QPopupMenu* editMenu = new QPopupMenu(this);
+       Q3PopupMenu* editMenu = new Q3PopupMenu(this);
        menu->insertItem(_("&Edit"), editMenu);
        searchAction->addTo(editMenu);
 
        // create options menu
-       QPopupMenu* optionMenu = new QPopupMenu(this);
+       Q3PopupMenu* optionMenu = new Q3PopupMenu(this);
        menu->insertItem(_("&Option"), optionMenu);
        showNameAction->addTo(optionMenu);
        showRangeAction->addTo(optionMenu);
@@ -1399,10 +1422,9 @@ ConfigMainWindow::ConfigMainWindow(void)
        optionMenu->insertSeparator();
        optGroup->addTo(optionMenu);
        optionMenu->insertSeparator();
-       showDebugAction->addTo(optionMenu);
 
        // create help menu
-       QPopupMenu* helpMenu = new QPopupMenu(this);
+       Q3PopupMenu* helpMenu = new Q3PopupMenu(this);
        menu->insertSeparator();
        menu->insertItem(_("&Help"), helpMenu);
        showIntroAction->addTo(helpMenu);
@@ -1437,7 +1459,7 @@ ConfigMainWindow::ConfigMainWindow(void)
                showSplitView();
 
        // UI setup done, restore splitter positions
-       QValueList<int> sizes = configSettings->readSizes("/split1", &ok);
+       Q3ValueList<int> sizes = configSettings->readSizes("/split1", &ok);
        if (ok)
                split1->setSizes(sizes);
 
@@ -1448,7 +1470,7 @@ ConfigMainWindow::ConfigMainWindow(void)
 
 void ConfigMainWindow::loadConfig(void)
 {
-       QString s = QFileDialog::getOpenFileName(conf_get_configname(), NULL, this);
+       QString s = Q3FileDialog::getOpenFileName(conf_get_configname(), NULL, this);
        if (s.isNull())
                return;
        if (conf_read(QFile::encodeName(s)))
@@ -1464,7 +1486,7 @@ void ConfigMainWindow::saveConfig(void)
 
 void ConfigMainWindow::saveConfigAs(void)
 {
-       QString s = QFileDialog::getSaveFileName(conf_get_configname(), NULL, this);
+       QString s = Q3FileDialog::getSaveFileName(conf_get_configname(), NULL, this);
        if (s.isNull())
                return;
        if (conf_write(QFile::encodeName(s)))
@@ -1633,7 +1655,7 @@ void ConfigMainWindow::closeEvent(QCloseEvent* e)
 
 void ConfigMainWindow::showIntro(void)
 {
-       static const QString str = _("Welcome to the qconf graphical kernel configuration tool for Linux.\n\n"
+       static const QString str = _("Welcome to the qconf graphical configuration tool.\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"
index 636a74b23bf93bba0eeb2a3e263d21891a60889b..91677d900dbd0aa68e07ca74a90709d5182edcf5 100644 (file)
@@ -3,26 +3,25 @@
  * Released under the terms of the GNU GPL v2.0.
  */
 
+#if QT_VERSION < 0x040000
 #include <qlistview.h>
-#if QT_VERSION >= 300
-#include <qsettings.h>
 #else
-class QSettings {
-public:
-       void beginGroup(const QString& group) { }
-       void endGroup(void) { }
-       bool readBoolEntry(const QString& key, bool def = FALSE, bool* ok = 0) const
-       { if (ok) *ok = FALSE; return def; }
-       int readNumEntry(const QString& key, int def = 0, bool* ok = 0) const
-       { if (ok) *ok = FALSE; return def; }
-       QString readEntry(const QString& key, const QString& def = QString::null, bool* ok = 0) const
-       { if (ok) *ok = FALSE; return def; }
-       QStringList readListEntry(const QString& key, bool* ok = 0) const
-       { if (ok) *ok = FALSE; return QStringList(); }
-       template <class t>
-       bool writeEntry(const QString& key, t value)
-       { return TRUE; }
-};
+#include <q3listview.h>
+#endif
+#include <qsettings.h>
+
+#if QT_VERSION < 0x040000
+#define Q3ValueList             QValueList
+#define Q3PopupMenu             QPopupMenu
+#define Q3ListView              QListView
+#define Q3ListViewItem          QListViewItem
+#define Q3VBox                  QVBox
+#define Q3TextBrowser           QTextBrowser
+#define Q3MainWindow            QMainWindow
+#define Q3Action                QAction
+#define Q3ToolBar               QToolBar
+#define Q3ListViewItemIterator  QListViewItemIterator
+#define Q3FileDialog            QFileDialog
 #endif
 
 class ConfigView;
@@ -31,11 +30,10 @@ class ConfigItem;
 class ConfigLineEdit;
 class ConfigMainWindow;
 
-
 class ConfigSettings : public QSettings {
 public:
-       QValueList<int> readSizes(const QString& key, bool *ok);
-       bool writeSizes(const QString& key, const QValueList<int>& value);
+       Q3ValueList<int> readSizes(const QString& key, bool *ok);
+       bool writeSizes(const QString& key, const Q3ValueList<int>& value);
 };
 
 enum colIdx {
@@ -48,9 +46,9 @@ enum optionMode {
        normalOpt = 0, allOpt, promptOpt
 };
 
-class ConfigList : public QListView {
+class ConfigList : public Q3ListView {
        Q_OBJECT
-       typedef class QListView Parent;
+       typedef class Q3ListView Parent;
 public:
        ConfigList(ConfigView* p, const char *name = 0);
        void reinit(void);
@@ -135,17 +133,17 @@ public:
        struct menu *rootEntry;
        QColorGroup disabledColorGroup;
        QColorGroup inactivedColorGroup;
-       QPopupMenu* headerPopup;
+       Q3PopupMenu* headerPopup;
 
 private:
        int colMap[colNr];
        int colRevMap[colNr];
 };
 
-class ConfigItem : public QListViewItem {
-       typedef class QListViewItem Parent;
+class ConfigItem : public Q3ListViewItem {
+       typedef class Q3ListViewItem Parent;
 public:
-       ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v)
+       ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
        : Parent(parent, after), menu(m), visible(v), goParent(false)
        {
                init();
@@ -155,16 +153,14 @@ public:
        {
                init();
        }
-       ConfigItem(QListView *parent, ConfigItem *after, bool v)
+       ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
        : Parent(parent, after), menu(0), visible(v), goParent(true)
        {
                init();
        }
        ~ConfigItem(void);
        void init(void);
-#if QT_VERSION >= 300
        void okRename(int col);
-#endif
        void updateMenu(void);
        void testUpdateMenu(bool v);
        ConfigList* listView() const
@@ -219,9 +215,9 @@ public:
        ConfigItem *item;
 };
 
-class ConfigView : public QVBox {
+class ConfigView : public Q3VBox {
        Q_OBJECT
-       typedef class QVBox Parent;
+       typedef class Q3VBox Parent;
 public:
        ConfigView(QWidget* parent, const char *name = 0);
        ~ConfigView(void);
@@ -252,9 +248,9 @@ public:
        static QAction *showPromptAction;
 };
 
-class ConfigInfoView : public QTextBrowser {
+class ConfigInfoView : public Q3TextBrowser {
        Q_OBJECT
-       typedef class QTextBrowser Parent;
+       typedef class Q3TextBrowser Parent;
 public:
        ConfigInfoView(QWidget* parent, const char *name = 0);
        bool showDebug(void) const { return _showDebug; }
@@ -274,11 +270,11 @@ protected:
        QString debug_info(struct symbol *sym);
        static QString print_filter(const QString &str);
        static void expr_print_help(void *data, struct symbol *sym, const char *str);
-       QPopupMenu* createPopupMenu(const QPoint& pos);
+       Q3PopupMenu* createPopupMenu(const QPoint& pos);
        void contentsContextMenuEvent(QContextMenuEvent *e);
 
        struct symbol *sym;
-       struct menu *menu;
+       struct menu *_menu;
        bool _showDebug;
 };
 
@@ -302,10 +298,10 @@ protected:
        struct symbol **result;
 };
 
-class ConfigMainWindow : public QMainWindow {
+class ConfigMainWindow : public Q3MainWindow {
        Q_OBJECT
 
-       static QAction *saveAction;
+       static Q3Action *saveAction;
        static void conf_changed(void);
 public:
        ConfigMainWindow(void);
@@ -334,8 +330,8 @@ protected:
        ConfigView *configView;
        ConfigList *configList;
        ConfigInfoView *helpText;
-       QToolBar *toolBar;
-       QAction *backAction;
+       Q3ToolBar *toolBar;
+       Q3Action *backAction;
        QSplitter* split1;
        QSplitter* split2;
 };
index c70a27d924f0a74ae01762ff9e048847d1e5aa44..fd81fc33d6338858fc8352c82034937f26010ce8 100644 (file)
@@ -42,6 +42,8 @@
 #    mv config_strip .config
 #    make oldconfig
 #
+use strict;
+
 my $config = ".config";
 
 my $uname = `uname -r`;
@@ -123,7 +125,6 @@ my %selects;
 my %prompts;
 my %objects;
 my $var;
-my $cont = 0;
 my $iflevel = 0;
 my @ifdeps;
 
@@ -137,19 +138,45 @@ sub read_kconfig {
     my $config;
     my @kconfigs;
 
-    open(KIN, "$ksource/$kconfig") || die "Can't open $kconfig";
+    my $cont = 0;
+    my $line;
+
+    my $source = "$ksource/$kconfig";
+    my $last_source = "";
+
+    # Check for any environment variables used
+    while ($source =~ /\$(\w+)/ && $last_source ne $source) {
+       my $env = $1;
+       $last_source = $source;
+       $source =~ s/\$$env/$ENV{$env}/;
+    }
+
+    open(KIN, "$source") || die "Can't open $kconfig";
     while (<KIN>) {
        chomp;
 
+       # Make sure that lines ending with \ continue
+       if ($cont) {
+           $_ = $line . " " . $_;
+       }
+
+       if (s/\\$//) {
+           $cont = 1;
+           $line = $_;
+           next;
+       }
+
+       $cont = 0;
+
        # collect any Kconfig sources
        if (/^source\s*"(.*)"/) {
            $kconfigs[$#kconfigs+1] = $1;
        }
 
        # configs found
-       if (/^\s*config\s+(\S+)\s*$/) {
+       if (/^\s*(menu)?config\s+(\S+)\s*$/) {
            $state = "NEW";
-           $config = $1;
+           $config = $2;
 
            for (my $i = 0; $i < $iflevel; $i++) {
                if ($i) {
@@ -178,7 +205,7 @@ sub read_kconfig {
        # configs without prompts must be selected
        } elsif ($state ne "NONE" && /^\s*tristate\s\S/) {
            # note if the config has a prompt
-           $prompt{$config} = 1;
+           $prompts{$config} = 1;
 
        # Check for if statements
        } elsif (/^if\s+(.*\S)\s*$/) {
@@ -218,6 +245,8 @@ if ($kconfig) {
 # Read all Makefiles to map the configs to the objects
 foreach my $makefile (@makefiles) {
 
+    my $cont = 0;
+
     open(MIN,$makefile) || die "Can't open $makefile";
     while (<MIN>) {
        my $objs;
@@ -281,7 +310,7 @@ if (defined($lsmod_file)) {
     # see what modules are loaded on this system
     my $lsmod;
 
-    foreach $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
+    foreach my $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
        if ( -x "$dir/lsmod" ) {
            $lsmod = "$dir/lsmod";
            last;
@@ -363,7 +392,7 @@ while ($repeat) {
            parse_config_dep_select $depends{$config};
        }
 
-       if (defined($prompt{$config}) || !defined($selects{$config})) {
+       if (defined($prompts{$config}) || !defined($selects{$config})) {
            next;
        }
 
index 1f8b305449db354b103c6eb7ced09095c801dc1b..c0efe102d655c40547afe92014cec1c74b70b3c2 100644 (file)
@@ -350,7 +350,6 @@ void sym_calc_value(struct symbol *sym)
                                }
                        }
                calc_newval:
-#if 0
                        if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
                                fprintf(stderr, "warning: (");
                                expr_fprint(sym->rev_dep.expr, stderr);
@@ -359,7 +358,6 @@ void sym_calc_value(struct symbol *sym)
                                expr_fprint(sym->dir_dep.expr, stderr);
                                fprintf(stderr, ")\n");
                        }
-#endif
                        newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
                }
                if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
@@ -842,6 +840,55 @@ struct symbol *sym_find(const char *name)
        return symbol;
 }
 
+/*
+ * Expand symbol's names embedded in the string given in argument. Symbols'
+ * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
+ * the empty string.
+ */
+const char *sym_expand_string_value(const char *in)
+{
+       const char *src;
+       char *res;
+       size_t reslen;
+
+       reslen = strlen(in) + 1;
+       res = malloc(reslen);
+       res[0] = '\0';
+
+       while ((src = strchr(in, '$'))) {
+               char *p, name[SYMBOL_MAXLENGTH];
+               const char *symval = "";
+               struct symbol *sym;
+               size_t newlen;
+
+               strncat(res, in, src - in);
+               src++;
+
+               p = name;
+               while (isalnum(*src) || *src == '_')
+                       *p++ = *src++;
+               *p = '\0';
+
+               sym = sym_find(name);
+               if (sym != NULL) {
+                       sym_calc_value(sym);
+                       symval = sym_get_string_value(sym);
+               }
+
+               newlen = strlen(res) + strlen(symval) + strlen(src);
+               if (newlen > reslen) {
+                       reslen = newlen;
+                       res = realloc(res, reslen);
+               }
+
+               strcat(res, symval);
+               in = src;
+       }
+       strcat(res, in);
+
+       return res;
+}
+
 struct symbol **sym_re_search(const char *pattern)
 {
        struct symbol *sym, **sym_arr = NULL;
index b15dbab33fceaa6b37a71601f7a1fcbd710dd017..5fc36c7d26c108f2f2aa685d994afffef51ed09d 100644 (file)
 struct file *file_lookup(const char *name)
 {
        struct file *file;
+       const char *file_name = sym_expand_string_value(name);
 
        for (file = file_list; file; file = file->next) {
-               if (!strcmp(name, file->name))
+               if (!strcmp(name, file->name)) {
+                       free((void *)file_name);
                        return file;
+               }
        }
 
        file = malloc(sizeof(*file));
        memset(file, 0, sizeof(*file));
-       file->name = strdup(name);
+       file->name = file_name;
        file->next = file_list;
        file_list = file;
        return file;
index d8f7236cb0a376e91a0254882cdcd17d1ee91c9b..3dbaec185cc486d183ed5ba87cfe848635e4b968 100644 (file)
@@ -304,9 +304,10 @@ void zconf_nextfile(const char *name)
        memset(buf, 0, sizeof(*buf));
 
        current_buf->state = YY_CURRENT_BUFFER;
-       yyin = zconf_fopen(name);
+       yyin = zconf_fopen(file->name);
        if (!yyin) {
-               printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
+               printf("%s:%d: can't open file \"%s\"\n",
+                   zconf_curname(), zconf_lineno(), file->name);
                exit(1);
        }
        yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
@@ -353,7 +354,7 @@ int zconf_lineno(void)
        return current_pos.lineno;
 }
 
-char *zconf_curname(void)
+const char *zconf_curname(void)
 {
        return current_pos.file ? current_pos.file->name : "<none>";
 }
index 73d8c199401bdeedaa9f9b313958df4a71e58bae..0566497a50e5799143069e835ab24ee7ee9db1a7 100644 (file)
@@ -417,18 +417,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  3
+#define YYFINAL  11
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   259
+#define YYLAST   277
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  35
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  46
+#define YYNNTS  48
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  110
+#define YYNRULES  113
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  180
+#define YYNSTATES  185
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -476,73 +476,74 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     5,     6,     9,    12,    15,    20,    23,
-      28,    33,    37,    39,    41,    43,    45,    47,    49,    51,
-      53,    55,    57,    59,    61,    63,    67,    70,    74,    77,
-      81,    84,    85,    88,    91,    94,    97,   100,   103,   107,
-     112,   117,   122,   128,   132,   133,   137,   138,   141,   145,
-     148,   150,   154,   155,   158,   161,   164,   167,   170,   175,
-     179,   182,   187,   188,   191,   195,   197,   201,   202,   205,
-     208,   211,   215,   218,   220,   224,   225,   228,   231,   234,
-     238,   242,   245,   248,   251,   252,   255,   258,   261,   266,
-     267,   270,   272,   274,   277,   280,   283,   285,   288,   289,
-     292,   294,   298,   302,   306,   309,   313,   317,   319,   321,
-     322
+       0,     0,     3,     6,     8,    11,    13,    14,    17,    20,
+      23,    26,    31,    36,    40,    42,    44,    46,    48,    50,
+      52,    54,    56,    58,    60,    62,    64,    66,    70,    73,
+      77,    80,    84,    87,    88,    91,    94,    97,   100,   103,
+     106,   110,   115,   120,   125,   131,   135,   136,   140,   141,
+     144,   148,   151,   153,   157,   158,   161,   164,   167,   170,
+     173,   178,   182,   185,   190,   191,   194,   198,   200,   204,
+     205,   208,   211,   214,   218,   222,   225,   227,   231,   232,
+     235,   238,   241,   245,   249,   252,   255,   258,   259,   262,
+     265,   268,   273,   274,   277,   279,   281,   284,   287,   290,
+     292,   295,   296,   299,   301,   305,   309,   313,   316,   320,
+     324,   326,   328,   329
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      36,     0,    -1,    37,    -1,    -1,    37,    39,    -1,    37,
-      53,    -1,    37,    64,    -1,    37,     3,    74,    76,    -1,
-      37,    75,    -1,    37,    25,     1,    30,    -1,    37,    38,
-       1,    30,    -1,    37,     1,    30,    -1,    16,    -1,    18,
-      -1,    19,    -1,    21,    -1,    17,    -1,    22,    -1,    20,
-      -1,    30,    -1,    59,    -1,    68,    -1,    42,    -1,    44,
-      -1,    66,    -1,    25,     1,    30,    -1,     1,    30,    -1,
-      10,    25,    30,    -1,    41,    45,    -1,    11,    25,    30,
-      -1,    43,    45,    -1,    -1,    45,    46,    -1,    45,    47,
-      -1,    45,    72,    -1,    45,    70,    -1,    45,    40,    -1,
-      45,    30,    -1,    19,    73,    30,    -1,    18,    74,    77,
-      30,    -1,    20,    78,    77,    30,    -1,    21,    25,    77,
-      30,    -1,    22,    79,    79,    77,    30,    -1,    23,    48,
-      30,    -1,    -1,    48,    25,    49,    -1,    -1,    33,    74,
-      -1,     7,    80,    30,    -1,    50,    54,    -1,    75,    -1,
-      51,    56,    52,    -1,    -1,    54,    55,    -1,    54,    72,
-      -1,    54,    70,    -1,    54,    30,    -1,    54,    40,    -1,
-      18,    74,    77,    30,    -1,    19,    73,    30,    -1,    17,
-      30,    -1,    20,    25,    77,    30,    -1,    -1,    56,    39,
-      -1,    14,    78,    76,    -1,    75,    -1,    57,    60,    58,
-      -1,    -1,    60,    39,    -1,    60,    64,    -1,    60,    53,
-      -1,     4,    74,    30,    -1,    61,    71,    -1,    75,    -1,
-      62,    65,    63,    -1,    -1,    65,    39,    -1,    65,    64,
-      -1,    65,    53,    -1,     6,    74,    30,    -1,     9,    74,
-      30,    -1,    67,    71,    -1,    12,    30,    -1,    69,    13,
-      -1,    -1,    71,    72,    -1,    71,    30,    -1,    71,    40,
-      -1,    16,    24,    78,    30,    -1,    -1,    74,    77,    -1,
-      25,    -1,    26,    -1,     5,    30,    -1,     8,    30,    -1,
-      15,    30,    -1,    30,    -1,    76,    30,    -1,    -1,    14,
-      78,    -1,    79,    -1,    79,    33,    79,    -1,    79,    27,
-      79,    -1,    29,    78,    28,    -1,    34,    78,    -1,    78,
-      31,    78,    -1,    78,    32,    78,    -1,    25,    -1,    26,
-      -1,    -1,    25,    -1
+      36,     0,    -1,    78,    37,    -1,    37,    -1,    62,    38,
+      -1,    38,    -1,    -1,    38,    40,    -1,    38,    54,    -1,
+      38,    66,    -1,    38,    77,    -1,    38,    25,     1,    30,
+      -1,    38,    39,     1,    30,    -1,    38,     1,    30,    -1,
+      16,    -1,    18,    -1,    19,    -1,    21,    -1,    17,    -1,
+      22,    -1,    20,    -1,    30,    -1,    60,    -1,    70,    -1,
+      43,    -1,    45,    -1,    68,    -1,    25,     1,    30,    -1,
+       1,    30,    -1,    10,    25,    30,    -1,    42,    46,    -1,
+      11,    25,    30,    -1,    44,    46,    -1,    -1,    46,    47,
+      -1,    46,    48,    -1,    46,    74,    -1,    46,    72,    -1,
+      46,    41,    -1,    46,    30,    -1,    19,    75,    30,    -1,
+      18,    76,    79,    30,    -1,    20,    80,    79,    30,    -1,
+      21,    25,    79,    30,    -1,    22,    81,    81,    79,    30,
+      -1,    23,    49,    30,    -1,    -1,    49,    25,    50,    -1,
+      -1,    33,    76,    -1,     7,    82,    30,    -1,    51,    55,
+      -1,    77,    -1,    52,    57,    53,    -1,    -1,    55,    56,
+      -1,    55,    74,    -1,    55,    72,    -1,    55,    30,    -1,
+      55,    41,    -1,    18,    76,    79,    30,    -1,    19,    75,
+      30,    -1,    17,    30,    -1,    20,    25,    79,    30,    -1,
+      -1,    57,    40,    -1,    14,    80,    78,    -1,    77,    -1,
+      58,    61,    59,    -1,    -1,    61,    40,    -1,    61,    66,
+      -1,    61,    54,    -1,     3,    76,    78,    -1,     4,    76,
+      30,    -1,    63,    73,    -1,    77,    -1,    64,    67,    65,
+      -1,    -1,    67,    40,    -1,    67,    66,    -1,    67,    54,
+      -1,     6,    76,    30,    -1,     9,    76,    30,    -1,    69,
+      73,    -1,    12,    30,    -1,    71,    13,    -1,    -1,    73,
+      74,    -1,    73,    30,    -1,    73,    41,    -1,    16,    24,
+      80,    30,    -1,    -1,    76,    79,    -1,    25,    -1,    26,
+      -1,     5,    30,    -1,     8,    30,    -1,    15,    30,    -1,
+      30,    -1,    78,    30,    -1,    -1,    14,    80,    -1,    81,
+      -1,    81,    33,    81,    -1,    81,    27,    81,    -1,    29,
+      80,    28,    -1,    34,    80,    -1,    80,    31,    80,    -1,
+      80,    32,    80,    -1,    25,    -1,    26,    -1,    -1,    25,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   107,   107,   109,   111,   112,   113,   114,   115,   116,
-     117,   121,   125,   125,   125,   125,   125,   125,   125,   129,
-     130,   131,   132,   133,   134,   138,   139,   145,   153,   159,
-     167,   177,   179,   180,   181,   182,   183,   184,   187,   195,
-     201,   211,   217,   223,   226,   228,   239,   240,   245,   254,
-     259,   267,   270,   272,   273,   274,   275,   276,   279,   285,
-     296,   302,   312,   314,   319,   327,   335,   338,   340,   341,
-     342,   347,   354,   359,   367,   370,   372,   373,   374,   377,
-     385,   392,   399,   405,   412,   414,   415,   416,   419,   427,
-     429,   434,   435,   438,   439,   440,   444,   445,   448,   449,
-     452,   453,   454,   455,   456,   457,   458,   461,   462,   465,
-     466
+       0,   107,   107,   107,   109,   109,   111,   113,   114,   115,
+     116,   117,   118,   122,   126,   126,   126,   126,   126,   126,
+     126,   130,   131,   132,   133,   134,   135,   139,   140,   146,
+     154,   160,   168,   178,   180,   181,   182,   183,   184,   185,
+     188,   196,   202,   212,   218,   224,   227,   229,   240,   241,
+     246,   255,   260,   268,   271,   273,   274,   275,   276,   277,
+     280,   286,   297,   303,   313,   315,   320,   328,   336,   339,
+     341,   342,   343,   348,   355,   362,   367,   375,   378,   380,
+     381,   382,   385,   393,   400,   407,   413,   420,   422,   423,
+     424,   427,   435,   437,   442,   443,   446,   447,   448,   452,
+     453,   456,   457,   460,   461,   462,   463,   464,   465,   466,
+     469,   470,   473,   474
 };
 #endif
 
@@ -557,17 +558,17 @@ static const char *const yytname[] =
   "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_RANGE",
   "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
   "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
-  "T_NOT", "$accept", "input", "stmt_list", "option_name", "common_stmt",
-  "option_error", "config_entry_start", "config_stmt",
+  "T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
+  "common_stmt", "option_error", "config_entry_start", "config_stmt",
   "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
   "config_option", "symbol_option", "symbol_option_list",
   "symbol_option_arg", "choice", "choice_entry", "choice_end",
   "choice_stmt", "choice_option_list", "choice_option", "choice_block",
-  "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
-  "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
-  "comment_stmt", "help_start", "help", "depends_list", "depends",
-  "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
-  "word_opt", 0
+  "if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
+  "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
+  "comment", "comment_stmt", "help_start", "help", "depends_list",
+  "depends", "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr",
+  "symbol", "word_opt", 0
 };
 #endif
 
@@ -586,35 +587,35 @@ static const yytype_uint16 yytoknum[] =
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    35,    36,    37,    37,    37,    37,    37,    37,    37,
-      37,    37,    38,    38,    38,    38,    38,    38,    38,    39,
-      39,    39,    39,    39,    39,    40,    40,    41,    42,    43,
-      44,    45,    45,    45,    45,    45,    45,    45,    46,    46,
-      46,    46,    46,    47,    48,    48,    49,    49,    50,    51,
-      52,    53,    54,    54,    54,    54,    54,    54,    55,    55,
-      55,    55,    56,    56,    57,    58,    59,    60,    60,    60,
-      60,    61,    62,    63,    64,    65,    65,    65,    65,    66,
-      67,    68,    69,    70,    71,    71,    71,    71,    72,    73,
-      73,    74,    74,    75,    75,    75,    76,    76,    77,    77,
-      78,    78,    78,    78,    78,    78,    78,    79,    79,    80,
-      80
+       0,    35,    36,    36,    37,    37,    38,    38,    38,    38,
+      38,    38,    38,    38,    39,    39,    39,    39,    39,    39,
+      39,    40,    40,    40,    40,    40,    40,    41,    41,    42,
+      43,    44,    45,    46,    46,    46,    46,    46,    46,    46,
+      47,    47,    47,    47,    47,    48,    49,    49,    50,    50,
+      51,    52,    53,    54,    55,    55,    55,    55,    55,    55,
+      56,    56,    56,    56,    57,    57,    58,    59,    60,    61,
+      61,    61,    61,    62,    63,    64,    65,    66,    67,    67,
+      67,    67,    68,    69,    70,    71,    72,    73,    73,    73,
+      73,    74,    75,    75,    76,    76,    77,    77,    77,    78,
+      78,    79,    79,    80,    80,    80,    80,    80,    80,    80,
+      81,    81,    82,    82
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     1,     0,     2,     2,     2,     4,     2,     4,
-       4,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     2,     3,     2,     3,
-       2,     0,     2,     2,     2,     2,     2,     2,     3,     4,
-       4,     4,     5,     3,     0,     3,     0,     2,     3,     2,
-       1,     3,     0,     2,     2,     2,     2,     2,     4,     3,
-       2,     4,     0,     2,     3,     1,     3,     0,     2,     2,
-       2,     3,     2,     1,     3,     0,     2,     2,     2,     3,
-       3,     2,     2,     2,     0,     2,     2,     2,     4,     0,
-       2,     1,     1,     2,     2,     2,     1,     2,     0,     2,
-       1,     3,     3,     3,     2,     3,     3,     1,     1,     0,
-       1
+       0,     2,     2,     1,     2,     1,     0,     2,     2,     2,
+       2,     4,     4,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     3,     2,     3,
+       2,     3,     2,     0,     2,     2,     2,     2,     2,     2,
+       3,     4,     4,     4,     5,     3,     0,     3,     0,     2,
+       3,     2,     1,     3,     0,     2,     2,     2,     2,     2,
+       4,     3,     2,     4,     0,     2,     3,     1,     3,     0,
+       2,     2,     2,     3,     3,     2,     1,     3,     0,     2,
+       2,     2,     3,     3,     2,     2,     2,     0,     2,     2,
+       2,     4,     0,     2,     1,     1,     2,     2,     2,     1,
+       2,     0,     2,     1,     3,     3,     3,     2,     3,     3,
+       1,     1,     0,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -622,158 +623,165 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       3,     0,     0,     1,     0,     0,     0,     0,     0,   109,
-       0,     0,     0,     0,     0,     0,    12,    16,    13,    14,
-      18,    15,    17,     0,    19,     0,     4,    31,    22,    31,
-      23,    52,    62,     5,    67,    20,    84,    75,     6,    24,
-      84,    21,     8,    11,    91,    92,     0,     0,    93,     0,
-     110,     0,    94,     0,     0,     0,   107,   108,     0,     0,
-       0,   100,    95,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    96,     7,    71,    79,    48,    80,    27,
-      29,     0,   104,     0,     0,    64,     0,     0,     9,    10,
-       0,     0,     0,     0,    89,     0,     0,     0,    44,     0,
-      37,    36,    32,    33,     0,    35,    34,     0,     0,    89,
-       0,    56,    57,    53,    55,    54,    63,    51,    50,    68,
-      70,    66,    69,    65,    86,    87,    85,    76,    78,    74,
-      77,    73,    97,   103,   105,   106,   102,   101,    26,    82,
-       0,    98,     0,    98,    98,    98,     0,     0,     0,    83,
-      60,    98,     0,    98,     0,     0,     0,    38,    90,     0,
-       0,    98,    46,    43,    25,     0,    59,     0,    88,    99,
-      39,    40,    41,     0,     0,    45,    58,    61,    42,    47
+       6,     0,    99,     0,     3,     0,     6,     6,    94,    95,
+       0,     1,     0,     0,     0,     0,   112,     0,     0,     0,
+       0,     0,     0,    14,    18,    15,    16,    20,    17,    19,
+       0,    21,     0,     7,    33,    24,    33,    25,    54,    64,
+       8,    69,    22,    87,    78,     9,    26,    87,    23,    10,
+       0,   100,     2,    73,    13,     0,    96,     0,   113,     0,
+      97,     0,     0,     0,   110,   111,     0,     0,     0,   103,
+      98,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    74,    82,    50,    83,    29,    31,     0,   107,     0,
+       0,    66,     0,     0,    11,    12,     0,     0,     0,     0,
+      92,     0,     0,     0,    46,     0,    39,    38,    34,    35,
+       0,    37,    36,     0,     0,    92,     0,    58,    59,    55,
+      57,    56,    65,    53,    52,    70,    72,    68,    71,    67,
+      89,    90,    88,    79,    81,    77,    80,    76,   106,   108,
+     109,   105,   104,    28,    85,     0,   101,     0,   101,   101,
+     101,     0,     0,     0,    86,    62,   101,     0,   101,     0,
+       0,     0,    40,    93,     0,     0,   101,    48,    45,    27,
+       0,    61,     0,    91,   102,    41,    42,    43,     0,     0,
+      47,    60,    63,    44,    49
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     2,    25,    26,   101,    27,    28,    29,    30,
-      65,   102,   103,   147,   175,    31,    32,   117,    33,    67,
-     113,    68,    34,   121,    35,    69,    36,    37,   129,    38,
-      71,    39,    40,    41,   104,   105,    70,   106,   142,   143,
-      42,    74,   156,    60,    61,    51
+      -1,     3,     4,     5,    32,    33,   107,    34,    35,    36,
+      37,    73,   108,   109,   152,   180,    38,    39,   123,    40,
+      75,   119,    76,    41,   127,    42,    77,     6,    43,    44,
+     135,    45,    79,    46,    47,    48,   110,   111,    78,   112,
+     147,   148,    49,     7,   161,    68,    69,    59
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -80
+#define YYPACT_NINF -89
 static const yytype_int16 yypact[] =
 {
-     -80,     2,   132,   -80,   -13,    -1,    -1,    -2,    -1,     9,
-      33,    -1,    27,    40,    -3,    38,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,    71,   -80,    77,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,    57,    61,   -80,    63,
-     -80,    76,   -80,    87,   101,   133,   -80,   -80,    -3,    -3,
-     195,    -6,   -80,   136,   149,    39,   104,    65,   150,     5,
-     194,     5,   167,   -80,   176,   -80,   -80,   -80,   -80,   -80,
-     -80,    68,   -80,    -3,    -3,   176,    72,    72,   -80,   -80,
-     177,   187,    78,    -1,    -1,    -3,   196,    72,   -80,   222,
-     -80,   -80,   -80,   -80,   221,   -80,   -80,   205,    -1,    -1,
-     211,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,
-     -80,   -80,   -80,   -80,   206,   -80,   -80,   -80,   -80,   -80,
-      -3,   223,   209,   223,   197,   223,    72,     7,   210,   -80,
-     -80,   223,   212,   223,   201,    -3,   213,   -80,   -80,   214,
-     215,   223,   208,   -80,   -80,   216,   -80,   217,   -80,   113,
-     -80,   -80,   -80,   218,    -1,   -80,   -80,   -80,   -80,   -80
+       3,     4,   -89,    20,   -89,   100,   -89,     7,   -89,   -89,
+      -8,   -89,    17,     4,    28,     4,    37,    36,     4,    68,
+      87,   -18,    69,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     128,   -89,   138,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     127,   -89,   -89,   110,   -89,   126,   -89,   136,   -89,   137,
+     -89,   147,   150,   152,   -89,   -89,   -18,   -18,   171,   -14,
+     -89,   153,   157,    34,    67,   180,   233,   220,   207,   220,
+     154,   -89,   -89,   -89,   -89,   -89,   -89,     0,   -89,   -18,
+     -18,   110,    44,    44,   -89,   -89,   163,   174,   182,     4,
+       4,   -18,   194,    44,   -89,   219,   -89,   -89,   -89,   -89,
+     223,   -89,   -89,   203,     4,     4,   215,   -89,   -89,   -89,
+     -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   213,
+     -89,   -89,   -89,   -89,   -89,   -18,   232,   227,   232,    -5,
+     232,    44,    35,   234,   -89,   -89,   232,   235,   232,   224,
+     -18,   236,   -89,   -89,   237,   238,   232,   216,   -89,   -89,
+     240,   -89,   241,   -89,    71,   -89,   -89,   -89,   242,     4,
+     -89,   -89,   -89,   -89,   -89
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -80,   -80,   -80,   -80,   122,   -34,   -80,   -80,   -80,   -80,
-     220,   -80,   -80,   -80,   -80,   -80,   -80,   -80,    59,   -80,
-     -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   -80,   125,
-     -80,   -80,   -80,   -80,   -80,   183,   219,    22,   142,    -5,
-     147,   192,    69,   -54,   -79,   -80
+     -89,   -89,   255,   267,   -89,    47,   -57,   -89,   -89,   -89,
+     -89,   239,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   130,
+     -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
+     -89,   181,   -89,   -89,   -89,   -89,   -89,   199,   229,    16,
+     162,    -1,    74,    -7,   103,   -65,   -88,   -89
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -82
+#define YYTABLE_NINF -85
 static const yytype_int16 yytable[] =
 {
-      46,    47,     3,    49,    81,    82,    53,   136,   137,     6,
-       7,     8,     9,    10,    11,    12,    13,    43,   146,    14,
-      15,    86,    56,    57,    44,    45,    58,    87,    48,   134,
-     135,    59,   162,   112,    50,    24,   125,   163,   125,   -28,
-      90,   144,   -28,   -28,   -28,   -28,   -28,   -28,   -28,   -28,
-     -28,    91,    54,   -28,   -28,    92,   -28,    93,    94,    95,
-      96,    97,    98,    52,    99,    55,    90,   161,    62,   100,
-     -49,   -49,    63,   -49,   -49,   -49,   -49,    91,    64,   -49,
-     -49,    92,   107,   108,   109,   110,   154,    73,   141,   115,
-      99,    75,   126,    76,   126,   111,   133,    56,    57,    83,
-      84,   169,   140,   151,   -30,    90,    77,   -30,   -30,   -30,
-     -30,   -30,   -30,   -30,   -30,   -30,    91,    78,   -30,   -30,
-      92,   -30,    93,    94,    95,    96,    97,    98,   120,    99,
-     128,    79,    -2,     4,   100,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    83,    84,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     7,     8,    23,    10,    11,
-      12,    13,    24,    80,    14,    15,    88,   -81,    90,   179,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,    89,
-      24,   -81,   -81,    92,   -81,   -81,   -81,   -81,   -81,   -81,
-     116,   119,    99,   127,   122,    90,   130,   124,   -72,   -72,
-     -72,   -72,   -72,   -72,   -72,   -72,   132,   138,   -72,   -72,
-      92,   155,   158,   159,   160,   118,   123,   139,   131,    99,
-     165,   145,   167,   148,   124,    73,    83,    84,    83,    84,
-     173,   168,    83,    84,   149,   150,   153,   155,    84,   157,
-     164,   174,   166,   170,   171,   172,   176,   177,   178,    66,
-     114,   152,    85,     0,     0,     0,     0,     0,     0,    72
+      10,    87,    88,    53,   141,   142,     1,    64,    65,   160,
+       1,    66,    55,    92,    57,   151,    67,    61,   118,    93,
+      11,   131,     2,   131,   139,   140,    89,    90,   138,     8,
+       9,    89,    90,     2,   -30,    96,   149,    51,   -30,   -30,
+     -30,   -30,   -30,   -30,   -30,   -30,    97,    54,   -30,   -30,
+      98,   -30,    99,   100,   101,   102,   103,   104,    56,   105,
+     167,    91,    58,   166,   106,   168,    60,   -32,    96,    64,
+      65,   -32,   -32,   -32,   -32,   -32,   -32,   -32,   -32,    97,
+     159,   -32,   -32,    98,   -32,    99,   100,   101,   102,   103,
+     104,   121,   105,    62,   132,   174,   132,   106,   146,    70,
+      -5,    12,    89,    90,    13,    14,    15,    16,    17,    18,
+      19,    20,    63,   156,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,   122,   125,    30,   133,    -4,    12,    71,
+      31,    13,    14,    15,    16,    17,    18,    19,    20,    72,
+      51,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+     124,   129,    30,   137,   -84,    96,    81,    31,   -84,   -84,
+     -84,   -84,   -84,   -84,   -84,   -84,    82,    83,   -84,   -84,
+      98,   -84,   -84,   -84,   -84,   -84,   -84,    84,   184,   105,
+      85,    96,    86,    94,   130,   -51,   -51,    95,   -51,   -51,
+     -51,   -51,    97,   143,   -51,   -51,    98,   113,   114,   115,
+     116,     2,    89,    90,   144,   105,   145,   126,    96,   134,
+     117,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   -75,   150,
+     153,   -75,   -75,    98,    13,    14,    15,    16,    17,    18,
+      19,    20,   105,   155,    21,    22,   154,   130,    14,    15,
+     158,    17,    18,    19,    20,    90,   160,    21,    22,   179,
+      31,   163,   164,   165,   173,    89,    90,   162,   128,   170,
+     136,   172,    52,    31,   169,   171,   175,   176,   177,   178,
+     181,   182,   183,    50,   120,    74,    80,   157
 };
 
-static const yytype_int16 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
-       5,     6,     0,     8,    58,    59,    11,    86,    87,     4,
-       5,     6,     7,     8,     9,    10,    11,    30,    97,    14,
-      15,    27,    25,    26,    25,    26,    29,    33,    30,    83,
-      84,    34,    25,    67,    25,    30,    70,    30,    72,     0,
-       1,    95,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    25,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    30,    25,    25,     1,   146,    30,    30,
-       5,     6,     1,     8,     9,    10,    11,    12,     1,    14,
-      15,    16,    17,    18,    19,    20,   140,    30,    93,    67,
-      25,    30,    70,    30,    72,    30,    28,    25,    26,    31,
-      32,   155,    24,   108,     0,     1,    30,     3,     4,     5,
+       1,    66,    67,    10,    92,    93,     3,    25,    26,    14,
+       3,    29,    13,    27,    15,   103,    34,    18,    75,    33,
+       0,    78,    30,    80,    89,    90,    31,    32,    28,    25,
+      26,    31,    32,    30,     0,     1,   101,    30,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    30,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    69,    25,
-      71,    30,     0,     1,    30,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    31,    32,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     5,     6,    25,     8,     9,
-      10,    11,    30,    30,    14,    15,    30,     0,     1,   174,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    30,
+      16,    17,    18,    19,    20,    21,    22,    23,    30,    25,
+      25,    68,    25,   151,    30,    30,    30,     0,     1,    25,
+      26,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+     145,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    75,    25,    25,    78,   160,    80,    30,    99,    30,
+       0,     1,    31,    32,     4,     5,     6,     7,     8,     9,
+      10,    11,    25,   114,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    76,    77,    25,    79,     0,     1,     1,
+      30,     4,     5,     6,     7,     8,     9,    10,    11,     1,
       30,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      68,    69,    25,    71,    69,     1,    71,    30,     4,     5,
+      76,    77,    25,    79,     0,     1,    30,    30,     4,     5,
        6,     7,     8,     9,    10,    11,    30,    30,    14,    15,
-      16,    14,   143,   144,   145,    68,    69,    30,    71,    25,
-     151,    25,   153,     1,    30,    30,    31,    32,    31,    32,
-     161,    30,    31,    32,    13,    30,    25,    14,    32,    30,
-      30,    33,    30,    30,    30,    30,    30,    30,    30,    29,
-      67,   109,    60,    -1,    -1,    -1,    -1,    -1,    -1,    40
+      16,    17,    18,    19,    20,    21,    22,    30,   179,    25,
+      30,     1,    30,    30,    30,     5,     6,    30,     8,     9,
+      10,    11,    12,    30,    14,    15,    16,    17,    18,    19,
+      20,    30,    31,    32,    30,    25,    24,    77,     1,    79,
+      30,     4,     5,     6,     7,     8,     9,    10,    11,    25,
+       1,    14,    15,    16,     4,     5,     6,     7,     8,     9,
+      10,    11,    25,    30,    14,    15,    13,    30,     5,     6,
+      25,     8,     9,    10,    11,    32,    14,    14,    15,    33,
+      30,   148,   149,   150,    30,    31,    32,    30,    77,   156,
+      79,   158,     7,    30,    30,    30,    30,    30,    30,   166,
+      30,    30,    30,     6,    75,    36,    47,   115
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    36,    37,     0,     1,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    25,    30,    38,    39,    41,    42,    43,
-      44,    50,    51,    53,    57,    59,    61,    62,    64,    66,
-      67,    68,    75,    30,    25,    26,    74,    74,    30,    74,
-      25,    80,    30,    74,    25,    25,    25,    26,    29,    34,
-      78,    79,    30,     1,     1,    45,    45,    54,    56,    60,
-      71,    65,    71,    30,    76,    30,    30,    30,    30,    30,
-      30,    78,    78,    31,    32,    76,    27,    33,    30,    30,
-       1,    12,    16,    18,    19,    20,    21,    22,    23,    25,
-      30,    40,    46,    47,    69,    70,    72,    17,    18,    19,
-      20,    30,    40,    55,    70,    72,    39,    52,    75,    39,
-      53,    58,    64,    75,    30,    40,    72,    39,    53,    63,
-      64,    75,    30,    28,    78,    78,    79,    79,    30,    30,
-      24,    74,    73,    74,    78,    25,    79,    48,     1,    13,
-      30,    74,    73,    25,    78,    14,    77,    30,    77,    77,
-      77,    79,    25,    30,    30,    77,    30,    77,    30,    78,
-      30,    30,    30,    77,    33,    49,    30,    30,    30,    74
+       0,     3,    30,    36,    37,    38,    62,    78,    25,    26,
+      76,     0,     1,     4,     5,     6,     7,     8,     9,    10,
+      11,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      25,    30,    39,    40,    42,    43,    44,    45,    51,    52,
+      54,    58,    60,    63,    64,    66,    68,    69,    70,    77,
+      38,    30,    37,    78,    30,    76,    30,    76,    25,    82,
+      30,    76,    25,    25,    25,    26,    29,    34,    80,    81,
+      30,     1,     1,    46,    46,    55,    57,    61,    73,    67,
+      73,    30,    30,    30,    30,    30,    30,    80,    80,    31,
+      32,    78,    27,    33,    30,    30,     1,    12,    16,    18,
+      19,    20,    21,    22,    23,    25,    30,    41,    47,    48,
+      71,    72,    74,    17,    18,    19,    20,    30,    41,    56,
+      72,    74,    40,    53,    77,    40,    54,    59,    66,    77,
+      30,    41,    74,    40,    54,    65,    66,    77,    28,    80,
+      80,    81,    81,    30,    30,    24,    76,    75,    76,    80,
+      25,    81,    49,     1,    13,    30,    76,    75,    25,    80,
+      14,    79,    30,    79,    79,    79,    81,    25,    30,    30,
+      79,    30,    79,    30,    80,    30,    30,    30,    79,    33,
+      50,    30,    30,    30,    76
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1284,7 +1292,7 @@ yydestruct (yymsg, yytype, yyvaluep)
 
   switch (yytype)
     {
-      case 51: /* "choice_entry" */
+      case 52: /* "choice_entry" */
 
        {
        fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -1294,7 +1302,7 @@ yydestruct (yymsg, yytype, yyvaluep)
 };
 
        break;
-      case 57: /* "if_entry" */
+      case 58: /* "if_entry" */
 
        {
        fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -1304,7 +1312,7 @@ yydestruct (yymsg, yytype, yyvaluep)
 };
 
        break;
-      case 62: /* "menu_entry" */
+      case 64: /* "menu_entry" */
 
        {
        fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -1614,39 +1622,39 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 8:
+        case 10:
 
     { zconf_error("unexpected end statement"); ;}
     break;
 
-  case 9:
+  case 11:
 
     { zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); ;}
     break;
 
-  case 10:
+  case 12:
 
     {
        zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
 ;}
     break;
 
-  case 11:
+  case 13:
 
     { zconf_error("invalid statement"); ;}
     break;
 
-  case 25:
+  case 27:
 
     { zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); ;}
     break;
 
-  case 26:
+  case 28:
 
     { zconf_error("invalid option"); ;}
     break;
 
-  case 27:
+  case 29:
 
     {
        struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
@@ -1656,7 +1664,7 @@ yyreduce:
 ;}
     break;
 
-  case 28:
+  case 30:
 
     {
        menu_end_entry();
@@ -1664,7 +1672,7 @@ yyreduce:
 ;}
     break;
 
-  case 29:
+  case 31:
 
     {
        struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
@@ -1674,7 +1682,7 @@ yyreduce:
 ;}
     break;
 
-  case 30:
+  case 32:
 
     {
        if (current_entry->prompt)
@@ -1686,7 +1694,7 @@ yyreduce:
 ;}
     break;
 
-  case 38:
+  case 40:
 
     {
        menu_set_type((yyvsp[(1) - (3)].id)->stype);
@@ -1696,7 +1704,7 @@ yyreduce:
 ;}
     break;
 
-  case 39:
+  case 41:
 
     {
        menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
@@ -1704,7 +1712,7 @@ yyreduce:
 ;}
     break;
 
-  case 40:
+  case 42:
 
     {
        menu_add_expr(P_DEFAULT, (yyvsp[(2) - (4)].expr), (yyvsp[(3) - (4)].expr));
@@ -1716,7 +1724,7 @@ yyreduce:
 ;}
     break;
 
-  case 41:
+  case 43:
 
     {
        menu_add_symbol(P_SELECT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
@@ -1724,7 +1732,7 @@ yyreduce:
 ;}
     break;
 
-  case 42:
+  case 44:
 
     {
        menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[(2) - (5)].symbol), (yyvsp[(3) - (5)].symbol)), (yyvsp[(4) - (5)].expr));
@@ -1732,7 +1740,7 @@ yyreduce:
 ;}
     break;
 
-  case 45:
+  case 47:
 
     {
        struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
@@ -1744,17 +1752,17 @@ yyreduce:
 ;}
     break;
 
-  case 46:
+  case 48:
 
     { (yyval.string) = NULL; ;}
     break;
 
-  case 47:
+  case 49:
 
     { (yyval.string) = (yyvsp[(2) - (2)].string); ;}
     break;
 
-  case 48:
+  case 50:
 
     {
        struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
@@ -1765,14 +1773,14 @@ yyreduce:
 ;}
     break;
 
-  case 49:
+  case 51:
 
     {
        (yyval.menu) = menu_add_menu();
 ;}
     break;
 
-  case 50:
+  case 52:
 
     {
        if (zconf_endtoken((yyvsp[(1) - (1)].id), T_CHOICE, T_ENDCHOICE)) {
@@ -1782,7 +1790,7 @@ yyreduce:
 ;}
     break;
 
-  case 58:
+  case 60:
 
     {
        menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
@@ -1790,7 +1798,7 @@ yyreduce:
 ;}
     break;
 
-  case 59:
+  case 61:
 
     {
        if ((yyvsp[(1) - (3)].id)->stype == S_BOOLEAN || (yyvsp[(1) - (3)].id)->stype == S_TRISTATE) {
@@ -1803,7 +1811,7 @@ yyreduce:
 ;}
     break;
 
-  case 60:
+  case 62:
 
     {
        current_entry->sym->flags |= SYMBOL_OPTIONAL;
@@ -1811,7 +1819,7 @@ yyreduce:
 ;}
     break;
 
-  case 61:
+  case 63:
 
     {
        if ((yyvsp[(1) - (4)].id)->stype == S_UNKNOWN) {
@@ -1823,7 +1831,7 @@ yyreduce:
 ;}
     break;
 
-  case 64:
+  case 66:
 
     {
        printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
@@ -1833,7 +1841,7 @@ yyreduce:
 ;}
     break;
 
-  case 65:
+  case 67:
 
     {
        if (zconf_endtoken((yyvsp[(1) - (1)].id), T_IF, T_ENDIF)) {
@@ -1843,7 +1851,14 @@ yyreduce:
 ;}
     break;
 
-  case 71:
+  case 73:
+
+    {
+       menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
+;}
+    break;
+
+  case 74:
 
     {
        menu_add_entry(NULL);
@@ -1852,14 +1867,14 @@ yyreduce:
 ;}
     break;
 
-  case 72:
+  case 75:
 
     {
        (yyval.menu) = menu_add_menu();
 ;}
     break;
 
-  case 73:
+  case 76:
 
     {
        if (zconf_endtoken((yyvsp[(1) - (1)].id), T_MENU, T_ENDMENU)) {
@@ -1869,7 +1884,7 @@ yyreduce:
 ;}
     break;
 
-  case 79:
+  case 82:
 
     {
        printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
@@ -1877,7 +1892,7 @@ yyreduce:
 ;}
     break;
 
-  case 80:
+  case 83:
 
     {
        menu_add_entry(NULL);
@@ -1886,14 +1901,14 @@ yyreduce:
 ;}
     break;
 
-  case 81:
+  case 84:
 
     {
        menu_end_entry();
 ;}
     break;
 
-  case 82:
+  case 85:
 
     {
        printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
@@ -1901,14 +1916,14 @@ yyreduce:
 ;}
     break;
 
-  case 83:
+  case 86:
 
     {
        current_entry->help = (yyvsp[(2) - (2)].string);
 ;}
     break;
 
-  case 88:
+  case 91:
 
     {
        menu_add_dep((yyvsp[(3) - (4)].expr));
@@ -1916,84 +1931,84 @@ yyreduce:
 ;}
     break;
 
-  case 90:
+  case 93:
 
     {
        menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
 ;}
     break;
 
-  case 93:
+  case 96:
 
     { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
     break;
 
-  case 94:
+  case 97:
 
     { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
     break;
 
-  case 95:
+  case 98:
 
     { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
     break;
 
-  case 98:
+  case 101:
 
     { (yyval.expr) = NULL; ;}
     break;
 
-  case 99:
+  case 102:
 
     { (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
     break;
 
-  case 100:
+  case 103:
 
     { (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); ;}
     break;
 
-  case 101:
+  case 104:
 
     { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
     break;
 
-  case 102:
+  case 105:
 
     { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
     break;
 
-  case 103:
+  case 106:
 
     { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
     break;
 
-  case 104:
+  case 107:
 
     { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 105:
+  case 108:
 
     { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 106:
+  case 109:
 
     { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 107:
+  case 110:
 
     { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); ;}
     break;
 
-  case 108:
+  case 111:
 
     { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
     break;
 
-  case 109:
+  case 112:
 
     { (yyval.string) = NULL; ;}
     break;
@@ -2239,6 +2254,10 @@ void conf_parse(const char *name)
                prop = prop_alloc(P_DEFAULT, modules_sym);
                prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
        }
+
+       rootmenu.prompt->text = _(rootmenu.prompt->text);
+       rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
+
        menu_finalize(&rootmenu);
        for_all_symbols(i, sym) {
                if (sym_check_deps(sym))
index 956add165a45638f8d41b66008361d53dd75b721..04d57886cdab56b8fac210d9cb43894c9f6fbb20 100644 (file)
@@ -36,7 +36,7 @@ static struct menu *current_menu, *current_entry;
 #define YYERROR_VERBOSE
 #endif
 %}
-%expect 26
+%expect 28
 
 %union
 {
@@ -104,14 +104,15 @@ static struct menu *current_menu, *current_entry;
 %}
 
 %%
-input: stmt_list;
+input: nl start | start;
+
+start: mainmenu_stmt stmt_list | stmt_list;
 
 stmt_list:
          /* empty */
        | stmt_list common_stmt
        | stmt_list choice_stmt
        | stmt_list menu_stmt
-       | stmt_list T_MAINMENU prompt nl
        | stmt_list end                 { zconf_error("unexpected end statement"); }
        | stmt_list T_WORD error T_EOL  { zconf_error("unknown statement \"%s\"", $2); }
        | stmt_list option_name error T_EOL
@@ -342,6 +343,13 @@ if_block:
        | if_block choice_stmt
 ;
 
+/* mainmenu entry */
+
+mainmenu_stmt: T_MAINMENU prompt nl
+{
+       menu_add_prompt(P_MENU, $2, NULL);
+};
+
 /* menu entry */
 
 menu: T_MENU prompt T_EOL
@@ -494,6 +502,10 @@ void conf_parse(const char *name)
                prop = prop_alloc(P_DEFAULT, modules_sym);
                prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
        }
+
+       rootmenu.prompt->text = _(rootmenu.prompt->text);
+       rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
+
        menu_finalize(&rootmenu);
        for_all_symbols(i, sym) {
                if (sym_check_deps(sym))