aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kconfig/menu.c
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2010-06-08 12:25:57 -0400
committerMichal Marek <mmarek@suse.cz>2010-07-02 08:53:09 -0400
commit246cf9c26bf11f2bffbecea6e5bd222eee7b1df8 (patch)
tree29ddd2eaa165dbad9e8760866d782f122f579118 /scripts/kconfig/menu.c
parent60c8eca69f7fb2820677a635d921866f66727fcb (diff)
kbuild: Warn on selecting symbols with unmet direct dependencies
The "select" statement in Kconfig files allows the enabling of options even if they have unmet direct dependencies (i.e. "depends on" expands to "no"). Currently, the "depends on" clauses are used in calculating the visibility but they do not affect the reverse dependencies in any way. The patch introduces additional tracking of the "depends on" statements and prints a warning on selecting an option if its direct dependencies are not met. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Michal Marek <mmarek@suse.cz>
Diffstat (limited to 'scripts/kconfig/menu.c')
-rw-r--r--scripts/kconfig/menu.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index eef17bacb6bc..11799894f3bd 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -105,6 +105,7 @@ static struct expr *menu_check_dep(struct expr *e)
105void menu_add_dep(struct expr *dep) 105void menu_add_dep(struct expr *dep)
106{ 106{
107 current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep)); 107 current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
108 current_entry->dir_dep = current_entry->dep;
108} 109}
109 110
110void menu_set_type(int type) 111void menu_set_type(int type)
@@ -288,6 +289,10 @@ void menu_finalize(struct menu *parent)
288 for (menu = parent->list; menu; menu = menu->next) 289 for (menu = parent->list; menu; menu = menu->next)
289 menu_finalize(menu); 290 menu_finalize(menu);
290 } else if (sym) { 291 } else if (sym) {
292 /* ignore inherited dependencies for dir_dep */
293 sym->dir_dep.expr = expr_transform(expr_copy(parent->dir_dep));
294 sym->dir_dep.expr = expr_eliminate_dups(sym->dir_dep.expr);
295
291 basedep = parent->prompt ? parent->prompt->visible.expr : NULL; 296 basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
292 basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); 297 basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
293 basedep = expr_eliminate_dups(expr_transform(basedep)); 298 basedep = expr_eliminate_dups(expr_transform(basedep));