diff options
author | Peter Korsgaard <jacmet@sunsite.dk> | 2010-07-23 14:15:18 +0200 |
---|---|---|
committer | Peter Korsgaard <jacmet@sunsite.dk> | 2010-07-23 14:27:30 +0200 |
commit | 3435c1afb58307240be8e4607b5bb7d239fac4e9 (patch) | |
tree | e1ba65ccf220652f3827f9239d2644a7f26d4737 /package | |
parent | f4800b4654ae529d23b3c9697123c94ffce313d0 (diff) |
kconfig: implement KCONFIG_PROBABILITY for rand{,package}config
rand{,package}config enables configuration options with 50% probability,
which isn't always what we want in BR (because the "big" configs take a
long time to build and limits the chance of a randconfig detecting a
missing dependency), so introduce a KCONFIG_PROBABILITY environment
variable to tweak the probability between 0 (all options off) and 100
(all options on).
To use, simply set the environment variable before running make or pass
it on the make command line - E.G.
make randpackageconfig KCONFIG_PROBABILITY=10
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package')
-rw-r--r-- | package/config/confdata.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/package/config/confdata.c b/package/config/confdata.c index 728f708ca..38424702a 100644 --- a/package/config/confdata.c +++ b/package/config/confdata.c @@ -845,7 +845,16 @@ 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; + int i, cnt, def, prob = 50; + + if (mode == def_random) { + char *endp, *env = getenv("KCONFIG_PROBABILITY"); + if (env && *env) { + int tmp = (int)strtol(env, &endp, 10); + if (*endp == '\0' && tmp >= 0 && tmp <= 100) + prob = tmp; + } + } for_all_symbols(i, sym) { if (sym_has_value(sym)) @@ -864,8 +873,15 @@ void conf_set_all_new_symbols(enum conf_def_mode mode) sym->def[S_DEF_USER].tri = no; break; case def_random: - cnt = sym_get_type(sym) == S_TRISTATE ? 3 : 2; - sym->def[S_DEF_USER].tri = (tristate)(rand() % cnt); + cnt = (rand() % 100) - (100 - prob); + if (cnt < 0) + sym->def[S_DEF_USER].tri = no; + else + if ((sym_get_type(sym) == S_TRISTATE) + && (cnt > prob/2)) + sym->def[S_DEF_USER].tri = mod; + else + sym->def[S_DEF_USER].tri = yes; break; default: continue; |