All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] kconfig: zconfdump() clean-up
@ 2011-05-16  4:06 Arnaud Lacombe
  2011-05-16  4:07 ` Arnaud Lacombe
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Arnaud Lacombe @ 2011-05-16  4:06 UTC (permalink / raw)
  To: linux-kbuild; +Cc: Michal Marek, Arnaud Lacombe

Hi Michal,

The following patch is a summarize of changes I made in zconfdump() last week
when debugging Yann's multiple choice issue. This might help debugging a bit,
espectially by exposing the tree depth.

Considering the following Kconfig:

config A
   bool "A"
if A
choice C
   bool "C"
config C1
   bool "C1"
config C2
   bool "C2"
endchoice
endif # A

config B
   bool "B"
   depends on ! A
if B
choice C
   bool "C"
config C1
   bool "C1"
config C2
   bool "C2"
endchoice
endif # A

It generates the following output, after menu_finalize():

config A
  boolean
  symbol 
  prompt "A"

        choice C
          boolean
          symbol 
          #choice 
          prompt "C" if A

                config C1
                  boolean
                  symbol 
                  prompt "C1" if C
                  #choice 

                config C2
                  boolean
                  symbol 
                  prompt "C2" if C
                  #choice 

        endchoice

        config B
          boolean
          symbol 
          prompt "B" if !A

                choice C
                  boolean
                  symbol 
                  #choice 
                  prompt "C" if B

                        config C1
                          boolean
                          symbol 
                          prompt "C1" if C

                        config C2
                          boolean
                          symbol 
                          prompt "C2" if C

                endchoice

instead of:

config A
  boolean
  unknown prop 9!
  prompt "A"

choice
  boolean
  unknown prop 9!
  #choice value
  prompt "C" if A

config C1
  boolean
  unknown prop 9!
  prompt "C1" if C
  #choice value

config C2
  boolean
  unknown prop 9!
  prompt "C2" if C
  #choice value

config B
  boolean
  unknown prop 9!
  prompt "B" if !A

choice
  boolean
  unknown prop 9!
  #choice value
  prompt "C" if B

config C1
  boolean
  unknown prop 9!
  prompt "C1" if C

config C2
  boolean
  unknown prop 9!
  prompt "C2" if C

endmenu

Broken down patches are available at:

https://github.com/lacombar/linux-2.6/tree/kconfig-zconfdump

Not for merge for now, even if it merges fine with your kbuild/kconfig's tip.

Regards,
 - Arnaud

---
 scripts/kconfig/zconf.y |  161 +++++++++++++++++++----------------------------
 1 files changed, 66 insertions(+), 95 deletions(-)

diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index 237ae2a..f18bc5a 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -612,129 +612,100 @@ static void print_quoted_string(FILE *out, const char *str)
 	putc('"', out);
 }
 
-static void print_symbol(FILE *out, struct menu *menu)
+static int indent;
+
+static void print_property(FILE *out, struct property *prop)
 {
-	struct symbol *sym = menu->sym;
-	struct property *prop;
+	const char *prop_string;
 
-	if (sym_is_choice(sym))
-		fprintf(out, "\nchoice\n");
-	else
-		fprintf(out, "\nconfig %s\n", sym->name);
-	switch (sym->type) {
-	case S_BOOLEAN:
-		fputs("  boolean\n", out);
-		break;
-	case S_TRISTATE:
-		fputs("  tristate\n", out);
+	prop_string = prop_get_type_name(prop->type);
+	if (prop_string == NULL)
+		return;
+
+	fprintf(out, "%*s  %s%s ", indent * 8, "",
+	    (prop->type == P_CHOICE) ? "#" : "",
+	    prop_string);
+
+	switch (prop->type) {
+	case P_PROMPT:
+		print_quoted_string(out, prop->text);
+		if (!expr_is_yes(prop->visible.expr)) {
+			fputs(" if ", out);
+			expr_fprint(prop->visible.expr, out);
+		}
 		break;
-	case S_STRING:
-		fputs("  string\n", out);
+	case P_DEFAULT:
+		expr_fprint(prop->expr, out);
+		if (!expr_is_yes(prop->visible.expr)) {
+			fputs(" if ", out);
+			expr_fprint(prop->visible.expr, out);
+		}
 		break;
-	case S_INT:
-		fputs("  integer\n", out);
+	case P_SELECT:
+	case P_RANGE:
+		expr_fprint(prop->expr, out);
 		break;
-	case S_HEX:
-		fputs("  hex\n", out);
+	case P_MENU:
+	case P_COMMENT:
+		print_quoted_string(out, prop->text);
 		break;
 	default:
-		fputs("  ???\n", out);
 		break;
 	}
+	fprintf(out, "\n");
+}
+
+static void print_symbol(FILE *out, struct menu *menu)
+{
+	struct symbol *sym = menu->sym;
+	struct property *prop;
+
+	fprintf(out, "%*s%s %s\n", indent * 8, "",
+	    (sym_is_choice(sym)) ? "choice" : "config",
+	    (sym->name) ? sym->name: "");
+	fprintf(out, "%*s  %s\n", indent * 8, "",
+	    sym_type_name(sym->type));
+
 	for (prop = sym->prop; prop; prop = prop->next) {
 		if (prop->menu != menu)
 			continue;
-		switch (prop->type) {
-		case P_PROMPT:
-			fputs("  prompt ", out);
-			print_quoted_string(out, prop->text);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_DEFAULT:
-			fputs( "  default ", out);
-			expr_fprint(prop->expr, out);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_CHOICE:
-			fputs("  #choice value\n", out);
-			break;
-		case P_SELECT:
-			fputs( "  select ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_RANGE:
-			fputs( "  range ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_MENU:
-			fputs( "  menu ", out);
-			print_quoted_string(out, prop->text);
-			fputc('\n', out);
-			break;
-		case P_SYMBOL:
-			break;
-		default:
-			fprintf(out, "  unknown prop %d!\n", prop->type);
-			break;
-		}
-	}
-	if (menu->help) {
-		int len = strlen(menu->help);
-		while (menu->help[--len] == '\n')
-			menu->help[len] = 0;
-		fprintf(out, "  help\n%s\n", menu->help);
+		print_property(out, prop);
 	}
+	fprintf(out, "\n");
 }
 
 void zconfdump(FILE *out)
 {
-	struct property *prop;
-	struct symbol *sym;
 	struct menu *menu;
 
 	menu = rootmenu.list;
 	while (menu) {
-		if ((sym = menu->sym))
+		if (menu->sym)
 			print_symbol(out, menu);
-		else if ((prop = menu->prompt)) {
-			switch (prop->type) {
-			case P_COMMENT:
-				fputs("\ncomment ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			case P_MENU:
-				fputs("\nmenu ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			default:
-				;
-			}
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs("  depends ", out);
-				expr_fprint(prop->visible.expr, out);
-				fputc('\n', out);
-			}
+
+		if (menu->help) {
+			int len = strlen(menu->help);
+			while (menu->help[--len] == '\n')
+				menu->help[len] = 0;
+			fprintf(out, "%*s  help\n%s\n", indent * 8, "",
+			    menu->help);
 		}
 
-		if (menu->list)
+		if (menu->list) {
+			indent++;
 			menu = menu->list;
+		}
 		else if (menu->next)
 			menu = menu->next;
 		else while ((menu = menu->parent)) {
-			if (menu->prompt && menu->prompt->type == P_MENU)
-				fputs("\nendmenu\n", out);
+			if (menu != &rootmenu)
+				indent--;
+			fprintf(out, "%*s", indent * 8, "");
+			if (menu->sym && sym_is_choice(menu->sym))
+				fprintf(out, "endchoice\n\n");
+			if (menu->prompt && menu->prompt->type == P_MENU &&
+			    menu != &rootmenu)
+				fprintf(out, "endmenu\n\n");
 			if (menu->next) {
 				menu = menu->next;
 				break;
-- 
1.7.3.4.574.g608b.dirty


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [RFC] kconfig: zconfdump() clean-up
  2011-05-16  4:06 [RFC] kconfig: zconfdump() clean-up Arnaud Lacombe
@ 2011-05-16  4:07 ` Arnaud Lacombe
  2011-05-31  1:24 ` Arnaud Lacombe
  2011-06-24 14:08 ` Michal Marek
  2 siblings, 0 replies; 5+ messages in thread
