Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5447d34b authored by Sam Ravnborg's avatar Sam Ravnborg
Browse files

kconfig: error out if recursive dependencies are found



Sample:
config FOO
	bool "This is foo"
	depends on BAR

config BAR
	bool "This is bar"
	depends on FOO

This will result in following error message:
error: found recursive dependency: FOO -> BAR -> FOO

And will then exit with exit code equal 1 so make will stop.
Inspired by patch from: Adrian Bunk <bunk@stusta.de>

Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Cc: Adrian Bunk <bunk@stusta.de>
Cc: Roman Zippel <zippel@linux-m68k.org>
parent 04c58f81
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -786,13 +786,15 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
	return NULL;
}

/* return NULL when dependencies are OK */
struct symbol *sym_check_deps(struct symbol *sym)
{
	struct symbol *sym2;
	struct property *prop;

	if (sym->flags & SYMBOL_CHECK) {
		printf("Warning! Found recursive dependency: %s", sym->name);
		fprintf(stderr, "%s:%d:error: found recursive dependency: %s",
		        sym->prop->file->name, sym->prop->lineno, sym->name);
		return sym;
	}
	if (sym->flags & SYMBOL_CHECKED)
@@ -816,13 +818,8 @@ struct symbol *sym_check_deps(struct symbol *sym)
			goto out;
	}
out:
	if (sym2) {
		printf(" %s", sym->name);
		if (sym2 == sym) {
			printf("\n");
			sym2 = NULL;
		}
	}
	if (sym2)
		fprintf(stderr, " -> %s%s", sym->name, sym2 == sym? "\n": "");
	sym->flags &= ~SYMBOL_CHECK;
	return sym2;
}
+4 −2
Original line number Diff line number Diff line
@@ -2132,9 +2132,11 @@ void conf_parse(const char *name)
	}
	menu_finalize(&rootmenu);
	for_all_symbols(i, sym) {
		sym_check_deps(sym);
		if (sym_check_deps(sym))
			zconfnerrs++;
        }

	if (zconfnerrs)
		exit(1);
	sym_set_change_count(1);
}

+4 −2
Original line number Diff line number Diff line
@@ -501,9 +501,11 @@ void conf_parse(const char *name)
	}
	menu_finalize(&rootmenu);
	for_all_symbols(i, sym) {
		sym_check_deps(sym);
		if (sym_check_deps(sym))
			zconfnerrs++;
        }

	if (zconfnerrs)
		exit(1);
	sym_set_change_count(1);
}