summaryrefslogtreecommitdiff
path: root/package/config/patches
diff options
context:
space:
mode:
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>2010-08-21 15:59:10 +0200
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>2010-09-01 12:26:41 +0200
commit7c524dd0b683e1e8fac4e4084ac7678576bfbe07 (patch)
tree557327667ec2d0bf0bdb94894a4452c4ad8908c5 /package/config/patches
parent6f38119cbb2cf5dd9c64109ff331a3d3868460ff (diff)
Clean up our patches against kconfig
Our kconfig-to-buildroot2.patch hasn't been kept up to date with all the changes made into package/config, and a single patch wasn't very practical to maintain all our changes. Therefore, this commit adds a package/config/patches directory, which contains a Quilt series of patches that correspond to our modifications to the kconfig mechanism. The huge kconfig-to-buildroot2.patch has been split into 16 smaller patches. The purpose of some of the modifications has been clearly identified, while some others were not identified. The 16 patches together do match exactly the old kconfig-to-buildroot2.patch. We have been very careful in making sure that we wouldn't loose any of our modifications. The only modifications made are : * Instead of renaming the kernel Makefile to Makefile.kconfig and naming the Buildroot Makefile just 'Makefile', we instead keep the original package/config/Makefile from the kernel scripts/kconfig/Makefile and name the Buildroot Makefile package/config/Makefile.br. The main Buildroot Makefile is modified accordingly. * The documentation README.buildroot2 is updated to explain how to upgrade to a newer version of scripts/kconfig. * The kconfig-language.txt documentation is removed, as anybody can easily find it in the kernel sources so there's no need to duplicate it here. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
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