From: Arnaud Lacombe @ 2011-05-16  4:07 UTC (permalink / raw)
  To: linux-kbuild; +Cc: Michal Marek, Arnaud Lacombe

Hi,

On Mon, May 16, 2011 at 12:06 AM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> config A
>  boolean
>  symbol
actually, this "symbol" property should not appear in the dump.

 - Arnaud

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] kconfig: zconfdump() clean-up
  2011-05-16  4:06 [RFC] kconfig: zconfdump() clean-up Arnaud Lacombe
  2011-05-16  4:07 ` Arnaud Lacombe
@ 2011-05-31  1:24 ` Arnaud Lacombe
  2011-06-08  5:05   ` Arnaud Lacombe
  2011-06-24 14:08 ` Michal Marek
  2 siblings, 1 reply; 5+ messages in thread
From: Arnaud Lacombe @ 2011-05-31  1:24 UTC (permalink / raw)
  To: linux-kbuild; +Cc: Michal Marek, Arnaud Lacombe

Hi,

On Mon, May 16, 2011 at 12:06 AM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> Hi Michal,
>
> The following patch is a summarize of changes I made in zconfdump() last week
> when debugging Yann's multiple choice issue. This might help debugging a bit,
> espectially by exposing the tree depth.
>
> Considering the following Kconfig:
>
> config A
>   bool "A"
> if A
> choice C
>   bool "C"
> config C1
>   bool "C1"
> config C2
>   bool "C2"
> endchoice
> endif # A
>
> config B
>   bool "B"
>   depends on ! A
> if B
> choice C
>   bool "C"
> config C1
>   bool "C1"
> config C2
>   bool "C2"
> endchoice
> endif # A
>
> It generates the following output, after menu_finalize():
>
> config A
>  boolean
>  symbol
>  prompt "A"
>
>        choice C
>          boolean
>          symbol
>          #choice
>          prompt "C" if A
>
>                config C1
>                  boolean
>                  symbol
>                  prompt "C1" if C
>                  #choice
>
>                config C2
>                  boolean
>                  symbol
>                  prompt "C2" if C
>                  #choice
>
>        endchoice
>
>        config B
>          boolean
>          symbol
>          prompt "B" if !A
>
>                choice C
>                  boolean
>                  symbol
>                  #choice
>                  prompt "C" if B
>
>                        config C1
>                          boolean
>                          symbol
>                          prompt "C1" if C
>
>                        config C2
>                          boolean
>                          symbol
>                          prompt "C2" if C
>
>                endchoice
>
> instead of:
>
> config A
>  boolean
>  unknown prop 9!
>  prompt "A"
>
> choice
>  boolean
>  unknown prop 9!
>  #choice value
>  prompt "C" if A
>
> config C1
>  boolean
>  unknown prop 9!
>  prompt "C1" if C
>  #choice value
>
> config C2
>  boolean
>  unknown prop 9!
>  prompt "C2" if C
>  #choice value
>
> config B
>  boolean
>  unknown prop 9!
>  prompt "B" if !A
>
> choice
>  boolean
>  unknown prop 9!
>  #choice value
>  prompt "C" if B
>
> config C1
>  boolean
>  unknown prop 9!
>  prompt "C1" if C
>
> config C2
>  boolean
>  unknown prop 9!
>  prompt "C2" if C
>
> endmenu
>
> Broken down patches are available at:
>
> https://github.com/lacombar/linux-2.6/tree/kconfig-zconfdump
>
> Not for merge for now, even if it merges fine with your kbuild/kconfig's tip.
>
ping ?

 - Arnaud

