login
Header Space

 
 

Re: [PATCH 1/2] kconfig: introduce K= support

Score:
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Sam Ravnborg <sam@...>
Cc: linux-kbuild <linux-kbuild@...>, LKML <linux-kernel@...>
Date: Monday, May 5, 2008 - 10:55 pm

Hi,

On Sun, 4 May 2008, Sam Ravnborg wrote:

Below is patch which adds a library function to set the default values in 
a much simpler way.
The behaviour is slightly different, now it's closer to generating a 
.config with all possible symbols set to some value and using that to 
generate the final config. It has the advantage of not being as dependend 
on the order of the symbols, e.g. with allmodconfig this sets a few more 
symbols to 'm'.


init/Kconfig has a DEFCONFIG_LIST which is intended to be used for this.


Even if it has only a single option, please keep using getopt().

bye, Roman


[PATCH] set all new symbols automatically

Add conf_set_all_new_symbols() which set all symbols (which don't have a 
value yet) to a specifed value.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>

---
 scripts/kconfig/confdata.c |   72 ++++++++++++++++++++++++++++++++++++++++++++-
 scripts/kconfig/lkc.h      |    9 +++++
 2 files changed, 80 insertions(+), 1 deletion(-)

Index: linux-2.6/scripts/kconfig/confdata.c
===================================================================
--- linux-2.6.orig/scripts/kconfig/confdata.c
+++ linux-2.6/scripts/kconfig/confdata.c
@@ -510,7 +510,7 @@ int conf_write(const char *name)
 			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, "CONFIG_%s=0x%s\n", sym->name, str);
 					break;
 				}
 			case S_INT:
@@ -812,3 +812,73 @@ void conf_set_changed_callback(void (*fn
 {
 	conf_changed_callback = fn;
 }
+
+
+void conf_set_all_new_symbols(enum conf_def_mode mode)
+{
+	struct symbol *sym, *csym;
+	struct property *prop;
+	struct expr *e;
+	int i, cnt, def;
+
+	for_all_symbols(i, sym) {
+		if (sym_has_value(sym))
+			continue;
+		switch (sym_get_type(sym)) {
+		case S_BOOLEAN:
+		case S_TRISTATE:
+			switch (mode) {
+			case def_yes:
+				sym->def[S_DEF_USER].tri = yes;
+				break;
+			case def_mod:
+				sym->def[S_DEF_USER].tri = mod;
+				break;
+			case def_no:
+				sym->def[S_DEF_USER].tri = no;
+				break;
+			case def_random:
+				sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
+				break;
+			default:
+				continue;
+			}
+			if (!sym_is_choice(sym) || mode != def_random)
+				sym->flags |= SYMBOL_DEF_USER;
+			break;
+		default:
+			break;
+		}
+
+	}
+
+	if (modules_sym)
+		sym_calc_value(modules_sym);
+
+	if (mode != def_random)
+		return;
+
+	for_all_symbols(i, csym) {
+		if (sym_has_value(csym) || !sym_is_choice(csym))
+			continue;
+
+		sym_calc_value(csym);
+		prop = sym_get_choice_prop(csym);
+		def = -1;
+		while (1) {
+			cnt = 0;
+			expr_list_for_each_sym(prop->expr, e, sym) {
+				if (sym->visible == no)
+					continue;
+				if (def == cnt++) {
+					csym->def[S_DEF_USER].val = sym;
+					break;
+				}
+			}
+			if (def >= 0 || cnt < 2)
+				break;
+			def = (rand() % cnt) + 1;
+		}
+		csym->flags |= SYMBOL_DEF_USER;
+	}
+}
Index: linux-2.6/scripts/kconfig/lkc.h
===================================================================
--- linux-2.6.orig/scripts/kconfig/lkc.h
+++ linux-2.6/scripts/kconfig/lkc.h
@@ -42,6 +42,14 @@ extern "C" {
 #define TF_PARAM	0x0002
 #define TF_OPTION	0x0004
 
+enum conf_def_mode {
+	def_default,
+	def_yes,
+	def_mod,
+	def_no,
+	def_random
+};
+
 #define T_OPT_MODULES		1
 #define T_OPT_DEFCONFIG_LIST	2
 #define T_OPT_ENV		3
@@ -69,6 +77,7 @@ const char *conf_get_configname(void);
 char *conf_get_default_confname(void);
 void sym_set_change_count(int count);
 void sym_add_change_count(int count);
+void conf_set_all_new_symbols(enum conf_def_mode mode);
 
 /* kconfig_load.c */
 void kconfig_load(void);
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
kconfig frontend updates, Sam Ravnborg, (Fri May 2, 4:47 pm)
Re: kconfig frontend updates, Sam Ravnborg, (Sun May 4, 2:57 pm)
[PATCH 1/2] kconfig: introduce K= support, Sam Ravnborg, (Sun May 4, 2:59 pm)
Re: [PATCH 1/2] kconfig: introduce K= support, Roman Zippel, (Mon May 5, 10:55 pm)
Re: [PATCH 1/2] kconfig: introduce K= support, Sam Ravnborg, (Tue May 6, 12:34 am)
Re: kconfig frontend updates, Sam Ravnborg, (Fri May 2, 5:01 pm)
[PATCH] kconfig: conf is less chatty, , (Fri May 2, 4:49 pm)
[PATCH] kconfig: .gitignore aconf, , (Fri May 2, 4:49 pm)
speck-geostationary