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

Commit dc7862e5 authored by Roman Zippel's avatar Roman Zippel Committed by Sam Ravnborg
Browse files

kconfig: set all new symbols automatically



Add conf_set_all_new_symbols() which set all symbols (which don't have a
value yet) to a specifed value.

Signed-off-by: default avatarRoman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent a717417e
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -812,3 +812,73 @@ void conf_set_changed_callback(void (*fn)(void))
{
	conf_changed_callback = fn;
}


void conf_set_all_new_symbols(enum conf_def_mode mode)
{
	struct symbol *sym, *csym;
	struct property *prop;
	struct expr *e;
	int i, cnt, def;

	for_all_symbols(i, sym) {
		if (sym_has_value(sym))
			continue;
		switch (sym_get_type(sym)) {
		case S_BOOLEAN:
		case S_TRISTATE:
			switch (mode) {
			case def_yes:
				sym->def[S_DEF_USER].tri = yes;
				break;
			case def_mod:
				sym->def[S_DEF_USER].tri = mod;
				break;
			case def_no:
				sym->def[S_DEF_USER].tri = no;
				break;
			case def_random:
				sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
				break;
			default:
				continue;
			}
			if (!sym_is_choice(sym) || mode != def_random)
				sym->flags |= SYMBOL_DEF_USER;
			break;
		default:
			break;
		}

	}

	if (modules_sym)
		sym_calc_value(modules_sym);

	if (mode != def_random)
		return;

	for_all_symbols(i, csym) {
		if (sym_has_value(csym) || !sym_is_choice(csym))
			continue;

		sym_calc_value(csym);
		prop = sym_get_choice_prop(csym);
		def = -1;
		while (1) {
			cnt = 0;
			expr_list_for_each_sym(prop->expr, e, sym) {
				if (sym->visible == no)
					continue;
				if (def == cnt++) {
					csym->def[S_DEF_USER].val = sym;
					break;
				}
			}
			if (def >= 0 || cnt < 2)
				break;
			def = (rand() % cnt) + 1;
		}
		csym->flags |= SYMBOL_DEF_USER;
	}
}
+9 −0
Original line number Diff line number Diff line
@@ -42,6 +42,14 @@ extern "C" {
#define TF_PARAM	0x0002
#define TF_OPTION	0x0004

enum conf_def_mode {
	def_default,
	def_yes,
	def_mod,
	def_no,
	def_random
};

#define T_OPT_MODULES		1
#define T_OPT_DEFCONFIG_LIST	2
#define T_OPT_ENV		3
@@ -69,6 +77,7 @@ const char *conf_get_configname(void);
char *conf_get_default_confname(void);
void sym_set_change_count(int count);
void sym_add_change_count(int count);
void conf_set_all_new_symbols(enum conf_def_mode mode);

/* kconfig_load.c */
void kconfig_load(void);