> Regards,
>  - Arnaud
>
> ---
>  scripts/kconfig/zconf.y |  161 +++++++++++++++++++----------------------------
>  1 files changed, 66 insertions(+), 95 deletions(-)
>
> diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
> index 237ae2a..f18bc5a 100644
> --- a/scripts/kconfig/zconf.y
> +++ b/scripts/kconfig/zconf.y
> @@ -612,129 +612,100 @@ static void print_quoted_string(FILE *out, const char *str)
>        putc('"', out);
>  }
>
> -static void print_symbol(FILE *out, struct menu *menu)
> +static int indent;
> +
> +static void print_property(FILE *out, struct property *prop)
>  {
> -       struct symbol *sym = menu->sym;
> -       struct property *prop;
> +       const char *prop_string;
>
> -       if (sym_is_choice(sym))
> -               fprintf(out, "\nchoice\n");
> -       else
> -               fprintf(out, "\nconfig %s\n", sym->name);
> -       switch (sym->type) {
> -       case S_BOOLEAN:
> -               fputs("  boolean\n", out);
> -               break;
> -       case S_TRISTATE:
> -               fputs("  tristate\n", out);
> +       prop_string = prop_get_type_name(prop->type);
> +       if (prop_string == NULL)
> +               return;
> +
> +       fprintf(out, "%*s  %s%s ", indent * 8, "",
> +           (prop->type == P_CHOICE) ? "#" : "",
> +           prop_string);
> +
> +       switch (prop->type) {
> +       case P_PROMPT:
> +               print_quoted_string(out, prop->text);
> +               if (!expr_is_yes(prop->visible.expr)) {
> +                       fputs(" if ", out);
> +                       expr_fprint(prop->visible.expr, out);
> +               }
>                break;
> -       case S_STRING:
> -               fputs("  string\n", out);
> +       case P_DEFAULT:
> +               expr_fprint(prop->expr, out);
> +               if (!expr_is_yes(prop->visible.expr)) {
> +                       fputs(" if ", out);
> +                       expr_fprint(prop->visible.expr, out);
> +               }
>                break;
> -       case S_INT:
> -               fputs("  integer\n", out);
> +       case P_SELECT:
> +       case P_RANGE:
> +               expr_fprint(prop->expr, out);
>                break;
> -       case S_HEX:
> -               fputs("  hex\n", out);
> +       case P_MENU:
> +       case P_COMMENT:
> +               print_quoted_string(out, prop->text);
>                break;
>        default:
> -               fputs("  ???\n", out);
>                break;
>        }
> +       fprintf(out, "\n");
> +}
> +
> +static void print_symbol(FILE *out, struct menu *menu)
> +{
> +       struct symbol *sym = menu->sym;
> +       struct property *prop;
> +
> +       fprintf(out, "%*s%s %s\n", indent * 8, "",
> +           (sym_is_choice(sym)) ? "choice" : "config",
> +           (sym->name) ? sym->name: "");
> +       fprintf(out, "%*s  %s\n", indent * 8, "",
> +           sym_type_name(sym->type));
> +
>        for (prop = sym->prop; prop; prop = prop->next) {
>                if (prop->menu != menu)
>                        continue;
> -               switch (prop->type) {
> -               case P_PROMPT:
> -                       fputs("  prompt ", out);
> -                       print_quoted_string(out, prop->text);
> -                       if (!expr_is_yes(prop->visible.expr)) {
> -                               fputs(" if ", out);
> -                               expr_fprint(prop->visible.expr, out);
> -                       }
> -                       fputc('\n', out);
> -                       break;
> -               case P_DEFAULT:
> -                       fputs( "  default ", out);
> -                       expr_fprint(prop->expr, out);
> -                       if (!expr_is_yes(prop->visible.expr)) {
> -                               fputs(" if ", out);
> -                               expr_fprint(prop->visible.expr, out);
> -                       }
> -                       fputc('\n', out);
> -                       break;
> -               case P_CHOICE:
> -                       fputs("  #choice value\n", out);
> -                       break;
> -               case P_SELECT:
> -                       fputs( "  select ", out);
> -                       expr_fprint(prop->expr, out);
> -                       fputc('\n', out);
> -                       break;
> -               case P_RANGE:
> -                       fputs( "  range ", out);
> -                       expr_fprint(prop->expr, out);
> -                       fputc('\n', out);
> -                       break;
> -               case P_MENU:
> -                       fputs( "  menu ", out);
> -                       print_quoted_string(out, prop->text);
> -                       fputc('\n', out);
> -                       break;
> -               case P_SYMBOL:
> -                       break;
> -               default:
> -                       fprintf(out, "  unknown prop %d!\n", prop->type);
> -                       break;
> -               }
> -       }
> -       if (menu->help) {
> -               int len = strlen(menu->help);
> -               while (menu->help[--len] == '\n')
> -                       menu->help[len] = 0;
> -               fprintf(out, "  help\n%s\n", menu->help);
> +               print_property(out, prop);
>        }
> +       fprintf(out, "\n");
>  }
>
>  void zconfdump(FILE *out)
>  {
> -       struct property *prop;
> -       struct symbol *sym;
>        struct menu *menu;
>
>        menu = rootmenu.list;
>        while (menu) {
> -               if ((sym = menu->sym))
> +               if (menu->sym)
>                        print_symbol(out, menu);
> -               else if ((prop = menu->prompt)) {
> -                       switch (prop->type) {
> -                       case P_COMMENT:
> -                               fputs("\ncomment ", out);
> -                               print_quoted_string(out, prop->text);
> -                               fputs("\n", out);
> -                               break;
> -                       case P_MENU:
> -                               fputs("\nmenu ", out);
> -                               print_quoted_string(out, prop->text);
> -                               fputs("\n", out);
> -                               break;
> -                       default:
> -                               ;
> -                       }
> -                       if (!expr_is_yes(prop->visible.expr)) {
> -                               fputs("  depends ", out);
> -                               expr_fprint(prop->visible.expr, out);
> -                               fputc('\n', out);
> -                       }
> +
> +               if (menu->help) {
> +                       int len = strlen(menu->help);
> +                       while (menu->help[--len] == '\n')
> +                               menu->help[len] = 0;
> +                       fprintf(out, "%*s  help\n%s\n", indent * 8, "",
> +                           menu->help);
>                }
>
> -               if (menu->list)
> +               if (menu->list) {
> +                       indent++;
>                        menu = menu->list;
> +               }
>                else if (menu->next)
>                        menu = menu->next;
>                else while ((menu = menu->parent)) {
> -                       if (menu->prompt && menu->prompt->type == P_MENU)
> -                               fputs("\nendmenu\n", out);
> +                       if (menu != &rootmenu)
> +                               indent--;
> +                       fprintf(out, "%*s", indent * 8, "");
> +                       if (menu->sym && sym_is_choice(menu->sym))
> +                               fprintf(out, "endchoice\n\n");
> +                       if (menu->prompt && menu->prompt->type == P_MENU &&
> +                           menu != &rootmenu)
> +                               fprintf(out, "endmenu\n\n");
>                        if (menu->next) {
>                                menu = menu->next;
>                                break;
> --
> 1.7.3.4.574.g608b.dirty
>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] kconfig: zconfdump() clean-up
  2011-05-31  1:24 ` Arnaud Lacombe
@ 2011-06-08  5:05   ` Arnaud Lacombe
  0 siblings, 0 replies; 5+ messages in thread
From: Arnaud Lacombe @ 2011-06-08  5:05 UTC (permalink / raw)
  To: linux-kbuild; +Cc: Michal Marek, Arnaud Lacombe

Hi,

On Mon, May 30, 2011 at 9:24 PM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> Hi,
>
> On Mon, May 16, 2011 at 12:06 AM, Arnaud Lacombe <lacombar@gmail.com> wrote:
>> Hi Michal,
>>
>> The following patch is a summarize of changes I made in zconfdump() last week
>> when debugging Yann's multiple choice issue. This might help debugging a bit,
>> espectially by exposing the tree depth.
>>
>> Considering the following Kconfig:
>>
>> config A
>>   bool "A"
>> if A
>> choice C
>>   bool "C"
>> config C1
>>   bool "C1"
>> config C2
>>   bool "C2"
>> endchoice
>> endif # A
>>
>> config B
>>   bool "B"
>>   depends on ! A
>> if B
>> choice C
>>   bool "C"
>> config C1
>>   bool "C1"
>> config C2
>>   bool "C2"
>> endchoice
>> endif # A
>>
>> It generates the following output, after menu_finalize():
>>
>> config A
>>  boolean
>>  symbol
>>  prompt "A"
>>
>>        choice C
>>          boolean
>>          symbol
>>          #choice
>>          prompt "C" if A
>>
>>                config C1
>>                  boolean
>>                  symbol
>>                  prompt "C1" if C
>>                  #choice
>>
>>                config C2
>>                  boolean
>>                  symbol
>>                  prompt "C2" if C
>>                  #choice
>>
>>        endchoice
>>
>>        config B
>>          boolean
>>          symbol
>>          prompt "B" if !A
>>
>>                choice C
>>                  boolean
>>                  symbol
>>                  #choice
>>                  prompt "C" if B
>>
>>                        config C1
>>                          boolean
>>                          symbol
>>                          prompt "C1" if C
>>
>>                        config C2
>>                          boolean
>>                          symbol
>>                          prompt "C2" if C
>>
>>                endchoice
>>
>> instead of:
>>
>> config A
>>  boolean
>>  unknown prop 9!
>>  prompt "A"
>>
>> choice
>>  boolean
>>  unknown prop 9!
>>  #choice value
>>  prompt "C" if A
>>
>> config C1
>>  boolean
>>  unknown prop 9!
>>  prompt "C1" if C
>>  #choice value
>>
>> config C2
>>  boolean
>>  unknown prop 9!
>>  prompt "C2" if C
>>  #choice value
>>
>> config B
>>  boolean
>>  unknown prop 9!
>>  prompt "B" if !A
>>
>> choice
>>  boolean
>>  unknown prop 9!
>>  #choice value
>>  prompt "C" if B
>>
>> config C1
>>  boolean
>>  unknown prop 9!
>>  prompt "C1" if C
>>
>> config C2
>>  boolean
>>  unknown prop 9!
>>  prompt "C2" if C
>>
>> endmenu
>>
>> Broken down patches are available at:
>>
>> https://github.com/lacombar/linux-2.6/tree/kconfig-zconfdump
>>
>> Not for merge for now, even if it merges fine with your kbuild/kconfig's tip.
>>
> ping ?
>
ping^2 ?

 - Arnaud

>
>> Regards,
>>  - Arnaud
>>
>> ---
>>  scripts/kconfig/zconf.y |  161 +++++++++++++++++++----------------------------
>>  1 files changed, 66 insertions(+), 95 deletions(-)
>>
>> diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
>> index 237ae2a..f18bc5a 100644
>> --- a/scripts/kconfig/zconf.y
>> +++ b/scripts/kconfig/zconf.y
>> @@ -612,129 +612,100 @@ static void print_quoted_string(FILE *out, const char *str)
>>        putc('"', out);
>>  }
>>
>> -static void print_symbol(FILE *out, struct menu *menu)
>> +static int indent;
>> +
>> +static void print_property(FILE *out, struct property *prop)
>>  {
>> -       struct symbol *sym = menu->sym;
>> -       struct property *prop;
>> +       const char *prop_string;
>>
>> -       if (sym_is_choice(sym))
>> -               fprintf(out, "\nchoice\n");
>> -       else
>> -               fprintf(out, "\nconfig %s\n", sym->name);
>> -       switch (sym->type) {
>> -       case S_BOOLEAN:
>> -               fputs("  boolean\n", out);
>> -               break;
>> -       case S_TRISTATE:
>> -               fputs("  tristate\n", out);
>> +       prop_string = prop_get_type_name(prop->type);
>> +       if (prop_string == NULL)
>> +               return;
>> +
>> +       fprintf(out, "%*s  %s%s ", indent * 8, "",
>> +           (prop->type == P_CHOICE) ? "#" : "",
>> +           prop_string);
>> +
>> +       switch (prop->type) {
>> +       case P_PROMPT:
>> +               print_quoted_string(out, prop->text);
>> +               if (!expr_is_yes(prop->visible.expr)) {
>> +                       fputs(" if ", out);
>> +                       expr_fprint(prop->visible.expr, out);
>> +               }
>>                break;
>> -       case S_STRING:
>> -               fputs("  string\n", out);
>> +       case P_DEFAULT:
>> +               expr_fprint(prop->expr, out);
>> +               if (!expr_is_yes(prop->visible.expr)) {
>> +                       fputs(" if ", out);
>> +                       expr_fprint(prop->visible.expr, out);
>> +               }
>>                break;
>> -       case S_INT:
>> -               fputs("  integer\n", out);
>> +       case P_SELECT:
>> +       case P_RANGE:
>> +               expr_fprint(prop->expr, out);
>>                break;
>> -       case S_HEX:
>> -               fputs("  hex\n", out);
>> +       case P_MENU:
>> +       case P_COMMENT:
>> +               print_quoted_string(out, prop->text);
>>                break;
>>        default:
>> -               fputs("  ???\n", out);
>>                break;
>>        }
>> +       fprintf(out, "\n");
>> +}
>> +
>> +static void print_symbol(FILE *out, struct menu *menu)
>> +{
>> +       struct symbol *sym = menu->sym;
>> +       struct property *prop;
>> +
>> +       fprintf(out, "%*s%s %s\n", indent * 8, "",
>> +           (sym_is_choice(sym)) ? "choice" : "config",
>> +           (sym->name) ? sym->name: "");
>> +       fprintf(out, "%*s  %s\n", indent * 8, "",
>> +           sym_type_name(sym->type));
>> +
>>        for (prop = sym->prop; prop; prop = prop->next) {
>>                if (prop->menu != menu)
>>                        continue;
>> -               switch (prop->type) {
>> -               case P_PROMPT:
>> -                       fputs("  prompt ", out);
>> -                       print_quoted_string(out, prop->text);
>> -                       if (!expr_is_yes(prop->visible.expr)) {
>> -                               fputs(" if ", out);
>> -                               expr_fprint(prop->visible.expr, out);
>> -                       }
>> -                       fputc('\n', out);
>> -                       break;
>> -               case P_DEFAULT:
>> -                       fputs( "  default ", out);
>> -                       expr_fprint(prop->expr, out);
>> -                       if (!expr_is_yes(prop->visible.expr)) {
>> -                               fputs(" if ", out);
>> -                               expr_fprint(prop->visible.expr, out);
>> -                       }
>> -                       fputc('\n', out);
>> -                       break;
>> -               case P_CHOICE:
>> -                       fputs("  #choice value\n", out);
>> -                       break;
>> -               case P_SELECT:
>> -                       fputs( "  select ", out);
>> -                       expr_fprint(prop->expr, out);
>> -                       fputc('\n', out);
>> -                       break;
>> -               case P_RANGE:
>> -                       fputs( "  range ", out);
>> -                       expr_fprint(prop->expr, out);
>> -                       fputc('\n', out);
>> -                       break;
>> -               case P_MENU:
>> -                       fputs( "  menu ", out);
>> -                       print_quoted_string(out, prop->text);
>> -                       fputc('\n', out);
>> -                       break;
>> -               case P_SYMBOL:
>> -                       break;
>> -               default:
>> -                       fprintf(out, "  unknown prop %d!\n", prop->type);
>> -                       break;
>> -               }
>> -       }
>> -       if (menu->help) {
>> -               int len = strlen(menu->help);
>> -               while (menu->help[--len] == '\n')
>> -                       menu->help[len] = 0;
>> -               fprintf(out, "  help\n%s\n", menu->help);
>> +               print_property(out, prop);
>>        }
>> +       fprintf(out, "\n");
>>  }
>>
>>  void zconfdump(FILE *out)
>>  {
>> -       struct property *prop;
>> -       struct symbol *sym;
>>        struct menu *menu;
>>
>>        menu = rootmenu.list;
>>        while (menu) {
>> -               if ((sym = menu->sym))
>> +               if (menu->sym)
>>                        print_symbol(out, menu);
>> -               else if ((prop = menu->prompt)) {
>> -                       switch (prop->type) {
>> -                       case P_COMMENT:
>> -                               fputs("\ncomment ", out);
>> -                               print_quoted_string(out, prop->text);
>> -                               fputs("\n", out);
>> -                               break;
>> -                       case P_MENU:
>> -                               fputs("\nmenu ", out);
>> -                               print_quoted_string(out, prop->text);
>> -                               fputs("\n", out);
>> -                               break;
>> -                       default:
>> -                               ;
>> -                       }
>> -                       if (!expr_is_yes(prop->visible.expr)) {
>> -                               fputs("  depends ", out);
>> -                               expr_fprint(prop->visible.expr, out);
>> -                               fputc('\n', out);
>> -                       }
>> +
>> +               if (menu->help) {
>> +                       int len = strlen(menu->help);
>> +                       while (menu->help[--len] == '\n')
>> +                               menu->help[len] = 0;
>> +                       fprintf(out, "%*s  help\n%s\n", indent * 8, "",
>> +                           menu->help);
>>                }
>>
>> -               if (menu->list)
>> +               if (menu->list) {
>> +                       indent++;
>>                        menu = menu->list;
>> +               }
>>                else if (menu->next)
>>                        menu = menu->next;
>>                else while ((menu = menu->parent)) {
>> -                       if (menu->prompt && menu->prompt->type == P_MENU)
>> -                               fputs("\nendmenu\n", out);
>> +                       if (menu != &rootmenu)
>> +                               indent--;
>> +                       fprintf(out, "%*s", indent * 8, "");
>> +                       if (menu->sym && sym_is_choice(menu->sym))
>> +                               fprintf(out, "endchoice\n\n");
>> +                       if (menu->prompt && menu->prompt->type == P_MENU &&
>> +                           menu != &rootmenu)
>> +                               fprintf(out, "endmenu\n\n");
>>                        if (menu->next) {
>>                                menu = menu->next;
>>                                break;
>> --
>> 1.7.3.4.574.g608b.dirty
>>
>>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] kconfig: zconfdump() clean-up
  2011-05-16  4:06 [RFC] kconfig: zconfdump() clean-up Arnaud Lacombe
  2011-05-16  4:07 ` Arnaud Lacombe
  2011-05-31  1:24 ` Arnaud Lacombe
@ 2011-06-24 14:08 ` Michal Marek
  2 siblings, 0 replies; 5+ messages in thread
From: Michal Marek @ 2011-06-24 14:08 UTC (permalink / raw)
  To: Arnaud Lacombe; +Cc: linux-kbuild

On 16.5.2011 06:06, Arnaud Lacombe wrote:
> Hi Michal,
>
> The following patch is a summarize of changes I made in zconfdump() last week
> when debugging Yann's multiple choice issue. This might help debugging a bit,
> espectially by exposing the tree depth.
>
> Considering the following Kconfig:
>
> config A
>     bool "A"
> if A
> choice C
>     bool "C"
> config C1
>     bool "C1"
> config C2
>     bool "C2"
> endchoice
> endif # A
>
> config B
>     bool "B"
>     depends on ! A
> if B
> choice C
>     bool "C"
> config C1
>     bool "C1"
> config C2
>     bool "C2"
> endchoice
> endif # A
>
> It generates the following output, after menu_finalize():
>
> config A
>    boolean
>    symbol
>    prompt "A"
>
>          choice C
>            boolean
>            symbol
>            #choice
>            prompt "C" if A

Why not. zconfdump() is only used for debugging and you've been doing 
most of the kconfig work lately, so if this suits you, then I'll merge 
it. I only spotted one minor issue:

commit 21685d396a123a576bbe487651cb5cc04fa5f9a3
Author: Arnaud Lacombe <lacombar@gmail.com>
Date:   Tue May 10 22:55:20 2011 -0400

     kconfig/zconfdump(): output newline at the *end* of statement

puts the newline between the symbol statement and it's help text (if 
any). So if there is help text defined, it will appear attached to the 
next symbol. But it's not really an issue.

Michal

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-06-24 14:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-16  4:06 [RFC] kconfig: zconfdump() clean-up Arnaud Lacombe
2011-05-16  4:07 ` Arnaud Lacombe
2011-05-31  1:24 ` Arnaud Lacombe
2011-06-08  5:05   ` Arnaud Lacombe
2011-06-24 14:08 ` Michal Marek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.