[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [PATCH] Kbuild: kconfig: Verbose version of --listnewconfig



On Tue, Nov 23, 2010 at 04:59:57AM +0000, Ben Hutchings wrote:
> If the KBUILD_VERBOSE environment variable is set to non-zero, show
> the default values of new symbols and not just their names.
> 
> Based on work by Bastian Blank <waldi@debian.org> and
> maximilian attems <max@stro.at>.
> 
> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
> ---
>  scripts/kconfig/conf.c     |   90 +++++++++++++++++++++++++++++++++++++++-----
>  scripts/kconfig/confdata.c |    1 +
>  scripts/kconfig/expr.h     |    2 +
>  3 files changed, 83 insertions(+), 10 deletions(-)
> 
> diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
> index 5459a38..6d37d5c 100644
> --- a/scripts/kconfig/conf.c
> +++ b/scripts/kconfig/conf.c
> @@ -363,7 +363,6 @@ static void conf(struct menu *menu)
>  		switch (prop->type) {
>  		case P_MENU:
>  			if ((input_mode == silentoldconfig ||
> -			     input_mode == listnewconfig ||
>  			     input_mode == oldnoconfig) &&
>  			    rootEntry != menu) {
>  				check_conf(menu);
> @@ -423,11 +422,7 @@ static void check_conf(struct menu *menu)
>  	if (sym && !sym_has_value(sym)) {
>  		if (sym_is_changable(sym) ||
>  		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
> -			if (input_mode == listnewconfig) {
> -				if (sym->name && !sym_is_choice_value(sym)) {
> -					printf("%s%s\n", CONFIG_, sym->name);
> -				}
> -			} else if (input_mode != oldnoconfig) {
> +			if (input_mode != oldnoconfig) {
>  				if (!conf_cnt++)
>  					printf(_("*\n* Restart config...\n*\n"));
>  				rootEntry = menu_get_parent_menu(menu);
> @@ -440,6 +435,78 @@ static void check_conf(struct menu *menu)
>  		check_conf(child);
>  }
>  
> +static void report_conf(struct menu *menu, bool verbose)
> +{
> +	struct symbol *sym;
> +	struct menu *child;
> +	int l;
> +	const char *str;
> +
> +	if (!menu_is_visible(menu))
> +		return;
> +
> +	if (verbose && menu == &rootmenu) {
> +		printf("\n#\n"
> +		       "# Changes:\n"
> +		       "#\n");
> +	}
> +
> +	sym = menu->sym;
> +	if (sym && (sym->flags & SYMBOL_NEW) &&
> +	    sym_is_changable(sym) && sym->name && !sym_is_choice_value(sym)) {
> +		if (verbose) {
> +			switch (sym->type) {
> +			case S_BOOLEAN:
> +			case S_TRISTATE:
> +				switch (sym_get_tristate_value(sym)) {
> +				case no:
> +					printf("# CONFIG_%s is not set\n", sym->name);
> +					break;
> [...]

Hi,

this is almost a 1:1 copy of the conf_write_symbol() function, so what
about reusing it like this? Otherwise the patch looks OK.

Michal


Subject: [PATCH] kconfig: Use conf_write_symbol() in listnewconfig

Signed-off-by: Michal Marek <mmarek@suse.cz>

diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 6d37d5c..41731c7 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -439,8 +439,6 @@ static void report_conf(struct menu *menu, bool verbose)
 {
 	struct symbol *sym;
 	struct menu *child;
-	int l;
-	const char *str;
 
 	if (!menu_is_visible(menu))
 		return;
@@ -455,49 +453,7 @@ static void report_conf(struct menu *menu, bool verbose)
 	if (sym && (sym->flags & SYMBOL_NEW) &&
 	    sym_is_changable(sym) && sym->name && !sym_is_choice_value(sym)) {
 		if (verbose) {
-			switch (sym->type) {
-			case S_BOOLEAN:
-			case S_TRISTATE:
-				switch (sym_get_tristate_value(sym)) {
-				case no:
-					printf("# CONFIG_%s is not set\n", sym->name);
-					break;
-				case mod:
-					printf("CONFIG_%s=m\n", sym->name);
-					break;
-				case yes:
-					printf("CONFIG_%s=y\n", sym->name);
-					break;
-				}
-				break;
-			case S_STRING:
-				str = sym_get_string_value(sym);
-				printf("CONFIG_%s=\"", sym->name);
-				while (1) {
-					l = strcspn(str, "\"\\");
-					if (l) {
-						fwrite(str, l, 1, stdout);
-						str += l;
-					}
-					if (!*str)
-						break;
-					printf("\\%c", *str++);
-				}
-				fputs("\"\n", stdout);
-				break;
-			case S_HEX:
-				str = sym_get_string_value(sym);
-				if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
-					printf("CONFIG_%s=%s\n", sym->name, str);
-					break;
-				}
-			case S_INT:
-				str = sym_get_string_value(sym);
-				printf("CONFIG_%s=%s\n", sym->name, str);
-				break;
-			default:
-				break;
-			}
+			conf_write_symbol(sym, sym->type, stdout, true);
 		} else {
 			printf("CONFIG_%s\n", sym->name);
 		}
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 44c9d62..1955b48 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -440,7 +440,7 @@ static void conf_write_string(bool headerfile, const char *name,
 	fputs("\"\n", out);
 }
 
-static void conf_write_symbol(struct symbol *sym, enum symbol_type type,
+void conf_write_symbol(struct symbol *sym, enum symbol_type type,
                               FILE *out, bool write_no)
 {
 	const char *str;
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index 17342fe..6da571b 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -7,6 +7,7 @@ P(conf_read_simple,int,(const char *name, int));
 P(conf_write_defconfig,int,(const char *name));
 P(conf_write,int,(const char *name));
 P(conf_write_autoconf,int,(void));
+P(conf_write_symbol, void,(struct symbol*, enum symbol_type, FILE*, bool));
 P(conf_get_changed,bool,(void));
 P(conf_set_changed_callback, void,(void (*fn)(void)));
 P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));


Reply to: