lkml.org 
[lkml]   [2008]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/13] kconfig: print all locations when we see a recursive dependency
    Date
    It is nessesary to know all locations when trying to track
    a recursive dependency. So print out all locations for each symbol.

    Sample output:
    Kconfig:1: found recursive dependency:
    TEST1
    -> TEST2 (Kconfig:4),(Kconfig:12)
    -> TEST1 (Kconfig:1),(Kconfig:7)

    In a more complex example the symbols can be defined in different
    files thus making it harder to track.

    Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
    Cc: Roman Zippel <zippel@linux-m68k.org>
    ---
    scripts/kconfig/symbol.c | 24 ++++++++++++++++++------
    1 files changed, 18 insertions(+), 6 deletions(-)

    diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
    index 474dae2..fc62f34 100644
    --- a/scripts/kconfig/symbol.c
    +++ b/scripts/kconfig/symbol.c
    @@ -790,6 +790,21 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
    return NULL;
    }

    +static void print_symbol_location(struct symbol *sym)
    +{
    + struct property *prop;
    + int comma = 0;
    +
    + fprintf(stderr, "\t -> %s ", sym->name ? sym->name : "<choice>");
    + for (prop = sym->prop; prop; prop = prop->next) {
    + if (prop->type == P_SYMBOL) {
    + fprintf(stderr, "%s(%s:%d)",
    + comma ? "," : "", prop->file->name, prop->lineno);
    + comma = 1;
    + }
    + }
    + fprintf(stderr, "\n");
    +}
    /* return NULL when dependencies are OK */
    static struct symbol *sym_check_sym_deps(struct symbol *sym)
    {
    @@ -835,7 +850,7 @@ static struct symbol *sym_check_choice_deps(struct symbol *choice)
    expr_list_for_each_sym(prop->expr, e, sym) {
    sym2 = sym_check_sym_deps(sym);
    if (sym2) {
    - fprintf(stderr, " -> %s", sym->name);
    + print_symbol_location(sym);
    break;
    }
    }
    @@ -856,7 +871,7 @@ struct symbol *sym_check_deps(struct symbol *sym)
    struct property *prop;

    if (sym->flags & SYMBOL_CHECK) {
    - fprintf(stderr, "%s:%d:error: found recursive dependency:\n",
    + fprintf(stderr, "%s:%d: found recursive dependency:\n",
    sym->prop->file->name, sym->prop->lineno);
    fprintf(stderr, "\t %s\n",
    sym->name ? sym->name : "<choice>");
    @@ -878,11 +893,8 @@ struct symbol *sym_check_deps(struct symbol *sym)
    }

    if (sym2) {
    - fprintf(stderr, "\t -> %s (%s:%d)\n",
    - sym->name ? sym->name : "<choice>",
    - sym->prop->file->name, sym->prop->lineno);
    + print_symbol_location(sym);
    if (sym2 == sym) {
    - fprintf(stderr, "\n");
    zconfnerrs++;
    sym2 = NULL;
    }
    --
    1.6.0.2.GIT


    \
     
     \ /
      Last update: 2008-12-29 14:55    [W:0.025 / U:0.628 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site