summaryrefslogtreecommitdiff
path: root/package/config/patches
diff options
context:
space:
mode:
Diffstat (limited to 'package/config/patches')
-rw-r--r--package/config/patches/01-kconfig-kernel-to-buildroot.patch299
-rw-r--r--package/config/patches/02-cpp-comments-to-c-comments.patch178
-rw-r--r--package/config/patches/03-change-config-option-prefix.patch176
-rw-r--r--package/config/patches/04-fedora-13-build-fix.patch17
-rw-r--r--package/config/patches/05-really-clean-everything.patch28
-rw-r--r--package/config/patches/06-br-build-system-integration.patch33
-rw-r--r--package/config/patches/07-minor-makefile-fixes.patch26
-rw-r--r--package/config/patches/08-make-write-deps.patch139
-rw-r--r--package/config/patches/09-implement-kconfig-probability.patch43
-rw-r--r--package/config/patches/10-br-build-system.patch80
-rw-r--r--package/config/patches/11-use-mktemp-for-lxdialog.patch17
-rw-r--r--package/config/patches/12-fix-glade-file-path.patch17
-rw-r--r--package/config/patches/13-use-conf-write-autoconf.patch53
-rw-r--r--package/config/patches/14-support-out-of-tree-config.patch253
-rw-r--r--package/config/patches/15-misc-qconf-changes.patch175
-rw-r--r--package/config/patches/16-non-identified-changes.patch47
-rw-r--r--package/config/patches/series16
17 files changed, 1597 insertions, 0 deletions
diff --git a/package/config/patches/01-kconfig-kernel-to-buildroot.patch b/package/config/patches/01-kconfig-kernel-to-buildroot.patch
new file mode 100644
index 000000000..5fed731a4
--- /dev/null
+++ b/package/config/patches/01-kconfig-kernel-to-buildroot.patch
@@ -0,0 +1,299 @@
+---
+ conf.c | 12 ++++++------
+ confdata.c | 12 ++++--------
+ gconf.c | 4 ++--
+ gconf.glade | 2 +-
+ mconf.c | 37 ++++++++++++++++++-------------------
+ qconf.cc | 3 +--
+ zconf.tab.c_shipped | 2 +-
+ zconf.y | 2 +-
+ 8 files changed, 34 insertions(+), 40 deletions(-)
+
+Index: config.clean/conf.c
+===================================================================
+--- config.clean.orig/conf.c
++++ config.clean/conf.c
+@@ -500,8 +500,8 @@
+ if (sync_kconfig) {
+ if (stat(".config", &tmpstat)) {
+ fprintf(stderr, _("***\n"
+- "*** You have not yet configured your kernel!\n"
+- "*** (missing kernel .config file)\n"
++ "*** You have not yet configured Buildroot!\n"
++ "*** (missing .config file)\n"
+ "***\n"
+ "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
+ "*** \"make menuconfig\" or \"make xconfig\").\n"
+@@ -556,7 +556,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;
+ }
+ }
+@@ -599,16 +599,16 @@
+ * 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 (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.clean/confdata.c
+===================================================================
+--- config.clean.orig/confdata.c
++++ config.clean/confdata.c
+@@ -436,7 +436,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");
+@@ -445,10 +445,8 @@
+
+ fprintf(out, _("#\n"
+ "# Automatically generated make config: don't edit\n"
+- "# Linux kernel version: %s\n"
+ "%s%s"
+ "#\n"),
+- sym_get_string_value(sym),
+ use_timestamp ? "# " : "",
+ use_timestamp ? ctime(&now) : "");
+
+@@ -692,22 +690,20 @@
+ 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"
+ "# %s"
+ "#\n",
+- sym_get_string_value(sym), ctime(&now));
++ ctime(&now));
+ 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.clean/gconf.c
+===================================================================
+--- config.clean.orig/gconf.c
++++ config.clean/gconf.c
+@@ -266,8 +266,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.clean/gconf.glade
+===================================================================
+--- config.clean.orig/gconf.glade
++++ config.clean/gconf.glade
+@@ -5,7 +5,7 @@
+
+ <widget class="GtkWindow" id="window1">
+ <property name="visible">True</property>
+- <property name="title" translatable="yes">Gtk Kernel Configurator</property>
++ <property name="title" translatable="yes">Gtk Buildroot Configurator</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+Index: config.clean/mconf.c
+===================================================================
+--- config.clean.orig/mconf.c
++++ config.clean/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"
+@@ -115,7 +114,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"
+@@ -148,7 +147,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"
+@@ -178,9 +177,9 @@
+ "Arrow keys navigate the menu. "
+ "<Enter> selects submenus --->. "
+ "Highlighted letters are hotkeys. "
+- "Pressing <Y> includes, <N> excludes, <M> modularizes features. "
++ "Pressing <Y> selectes a feature, while <N> will exclude a feature. "
+ "Press <Esc><Esc> to exit, <?> for Help, </> for Search. "
+- "Legend: [*] built-in [ ] excluded <M> module < > module capable"),
++ "Legend: [*] feature is selected [ ] feature is excluded"),
+ radiolist_instructions[] = N_(
+ "Use the arrow keys to navigate this window or "
+ "press the hotkey of the item you wish to select "
+@@ -200,18 +199,18 @@
+ "This feature depends on another which 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. "
+ "Accept the name shown to restore the configuration you "
+ "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"
+@@ -364,10 +363,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';
+@@ -894,7 +893,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
+@@ -906,20 +905,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.clean/qconf.cc
+===================================================================
+--- config.clean.orig/qconf.cc
++++ config.clean/qconf.cc
+@@ -1276,8 +1276,7 @@
+ char title[256];
+
+ QWidget *d = configApp->desktop();
+- snprintf(title, sizeof(title), _("Linux Kernel v%s Configuration"),
+- getenv("KERNELVERSION"));
++ snprintf(title, sizeof(title), _("Buildroot Configuration"));
+ setCaption(title);
+
+ width = configSettings->readNumEntry("/window width", d->width() - 64);
+Index: config.clean/zconf.tab.c_shipped
+===================================================================
+--- config.clean.orig/zconf.tab.c_shipped
++++ config.clean/zconf.tab.c_shipped
+@@ -2259,7 +2259,7 @@
+ modules_sym = sym_lookup(NULL, 0);
+ modules_sym->type = S_BOOLEAN;
+ modules_sym->flags |= SYMBOL_AUTO;
+- rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
++ rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
+
+ #if YYDEBUG
+ if (getenv("ZCONF_DEBUG"))
+Index: config.clean/zconf.y
+===================================================================
+--- config.clean.orig/zconf.y
++++ config.clean/zconf.y
+@@ -476,7 +476,7 @@
+ modules_sym = sym_lookup(NULL, 0);
+ modules_sym->type = S_BOOLEAN;
+ modules_sym->flags |= SYMBOL_AUTO;
+- rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
++ rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
+
+ #if YYDEBUG
+ if (getenv("ZCONF_DEBUG"))
diff --git a/package/config/patches/02-cpp-comments-to-c-comments.patch b/package/config/patches/02-cpp-comments-to-c-comments.patch
new file mode 100644
index 000000000..a801319e3
--- /dev/null
+++ b/package/config/patches/02-cpp-comments-to-c-comments.patch
@@ -0,0 +1,178 @@
+---
+ expr.c | 42 +++++++++++++++++++++---------------------
+ 1 file changed, 21 insertions(+), 21 deletions(-)
+
+Index: config.clean/expr.c
+===================================================================
+--- config.clean.orig/expr.c
++++ config.clean/expr.c
+@@ -331,7 +331,7 @@
+ e->right.expr = expr_trans_bool(e->right.expr);
+ break;
+ case E_UNEQUAL:
+- // FOO!=n -> FOO
++ /* FOO!=n -> FOO */
+ if (e->left.sym->type == S_TRISTATE) {
+ if (e->right.sym == &symbol_no) {
+ e->type = E_SYMBOL;
+@@ -380,19 +380,19 @@
+ if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
+ ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
+ (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
+- // (a='y') || (a='m') -> (a!='n')
++ /* (a='y') || (a='m') -> (a!='n') */
+ return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no);
+ }
+ if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
+ ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
+ (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) {
+- // (a='y') || (a='n') -> (a!='m')
++ /* (a='y') || (a='n') -> (a!='m') */
+ return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod);
+ }
+ if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
+ ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
+ (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) {
+- // (a='m') || (a='n') -> (a!='y')
++ /* (a='m') || (a='n') -> (a!='y') */
+ return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
+ }
+ }
+@@ -443,29 +443,29 @@
+
+ if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
+ (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
+- // (a) && (a='y') -> (a='y')
++ /* (a) && (a='y') -> (a='y') */
+ return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
+ if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) ||
+ (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no))
+- // (a) && (a!='n') -> (a)
++ /* (a) && (a!='n') -> (a) */
+ return expr_alloc_symbol(sym1);
+
+ if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) ||
+ (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod))
+- // (a) && (a!='m') -> (a='y')
++ /* (a) && (a!='m') -> (a='y') */
+ return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
+ if (sym1->type == S_TRISTATE) {
+ if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) {
+- // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
++ /* (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' */
+ sym2 = e1->right.sym;
+ if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
+ return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
+ : expr_alloc_symbol(&symbol_no);
+ }
+ if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) {
+- // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
++ /* (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' */
+ sym2 = e2->right.sym;
+ if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
+ return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
+@@ -474,19 +474,19 @@
+ if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
+ ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
+ (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
+- // (a!='y') && (a!='n') -> (a='m')
++ /* (a!='y') && (a!='n') -> (a='m') */
+ return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod);
+
+ if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
+ ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
+ (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes)))
+- // (a!='y') && (a!='m') -> (a='n')
++ /* (a!='y') && (a!='m') -> (a='n') */
+ return expr_alloc_comp(E_EQUAL, sym1, &symbol_no);
+
+ if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
+ ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
+ (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod)))
+- // (a!='m') && (a!='n') -> (a='m')
++ /* (a!='m') && (a!='n') -> (a='m') */
+ return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
+
+ if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
+@@ -579,7 +579,7 @@
+ switch (e1->type) {
+ case E_OR:
+ expr_eliminate_dups2(e1->type, &e1, &e1);
+- // (FOO || BAR) && (!FOO && !BAR) -> n
++ /* (FOO || BAR) && (!FOO && !BAR) -> n */
+ tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
+ tmp2 = expr_copy(e2);
+ tmp = expr_extract_eq_and(&tmp1, &tmp2);
+@@ -594,7 +594,7 @@
+ break;
+ case E_AND:
+ expr_eliminate_dups2(e1->type, &e1, &e1);
+- // (FOO && BAR) || (!FOO || !BAR) -> y
++ /* (FOO && BAR) || (!FOO || !BAR) -> y */
+ tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
+ tmp2 = expr_copy(e2);
+ tmp = expr_extract_eq_or(&tmp1, &tmp2);
+@@ -703,7 +703,7 @@
+ case E_NOT:
+ switch (e->left.expr->type) {
+ case E_NOT:
+- // !!a -> a
++ /* !!a -> a */
+ tmp = e->left.expr->left.expr;
+ free(e->left.expr);
+ free(e);
+@@ -712,14 +712,14 @@
+ break;
+ case E_EQUAL:
+ case E_UNEQUAL:
+- // !a='x' -> a!='x'
++ /* !a='x' -> a!='x' */
+ tmp = e->left.expr;
+ free(e);
+ e = tmp;
+ e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL;
+ break;
+ case E_OR:
+- // !(a || b) -> !a && !b
++ /* !(a || b) -> !a && !b */
+ tmp = e->left.expr;
+ e->type = E_AND;
+ e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
+@@ -728,7 +728,7 @@
+ e = expr_transform(e);
+ break;
+ case E_AND:
+- // !(a && b) -> !a || !b
++ /* !(a && b) -> !a || !b */
+ tmp = e->left.expr;
+ e->type = E_OR;
+ e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
+@@ -738,7 +738,7 @@
+ break;
+ case E_SYMBOL:
+ if (e->left.expr->left.sym == &symbol_yes) {
+- // !'y' -> 'n'
++ /* !'y' -> 'n' */
+ tmp = e->left.expr;
+ free(e);
+ e = tmp;
+@@ -747,7 +747,7 @@
+ break;
+ }
+ if (e->left.expr->left.sym == &symbol_mod) {
+- // !'m' -> 'm'
++ /* !'m' -> 'm' */
+ tmp = e->left.expr;
+ free(e);
+ e = tmp;
+@@ -756,7 +756,7 @@
+ break;
+ }
+ if (e->left.expr->left.sym == &symbol_no) {
+- // !'n' -> 'y'
++ /* !'n' -> 'y' */
+ tmp = e->left.expr;
+ free(e);
+ e = tmp;
diff --git a/package/config/patches/03-change-config-option-prefix.patch b/package/config/patches/03-change-config-option-prefix.patch
new file mode 100644
index 000000000..a786078c6
--- /dev/null
+++ b/package/config/patches/03-change-config-option-prefix.patch
@@ -0,0 +1,176 @@
+---
+ confdata.c | 57 +++++++++++++++++++++++++++------------------------------
+ 1 file changed, 27 insertions(+), 30 deletions(-)
+
+Index: config.clean/confdata.c
+===================================================================
+--- config.clean.orig/confdata.c
++++ config.clean/confdata.c
+@@ -11,6 +11,7 @@
+ #include <string.h>
+ #include <time.h>
+ #include <unistd.h>
++#include <libgen.h>
+
+ #define LKC_DIRECT_LINK
+ #include "lkc.h"
+@@ -21,7 +22,7 @@
+ static const char *conf_filename;
+ static int conf_lineno, conf_warnings, conf_unsaved;
+
+-const char conf_defname[] = "arch/$ARCH/defconfig";
++const char conf_defname[] = ".defconfig";
+
+ static void conf_warning(const char *fmt, ...)
+ {
+@@ -36,7 +37,7 @@
+
+ const char *conf_get_configname(void)
+ {
+- char *name = getenv("KCONFIG_CONFIG");
++ char *name = getenv("BUILDROOT_CONFIG");
+
+ return name ? name : ".config";
+ }
+@@ -212,22 +213,22 @@
+ sym = NULL;
+ switch (line[0]) {
+ case '#':
+- if (memcmp(line + 2, "CONFIG_", 7))
++ if (line[1]!=' ')
+ continue;
+- p = strchr(line + 9, ' ');
++ p = strchr(line + 2, ' ');
+ if (!p)
+ continue;
+ *p++ = 0;
+ if (strncmp(p, "is not set", 10))
+ continue;
+ if (def == S_DEF_USER) {
+- sym = sym_find(line + 9);
++ sym = sym_find(line + 2);
+ if (!sym) {
+ sym_add_change_count(1);
+ break;
+ }
+ } else {
+- sym = sym_lookup(line + 9, 0);
++ sym = sym_lookup(line + 2, 0);
+ if (sym->type == S_UNKNOWN)
+ sym->type = S_BOOLEAN;
+ }
+@@ -244,12 +245,8 @@
+ ;
+ }
+ 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':
++ p = strchr(line, '=');
+ if (!p)
+ continue;
+ *p++ = 0;
+@@ -260,13 +257,13 @@
+ *p2 = 0;
+ }
+ if (def == S_DEF_USER) {
+- sym = sym_find(line + 7);
++ sym = sym_find(line);
+ if (!sym) {
+ sym_add_change_count(1);
+ break;
+ }
+ } else {
+- sym = sym_lookup(line + 7, 0);
++ sym = sym_lookup(line, 0);
+ if (sym->type == S_UNKNOWN)
+ sym->type = S_OTHER;
+ }
+@@ -480,19 +477,19 @@
+ case S_TRISTATE:
+ switch (sym_get_tristate_value(sym)) {
+ case no:
+- fprintf(out, "# CONFIG_%s is not set\n", 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=m\n", sym->name);
+ break;
+ case yes:
+- fprintf(out, "CONFIG_%s=y\n", sym->name);
++ fprintf(out, "%s=y\n", sym->name);
+ break;
+ }
+ break;
+ case S_STRING:
+ str = sym_get_string_value(sym);
+- fprintf(out, "CONFIG_%s=\"", sym->name);
++ fprintf(out, "%s=\"", sym->name);
+ while (1) {
+ l = strcspn(str, "\"\\");
+ if (l) {
+@@ -508,12 +505,12 @@
+ case S_HEX:
+ str = sym_get_string_value(sym);
+ if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
+- fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
++ fprintf(out, "%s=%s\n", sym->name, str);
+ break;
+ }
+ case S_INT:
+ str = sym_get_string_value(sym);
+- fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
++ fprintf(out, "%s=%s\n", sym->name, str);
+ break;
+ }
+ }
+@@ -716,19 +713,19 @@
+ case no:
+ break;
+ case mod:
+- fprintf(out, "CONFIG_%s=m\n", sym->name);
+- fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
++ fprintf(out, "%s=m\n", sym->name);
++ fprintf(out_h, "#define %s_MODULE 1\n", sym->name);
+ break;
+ case yes:
+- fprintf(out, "CONFIG_%s=y\n", sym->name);
+- fprintf(out_h, "#define CONFIG_%s 1\n", sym->name);
++ fprintf(out, "%s=y\n", sym->name);
++ fprintf(out_h, "#define %s 1\n", sym->name);
+ break;
+ }
+ break;
+ case S_STRING:
+ str = sym_get_string_value(sym);
+- fprintf(out, "CONFIG_%s=\"", sym->name);
+- fprintf(out_h, "#define CONFIG_%s \"", sym->name);
++ fprintf(out, "%s=\"", sym->name);
++ fprintf(out_h, "#define %s \"", sym->name);
+ while (1) {
+ l = strcspn(str, "\"\\");
+ if (l) {
+@@ -748,14 +745,14 @@
+ case S_HEX:
+ str = sym_get_string_value(sym);
+ if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
+- fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
+- fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
++ fprintf(out, "%s=%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, "CONFIG_%s=%s\n", sym->name, str);
+- fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
++ fprintf(out, "%s=%s\n", sym->name, str);
++ fprintf(out_h, "#define %s %s\n", sym->name, str);
+ break;
+ default:
+ break;
diff --git a/package/config/patches/04-fedora-13-build-fix.patch b/package/config/patches/04-fedora-13-build-fix.patch
new file mode 100644
index 000000000..4fa72df6e
--- /dev/null
+++ b/package/config/patches/04-fedora-13-build-fix.patch
@@ -0,0 +1,17 @@
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: config.clean/Makefile
+===================================================================
+--- config.clean.orig/Makefile
++++ config.clean/Makefile
+@@ -165,7 +165,7 @@
+ HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
+ HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
+
+-HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
++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
+
diff --git a/package/config/patches/05-really-clean-everything.patch b/package/config/patches/05-really-clean-everything.patch
new file mode 100644
index 000000000..c206f5582
--- /dev/null
+++ b/package/config/patches/05-really-clean-everything.patch
@@ -0,0 +1,28 @@
+---
+ Makefile | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+Index: config.clean/Makefile
+===================================================================
+--- config.clean.orig/Makefile
++++ config.clean/Makefile
+@@ -142,10 +142,15 @@
+ gconf-objs := gconf.o kconfig_load.o zconf.tab.o
+ endif
+
+-clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
+- .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
+-clean-files += mconf qconf gconf
+-clean-files += config.pot linux.pot
++clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
++ .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
++clean-files += config.pot linux.pot
++clean-files += conf $(conf-objs)
++clean-files += mconf $(mconf-objs)
++clean-files += qconf qconf.o
++clean-files += gconf gconf.o
++clean-files += kconfig_load.o zconf.tab.o
++clean-files += $(kxgettext-objs)
+
+ # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
+ PHONY += $(obj)/dochecklxdialog
diff --git a/package/config/patches/06-br-build-system-integration.patch b/package/config/patches/06-br-build-system-integration.patch
new file mode 100644
index 000000000..1e340f3f8
--- /dev/null
+++ b/package/config/patches/06-br-build-system-integration.patch
@@ -0,0 +1,33 @@
+---
+ Makefile | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+Index: config.clean/Makefile
+===================================================================
+--- config.clean.orig/Makefile
++++ config.clean/Makefile
+@@ -124,14 +124,23 @@
+ ifeq ($(MAKECMDGOALS),menuconfig)
+ hostprogs-y += mconf
+ endif
++ifeq ($(findstring mconf,$(MAKECMDGOALS)),mconf)
++ hostprogs-y += mconf
++endif
+
+ ifeq ($(MAKECMDGOALS),xconfig)
+ qconf-target := 1
+ endif
++ifeq ($(findstring qconf,$(MAKECMDGOALS)),qconf)
++ qconf-target := 1
++endif
++
+ ifeq ($(MAKECMDGOALS),gconfig)
+ gconf-target := 1
+ endif
+-
++ifeq ($(findstring gconf,$(MAKECMDGOALS)),gconf)
++ gconf-target := 1
++endif
+
+ ifeq ($(qconf-target),1)
+ qconf-cxxobjs := qconf.o
diff --git a/package/config/patches/07-minor-makefile-fixes.patch b/package/config/patches/07-minor-makefile-fixes.patch
new file mode 100644
index 000000000..f0f68ee22
--- /dev/null
+++ b/package/config/patches/07-minor-makefile-fixes.patch
@@ -0,0 +1,26 @@
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: config.clean/Makefile
+===================================================================
+--- config.clean.orig/Makefile
++++ config.clean/Makefile
+@@ -83,7 +83,7 @@
+ @echo ' xconfig - Update current config utilising a QT based front-end'
+ @echo ' gconfig - Update current config utilising a GTK based front-end'
+ @echo ' oldconfig - Update current config utilising a provided .config as base'
+- @echo ' silentoldconfig - Same as oldconfig, but quietly'
++ @echo ' silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
+ @echo ' randconfig - New config with random answer to all options'
+ @echo ' defconfig - New config with default answer to all options'
+ @echo ' allmodconfig - New config selecting modules when possible'
+@@ -104,7 +104,7 @@
+ # ===========================================================================
+ # Shared Makefile for the various kconfig executables:
+ # conf: Used for defconfig, oldconfig and related targets
+-# mconf: Used for the mconfig target.
++# mconf: Used for the menuconfig target
+ # Utilizes the lxdialog package
+ # qconf: Used for the xconfig target
+ # Based on QT which needs to be installed to compile it
diff --git a/package/config/patches/08-make-write-deps.patch b/package/config/patches/08-make-write-deps.patch
new file mode 100644
index 000000000..b10413485
--- /dev/null
+++ b/package/config/patches/08-make-write-deps.patch
@@ -0,0 +1,139 @@
+---
+ util.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 116 insertions(+), 1 deletion(-)
+
+Index: config.clean/util.c
+===================================================================
+--- config.clean.orig/util.c
++++ config.clean/util.c
+@@ -26,6 +26,121 @@
+ return file;
+ }
+
++static char* br2_symbol_printer(const char * const in)
++{
++ ssize_t i, j, len = strlen(in);
++ char *ret;
++ if (len < 1)
++ return NULL;
++ ret = malloc(len);
++ if (!ret) {
++ printf("Out of memory!");
++ exit(1);
++ }
++ memset(ret, 0, len);
++ i = j = 0;
++ if (strncmp("BR2_", in, 4) == 0)
++ i += 4;
++ if (strncmp("PACKAGE_", in + i, 8) == 0)
++ i += 8;
++ else if (strncmp("TARGET_", in + i, 7) == 0)
++ i += 7;
++ while (i <= len)
++ ret[j++] = tolower(in[i++]);
++ return ret;
++}
++
++/* write dependencies of the infividual config-symbols */
++static int write_make_deps(const char *name)
++{
++ char *str;
++ char dir[PATH_MAX+1], buf[PATH_MAX+1], buf2[PATH_MAX+1];
++ struct menu *menu;
++ struct symbol *sym;
++ struct property *prop, *p;
++ unsigned done;
++ const char * const name_tmp = "..make.deps.tmp";
++ FILE *out;
++ if (!name)
++ name = ".auto.deps";
++
++ strcpy(dir, conf_get_configname());
++ str = strrchr(dir, '/');
++ if (str)
++ str[1] = 0;
++ else
++ dir[0] = 0;
++
++ sprintf(buf, "%s%s", dir, name_tmp);
++ out = fopen(buf, "w");
++ if (!out)
++ return 1;
++ fprintf(out, "# ATTENTION! This does not handle 'depends', just 'select'! \n"
++ "# See package/config/util.c write_make_deps()\n#\n");
++ menu = &rootmenu;//rootmenu.list;
++ while (menu) {
++ sym = menu->sym;
++ if (!sym) {
++ if (!menu_is_visible(menu))
++ goto next;
++ } else if (!(sym->flags & SYMBOL_CHOICE)) {
++ sym_calc_value(sym);
++ if (sym->type == S_BOOLEAN
++ && sym_get_tristate_value(sym) != no) {
++ done = 0;
++ for_all_prompts(sym, prop) {
++ struct expr *e;
++//printf("\nname=%s\n", sym->name);
++ for_all_properties(sym, p, P_SELECT) {
++ e = p->expr;
++ if (e && e->left.sym->name) {
++ if (!done) {
++ fprintf(out, "%s: $(BASE_TARGETS)", br2_symbol_printer(sym->name));
++ done = 1;
++ }
++//printf("SELECTS %s\n",e->left.sym->name);
++ fprintf(out, " %s",br2_symbol_printer(e->left.sym->name));
++ }
++ }
++ if (done)
++ fprintf(out, "\n");
++#if 0
++ e = sym->rev_dep.expr;
++ if (e && e->type == E_SYMBOL
++ && e->left.sym->name) {
++ fprintf(out, "%s: %s", br2_symbol_printer(e->left.sym->name),
++ br2_symbol_printer(sym->name));
++printf("%s is Selected BY: %s", sym->name, e->left.sym->name);
++ }
++#endif
++ }
++ }
++ }
++next:
++ if (menu->list) {
++ menu = menu->list;
++ continue;
++ }
++ if (menu->next)
++ menu = menu->next;
++ else while ((menu = menu->parent)) {
++ if (menu->next) {
++ menu = menu->next;
++ break;
++ }
++ }
++ }
++ fclose(out);
++ sprintf(buf2, "%s%s", dir, name);
++ rename(buf, buf2);
++ printf(_("#\n"
++ "# make dependencies written to %s\n"
++ "# ATTENTION buildroot devels!\n"
++ "# See top of this file before playing with this auto-preprequisites!\n"
++ "#\n"), name);
++ return 0;
++}
++
+ /* write a dependency file as used by kbuild to track dependencies */
+ int file_write_dep(const char *name)
+ {
+@@ -68,7 +183,7 @@
+ fprintf(out, "\n$(deps_config): ;\n");
+ fclose(out);
+ rename("..config.tmp", name);
+- return 0;
++ return write_make_deps(NULL);
+ }
+
+
diff --git a/package/config/patches/09-implement-kconfig-probability.patch b/package/config/patches/09-implement-kconfig-probability.patch
new file mode 100644
index 000000000..7adfc0b17
--- /dev/null
+++ b/package/config/patches/09-implement-kconfig-probability.patch
@@ -0,0 +1,43 @@
+---
+ confdata.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+Index: config.clean/confdata.c
+===================================================================
+--- config.clean.orig/confdata.c
++++ config.clean/confdata.c
+@@ -812,7 +812,16 @@
+ struct symbol *sym, *csym;
+ struct property *prop;
+ struct expr *e;
+- int i, cnt, def;
++ int i, cnt, def, prob = 50;
++
++ if (mode == def_random) {
++ char *endp, *env = getenv("KCONFIG_PROBABILITY");
++ if (env && *env) {
++ int tmp = (int)strtol(env, &endp, 10);
++ if (*endp == '\0' && tmp >= 0 && tmp <= 100)
++ prob = tmp;
++ }
++ }
+
+ for_all_symbols(i, sym) {
+ if (sym_has_value(sym))
+@@ -831,7 +840,15 @@
+ sym->def[S_DEF_USER].tri = no;
+ break;
+ case def_random:
+- sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
++ cnt = (rand() % 100) - (100 - prob);
++ if (cnt < 0)
++ sym->def[S_DEF_USER].tri = no;
++ else
++ if ((sym_get_type(sym) == S_TRISTATE)
++ && (cnt > prob/2))
++ sym->def[S_DEF_USER].tri = mod;
++ else
++ sym->def[S_DEF_USER].tri = yes;
+ break;
+ default:
+ continue;
diff --git a/package/config/patches/10-br-build-system.patch b/package/config/patches/10-br-build-system.patch
new file mode 100644
index 000000000..85125e519
--- /dev/null
+++ b/package/config/patches/10-br-build-system.patch
@@ -0,0 +1,80 @@
+---
+ Makefile.br | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ foo.h | 12 ++++++++++++
+ 2 files changed, 65 insertions(+)
+
+Index: config/Makefile.br
+===================================================================
+--- /dev/null
++++ config/Makefile.br
+@@ -0,0 +1,53 @@
++src := .
++top_srcdir=../../
++top_builddir=../../
++srctree := .
++obj ?= .
++
++include Makefile
++#HOSTCFLAGS+=-Dinline="" -include foo.h
++-include $(obj)/.depend
++$(obj)/.depend: $(wildcard *.h *.c)
++ $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) -MM *.c > $@ 2>/dev/null || :
++
++__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
++host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
++host-cmulti := $(foreach m,$(__hostprogs),\
++ $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
++host-cxxmulti := $(foreach m,$(__hostprogs),\
++ $(if $($(m)-cxxobjs),$(m),$(if $($(m)-objs),)))
++host-cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-objs))))
++host-cxxobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-cxxobjs))))
++
++HOST_EXTRACFLAGS += -I$(obj)
++
++$(host-csingle): %: %.c
++ $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $< $(HOST_LOADLIBES) -o $(obj)/$@
++
++$(host-cmulti): %: $(host-cobjs) $(host-cshlib)
++ $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs)) $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
++
++$(host-cxxmulti): %: $(host-cxxobjs) $(host-cobjs) $(host-cshlib)
++ $(HOSTCXX) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs) $($(@F)-cxxobjs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
++
++$(obj)/%.o: %.c
++ $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
++
++$(obj)/%.o: $(obj)/%.c
++ $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
++
++$(obj)/%.o: %.cc
++ $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$(@F)) -c $< -o $@
++
++$(obj)/%:: $(src)/%_shipped
++ $(Q)cat $< > $@
++
++clean:
++ $(Q)rm -f $(addprefix $(obj)/,$(clean-files))
++distclean: clean
++ $(Q)rm -f $(addprefix $(obj)/,$(lxdialog) $(conf-objs) $(mconf-objs) $(kxgettext-objs) \
++ $(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \
++ mconf .depend)
++
++FORCE:
++.PHONY: FORCE clean distclean
+Index: config/foo.h
+===================================================================
+--- /dev/null
++++ config/foo.h
+@@ -0,0 +1,12 @@
++#ifndef __KCONFIG_FOO_H
++#define __KCONFIG_FOO_H
++
++#ifndef __APPLE__
++#include <features.h>
++#endif
++#include <limits.h>
++
++#ifndef PATH_MAX
++#define PATH_MAX 1024
++#endif
++#endif /* __KCONFIG_FOO_H */
diff --git a/package/config/patches/11-use-mktemp-for-lxdialog.patch b/package/config/patches/11-use-mktemp-for-lxdialog.patch
new file mode 100644
index 000000000..16fd8bf18
--- /dev/null
+++ b/package/config/patches/11-use-mktemp-for-lxdialog.patch
@@ -0,0 +1,17 @@
+---
+ lxdialog/check-lxdialog.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: config.clean/lxdialog/check-lxdialog.sh
+===================================================================
+--- config.clean.orig/lxdialog/check-lxdialog.sh
++++ config.clean/lxdialog/check-lxdialog.sh
+@@ -31,7 +31,7 @@
+ }
+
+ # Temp file, try to clean up after us
+-tmp=.lxdialog.tmp
++tmp=$(mktemp)
+ trap "rm -f $tmp" 0 1 2 3 15
+
+ # Check if we can link to ncurses
diff --git a/package/config/patches/12-fix-glade-file-path.patch b/package/config/patches/12-fix-glade-file-path.patch
new file mode 100644
index 000000000..233809aaf
--- /dev/null
+++ b/package/config/patches/12-fix-glade-file-path.patch
@@ -0,0 +1,17 @@
+---
+ gconf.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: config.clean/gconf.c
+===================================================================
+--- config.clean.orig/gconf.c
++++ config.clean/gconf.c
+@@ -1576,7 +1576,7 @@
+ /* Determine GUI path */
+ env = getenv(SRCTREE);
+ if (env)
+- glade_file = g_strconcat(env, "/scripts/kconfig/gconf.glade", NULL);
++ glade_file = g_strconcat(env, "/package/config/gconf.glade", NULL);
+ else if (av[0][0] == '/')
+ glade_file = g_strconcat(av[0], ".glade", NULL);
+ else
diff --git a/package/config/patches/13-use-conf-write-autoconf.patch b/package/config/patches/13-use-conf-write-autoconf.patch
new file mode 100644
index 000000000..826852df4
--- /dev/null
+++ b/package/config/patches/13-use-conf-write-autoconf.patch
@@ -0,0 +1,53 @@
+---
+ conf.c | 4 ++++
+ mconf.c | 2 +-
+ qconf.cc | 2 ++
+ 3 files changed, 7 insertions(+), 1 deletion(-)
+
+Index: config.clean/conf.c
+===================================================================
+--- config.clean.orig/conf.c
++++ config.clean/conf.c
+@@ -611,6 +611,10 @@
+ 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 Buildroot configuration.\n\n"));
++ return 1;
++ }
+ }
+ return 0;
+ }
+Index: config.clean/mconf.c
+===================================================================
+--- config.clean.orig/mconf.c
++++ config.clean/mconf.c
+@@ -922,6 +922,6 @@
+ "\n\n"));
+ }
+
+- return 0;
++ return conf_write_autoconf();
+ }
+
+Index: config.clean/qconf.cc
+===================================================================
+--- config.clean.orig/qconf.cc
++++ config.clean/qconf.cc
+@@ -1608,6 +1608,7 @@
+ {
+ if (!conf_get_changed()) {
+ e->accept();
++ conf_write_autoconf();
+ return;
+ }
+ QMessageBox mb("qconf", _("Save configuration?"), QMessageBox::Warning,
+@@ -1618,6 +1619,7 @@
+ switch (mb.exec()) {
+ case QMessageBox::Yes:
+ conf_write(NULL);
++ conf_write_autoconf();
+ case QMessageBox::No:
+ e->accept();
+ break;
diff --git a/package/config/patches/14-support-out-of-tree-config.patch b/package/config/patches/14-support-out-of-tree-config.patch
new file mode 100644
index 000000000..4aae0c154
--- /dev/null
+++ b/package/config/patches/14-support-out-of-tree-config.patch
@@ -0,0 +1,253 @@
+---
+ conf.c | 8 +++---
+ confdata.c | 71 ++++++++++++++++++++++++++++++++++++++++++++-----------------
+ lkc.h | 1
+ util.c | 22 ++++++++++++++----
+ 4 files changed, 74 insertions(+), 28 deletions(-)
+
+Index: config.clean/conf.c
+===================================================================
+--- config.clean.orig/conf.c
++++ config.clean/conf.c
+@@ -496,16 +496,16 @@
+ }
+ name = av[optind];
+ conf_parse(name);
+- //zconfdump(stdout);
+ if (sync_kconfig) {
+- if (stat(".config", &tmpstat)) {
++ name = conf_get_configname();
++ if (stat(name, &tmpstat)) {
+ fprintf(stderr, _("***\n"
+ "*** You have not yet configured Buildroot!\n"
+- "*** (missing .config file)\n"
++ "*** (missing .config file \"%s\")\n"
+ "***\n"
+ "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
+ "*** \"make menuconfig\" or \"make xconfig\").\n"
+- "***\n"));
++ "***\n"), name);
+ exit(1);
+ }
+ }
+Index: config.clean/confdata.c
+===================================================================
+--- config.clean.orig/confdata.c
++++ config.clean/confdata.c
+@@ -42,6 +42,11 @@
+ return name ? name : ".config";
+ }
+
++const char *conf_get_autoconfig_name(void)
++{
++ return getenv("KCONFIG_AUTOCONFIG");
++}
++
+ static char *conf_expand_value(const char *in)
+ {
+ struct symbol *sym;
+@@ -399,6 +404,9 @@
+ int use_timestamp = 1;
+ char *env;
+
++ if (!name)
++ name = conf_get_configname();
++
+ dirname[0] = 0;
+ if (name && name[0]) {
+ struct stat st;
+@@ -550,19 +558,31 @@
+
+ int conf_split_config(void)
+ {
+- char *name, path[128];
++ const char *name;
++ char path[128];
++ char *opwd, *dir, *_name;
+ char *s, *d, c;
+ struct symbol *sym;
+ struct stat sb;
+ int res, i, fd;
+
+- name = getenv("KCONFIG_AUTOCONFIG");
+- if (!name)
+- name = "include/config/auto.conf";
++ name = conf_get_autoconfig_name();
+ conf_read_simple(name, S_DEF_AUTO);
+
+- if (chdir("include/config"))
++ opwd = malloc(256);
++ _name = strdup(name);
++ if (opwd == NULL || _name == NULL)
+ return 1;
++ opwd = getcwd(opwd, 256);
++ dir = dirname(_name);
++ if (dir == NULL) {
++ res = 1;
++ goto err;
++ }
++ if (chdir(dir)) {
++ res = 1;
++ goto err;
++ }
+
+ res = 0;
+ for_all_symbols(i, sym) {
+@@ -655,9 +675,11 @@
+ close(fd);
+ }
+ out:
+- if (chdir("../.."))
+- return 1;
+-
++ if (chdir(opwd))
++ res = 1;
++err:
++ free(opwd);
++ free(_name);
+ return res;
+ }
+
+@@ -665,23 +687,35 @@
+ {
+ struct symbol *sym;
+ const char *str;
+- char *name;
++ const char *name;
+ FILE *out, *out_h;
+ time_t now;
+ int i, l;
++ char dir[PATH_MAX+1], buf[PATH_MAX+1];
++ char *s;
++
++ strcpy(dir, conf_get_configname());
++ s = strrchr(dir, '/');
++ if (s)
++ s[1] = 0;
++ else
++ dir[0] = 0;
+
+ sym_clear_all_valid();
+
+- file_write_dep("include/config/auto.conf.cmd");
++ sprintf(buf, "%s.config.cmd", dir);
++ file_write_dep(buf);
+
+ if (conf_split_config())
+ return 1;
+
+- out = fopen(".tmpconfig", "w");
++ sprintf(buf, "%s.tmpconfig", dir);
++ out = fopen(buf, "w");
+ if (!out)
+ return 1;
+
+- out_h = fopen(".tmpconfig.h", "w");
++ sprintf(buf, "%s.tmpconfig.h", dir);
++ out_h = fopen(buf, "w");
+ if (!out_h) {
+ fclose(out);
+ return 1;
+@@ -698,8 +732,7 @@
+ fprintf(out_h, "/*\n"
+ " * Automatically generated C config: don't edit\n"
+ " * %s"
+- " */\n"
+- "#define AUTOCONF_INCLUDED\n",
++ " */\n",
+ ctime(&now));
+
+ for_all_symbols(i, sym) {
+@@ -764,16 +797,16 @@
+ name = getenv("KCONFIG_AUTOHEADER");
+ if (!name)
+ name = "include/linux/autoconf.h";
+- if (rename(".tmpconfig.h", name))
++ sprintf(buf, "%s.tmpconfig.h", dir);
++ if (rename(buf, name))
+ return 1;
+- name = getenv("KCONFIG_AUTOCONFIG");
+- if (!name)
+- name = "include/config/auto.conf";
++ name = conf_get_autoconfig_name();
+ /*
+ * This must be the last step, kbuild has a dependency on auto.conf
+ * and this marks the successful completion of the previous steps.
+ */
+- if (rename(".tmpconfig", name))
++ sprintf(buf, "%s.tmpconfig", dir);
++ if (rename(buf, name))
+ return 1;
+
+ return 0;
+Index: config.clean/lkc.h
+===================================================================
+--- config.clean.orig/lkc.h
++++ config.clean/lkc.h
+@@ -74,6 +74,7 @@
+
+ /* confdata.c */
+ const char *conf_get_configname(void);
++const char *conf_get_autoconfig_name(void);
+ char *conf_get_default_confname(void);
+ void sym_set_change_count(int count);
+ void sym_add_change_count(int count);
+Index: config.clean/util.c
+===================================================================
+--- config.clean.orig/util.c
++++ config.clean/util.c
+@@ -144,6 +144,8 @@
+ /* write a dependency file as used by kbuild to track dependencies */
+ int file_write_dep(const char *name)
+ {
++ char *str;
++ char buf[PATH_MAX+1], buf2[PATH_MAX+1], dir[PATH_MAX+1];
+ struct symbol *sym, *env_sym;
+ struct expr *e;
+ struct file *file;
+@@ -151,7 +153,16 @@
+
+ if (!name)
+ name = ".kconfig.d";
+- out = fopen("..config.tmp", "w");
++
++ strcpy(dir, conf_get_configname());
++ str = strrchr(dir, '/');
++ if (str)
++ str[1] = 0;
++ else
++ dir[0] = 0;
++
++ sprintf(buf, "%s..config.tmp", dir);
++ out = fopen(buf, "w");
+ if (!out)
+ return 1;
+ fprintf(out, "deps_config := \\\n");
+@@ -161,8 +172,8 @@
+ else
+ fprintf(out, "\t%s\n", file->name);
+ }
+- fprintf(out, "\ninclude/config/auto.conf: \\\n"
+- "\t$(deps_config)\n\n");
++ fprintf(out, "\n%s: \\\n"
++ "\t$(deps_config)\n\n", conf_get_autoconfig_name());
+
+ expr_list_for_each_sym(sym_env_list, e, sym) {
+ struct property *prop;
+@@ -176,13 +187,14 @@
+ if (!value)
+ value = "";
+ fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value);
+- fprintf(out, "include/config/auto.conf: FORCE\n");
++ fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name());
+ fprintf(out, "endif\n");
+ }
+
+ fprintf(out, "\n$(deps_config): ;\n");
+ fclose(out);
+- rename("..config.tmp", name);
++ sprintf(buf2, "%s%s", dir, name);
++ rename(buf, buf2);
+ return write_make_deps(NULL);
+ }
+
diff --git a/package/config/patches/15-misc-qconf-changes.patch b/package/config/patches/15-misc-qconf-changes.patch
new file mode 100644
index 000000000..683d518f1
--- /dev/null
+++ b/package/config/patches/15-misc-qconf-changes.patch
@@ -0,0 +1,175 @@
+---
+ qconf.cc | 48 +++++++++++++++++++++++++++---------------------
+ 1 file changed, 27 insertions(+), 21 deletions(-)
+
+Index: config.clean/qconf.cc
+===================================================================
+--- config.clean.orig/qconf.cc
++++ config.clean/qconf.cc
+@@ -5,6 +5,7 @@
+
+ #include <qapplication.h>
+ #include <qmainwindow.h>
++#include <qdesktopwidget.h>
+ #include <qtoolbar.h>
+ #include <qlayout.h>
+ #include <qvbox.h>
+@@ -297,10 +298,10 @@
+ void ConfigLineEdit::keyPressEvent(QKeyEvent* e)
+ {
+ switch (e->key()) {
+- case Key_Escape:
++ case Qt::Key_Escape:
+ break;
+- case Key_Return:
+- case Key_Enter:
++ case Qt::Key_Return:
++ case Qt::Key_Enter:
+ sym_set_string_value(item->menu->sym, text().latin1());
+ parent()->updateList(item);
+ break;
+@@ -639,7 +640,7 @@
+ struct menu *menu;
+ enum prop_type type;
+
+- if (ev->key() == Key_Escape && mode != fullMode && mode != listMode) {
++ if (ev->key() == Qt::Key_Escape && mode != fullMode && mode != listMode) {
+ emit parentSelected();
+ ev->accept();
+ return;
+@@ -652,8 +653,8 @@
+ item = (ConfigItem*)i;
+
+ switch (ev->key()) {
+- case Key_Return:
+- case Key_Enter:
++ case Qt::Key_Return:
++ case Qt::Key_Enter:
+ if (item->goParent) {
+ emit parentSelected();
+ break;
+@@ -667,16 +668,16 @@
+ emit menuSelected(menu);
+ break;
+ }
+- case Key_Space:
++ case Qt::Key_Space:
+ changeValue(item);
+ break;
+- case Key_N:
++ case Qt::Key_N:
+ setValue(item, no);
+ break;
+- case Key_M:
++ case Qt::Key_M:
+ setValue(item, mod);
+ break;
+- case Key_Y:
++ case Qt::Key_Y:
+ setValue(item, yes);
+ break;
+ default:
+@@ -920,7 +921,7 @@
+ }
+
+ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
+- : Parent(parent, name), menu(0), sym(0)
++ : Parent(parent, name), sym(0), menu(0)
+ {
+ if (name) {
+ configSettings->beginGroup(name);
+@@ -1199,7 +1200,7 @@
+ layout1->addLayout(layout2);
+
+ split = new QSplitter(this);
+- split->setOrientation(QSplitter::Vertical);
++ split->setOrientation(Qt::Vertical);
+ list = new ConfigView(split, name);
+ list->list->mode = listMode;
+ info = new ConfigInfoView(split, name);
+@@ -1275,7 +1276,7 @@
+ int x, y, width, height;
+ char title[256];
+
+- QWidget *d = configApp->desktop();
++ QDesktopWidget *d = configApp->desktop();
+ snprintf(title, sizeof(title), _("Buildroot Configuration"));
+ setCaption(title);
+
+@@ -1289,14 +1290,14 @@
+ move(x, y);
+
+ split1 = new QSplitter(this);
+- split1->setOrientation(QSplitter::Horizontal);
++ split1->setOrientation(Qt::Horizontal);
+ setCentralWidget(split1);
+
+ menuView = new ConfigView(split1, "menu");
+ menuList = menuView->list;
+
+ split2 = new QSplitter(split1);
+- split2->setOrientation(QSplitter::Vertical);
++ split2->setOrientation(Qt::Vertical);
+
+ // create config tree
+ configView = new ConfigView(split2, "config");
+@@ -1314,18 +1315,18 @@
+ backAction = new QAction("Back", QPixmap(xpm_back), _("Back"), 0, this);
+ connect(backAction, SIGNAL(activated()), SLOT(goBack()));
+ backAction->setEnabled(FALSE);
+- QAction *quitAction = new QAction("Quit", _("&Quit"), CTRL+Key_Q, this);
++ QAction *quitAction = new QAction("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
+ connect(quitAction, SIGNAL(activated()), SLOT(close()));
+- QAction *loadAction = new QAction("Load", QPixmap(xpm_load), _("&Load"), CTRL+Key_L, this);
++ QAction *loadAction = new QAction("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"), CTRL+Key_S, this);
++ saveAction = new QAction("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);
+ connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs()));
+- QAction *searchAction = new QAction("Find", _("&Find"), CTRL+Key_F, this);
++ QAction *searchAction = new QAction("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);
+ connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView()));
+@@ -1446,7 +1447,7 @@
+
+ void ConfigMainWindow::loadConfig(void)
+ {
+- QString s = QFileDialog::getOpenFileName(".config", NULL, this);
++ QString s = QFileDialog::getOpenFileName(conf_get_configname(), NULL, this);
+ if (s.isNull())
+ return;
+ if (conf_read(QFile::encodeName(s)))
+@@ -1462,7 +1463,7 @@
+
+ void ConfigMainWindow::saveConfigAs(void)
+ {
+- QString s = QFileDialog::getSaveFileName(".config", NULL, this);
++ QString s = QFileDialog::getSaveFileName(conf_get_configname(), NULL, this);
+ if (s.isNull())
+ return;
+ if (conf_write(QFile::encodeName(s)))
+@@ -1523,6 +1524,8 @@
+ case fullMode:
+ list = configList;
+ break;
++ default:
++ break;
+ }
+
+ if (list) {
+@@ -1674,6 +1677,9 @@
+ case fullMode :
+ entry = "full";
+ break;
++
++ default:
++ break;
+ }
+ configSettings->writeEntry("/listMode", entry);
+
diff --git a/package/config/patches/16-non-identified-changes.patch b/package/config/patches/16-non-identified-changes.patch
new file mode 100644
index 000000000..3a4bae5d9
--- /dev/null
+++ b/package/config/patches/16-non-identified-changes.patch
@@ -0,0 +1,47 @@
+---
+ lxdialog/checklist.c | 3 ++-
+ mconf.c | 10 +++++++++-
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+Index: config.clean/lxdialog/checklist.c
+===================================================================
+--- config.clean.orig/lxdialog/checklist.c
++++ config.clean/lxdialog/checklist.c
+@@ -41,7 +41,8 @@
+ wmove(win, choice, check_x);
+ wattrset(win, selected ? dlg.check_selected.atr
+ : dlg.check.atr);
+- wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
++ if (!item_is_tag(':'))
++ wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
+
+ wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
+ mvwaddch(win, choice, item_x, item_str()[0]);
+Index: config.clean/mconf.c
+===================================================================
+--- config.clean.orig/mconf.c
++++ config.clean/mconf.c
+@@ -731,7 +731,12 @@
+ for (child = menu->list; child; child = child->next) {
+ if (!menu_is_visible(child))
+ continue;
+- item_make("%s", _(menu_get_prompt(child)));
++ if (child->sym)
++ item_make("%s", _(menu_get_prompt(child)));
++ else {
++ item_make("*** %s ***", _(menu_get_prompt(child)));
++ item_set_tag(':');
++ }
+ item_set_data(child);
+ if (child->sym == active)
+ item_set_selected(1);
+@@ -747,6 +752,9 @@
+ case 0:
+ if (selected) {
+ child = item_data();
++ if (!child->sym)
++ break;
++
+ sym_set_tristate_value(child->sym, yes);
+ }
+ return;
diff --git a/package/config/patches/series b/package/config/patches/series
new file mode 100644
index 000000000..d5ab94c7f
--- /dev/null
+++ b/package/config/patches/series
@@ -0,0 +1,16 @@
+01-kconfig-kernel-to-buildroot.patch
+02-cpp-comments-to-c-comments.patch
+03-change-config-option-prefix.patch
+04-fedora-13-build-fix.patch
+05-really-clean-everything.patch
+06-br-build-system-integration.patch
+07-minor-makefile-fixes.patch
+08-make-write-deps.patch
+09-implement-kconfig-probability.patch
+10-br-build-system.patch
+11-use-mktemp-for-lxdialog.patch
+12-fix-glade-file-path.patch
+13-use-conf-write-autoconf.patch
+14-support-out-of-tree-config.patch
+15-misc-qconf-changes.patch
+16-non-identified-changes.patch