[PATCH 1/2] kconfig: Print full defined and depends for multiply-defined symbols

Gregory Fong
2015-04-08T23:57:31Z

get_symbol_str() was assuming that symbols would only have a single
property for the purpose of printing define and depends information.
This is not true, and one current example is FRAME_POINTER which is
both in lib/Kconfig.debug and arch/arm/Kconfig.debug.

In order to print out the correct Defined and Depends info, iterate
over all properties associated with the given symbol, similarly to was
done for selects. And for depends, rather than iterating over the
property, just use the direct dependency expression.

CONFIG_FRAME_POINTER text, before:
Defined at lib/Kconfig.debug:323
Depends on: DEBUG_KERNEL [=y] && (ARM [=y] || CRIS || M68K || FRV || UML || AVR32 || SUPERH || BLACKFIN || MN10300 || METAG) || ARCH_WANT_FRAME_POINTERS [=n]

After:
Defined at lib/Kconfig.debug:323, arch/arm/Kconfig.debug:35
Depends on: DEBUG_KERNEL [=y] && (ARM [=y] || CRIS || M68K || FRV || UML || AVR32 || SUPERH || BLACKFIN || MN10300 || METAG) || ARCH_WANT_FRAME_POINTERS [=n] || !THUMB2_KERNEL [=n]

Removes now-unused function get_symbol_prop().

Signed-off-by: Gregory Fong <gregory.0xf0@gmail.com>
---
scripts/kconfig/menu.c | 35 +++++++++++++++--------------------
1 file changed, 15 insertions(+), 20 deletions(-)

diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index 72c9dba..da482ff 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -601,18 +601,6 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
}

/*
- * get property of type P_SYMBOL
- */
-static struct property *get_symbol_prop(struct symbol *sym)
-{
- struct property *prop = NULL;
-
- for_all_properties(sym, prop, P_SYMBOL)
- break;
- return prop;
-}
-
-/*
* head is optional and may be NULL
*/
void get_symbol_str(struct gstr *r, struct symbol *sym,
@@ -637,15 +625,22 @@ void get_symbol_str(struct gstr *r, struct symbol *sym,
for_all_prompts(sym, prop)
get_prompt_str(r, prop, head);

- prop = get_symbol_prop(sym);
- if (prop) {
- str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
+ hit = false;
+ for_all_properties(sym, prop, P_SYMBOL) {
+ if (!hit) {
+ str_append(r, " Defined at ");
+ hit = true;
+ } else
+ str_append(r, ", ");
+ str_printf(r, _("%s:%d"), prop->menu->file->name,
prop->menu->lineno);
- if (!expr_is_yes(prop->visible.expr)) {
- str_append(r, _(" Depends on: "));
- expr_gstr_print(prop->visible.expr, r);
- str_append(r, "\n");
- }
+ }
+ if (hit)
+ str_append(r, "\n");
+ if (!expr_is_yes(sym->dir_dep.expr)) {
+ str_append(r, _(" Depends on: "));
+ expr_gstr_print(sym->dir_dep.expr, r);
+ str_append(r, "\n");
}

hit = false;
--
1.9.1