diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-30 21:13:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-30 21:13:17 -0400 |
commit | 2b17b4382c4bcb1952e9c6953284044970a274f3 (patch) | |
tree | 76999d2060412419fb9997c4efb732a8a7cc89d5 /scripts | |
parent | f558c272386a0f7507cc8de7b6b5afc24d17fa9c (diff) | |
parent | 9875c42d6979a7db0b8d217e2a88095b753f482c (diff) |
Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kconfig bits from Michal Marek:
"There is one fix for make oldconfig by Arnaud and updates to the
merge_config.sh tool."
* 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
merge_config.sh: Add option to display redundant configs
merge_config.sh: Set execute bit
merge_config.sh: Use the first file as the initial config
kconfig: fix new choices being skipped upon config update
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/kconfig/confdata.c | 26 | ||||
-rwxr-xr-x[-rw-r--r--] | scripts/kconfig/merge_config.sh | 15 | ||||
-rw-r--r-- | scripts/kconfig/symbol.c | 9 |
3 files changed, 28 insertions, 22 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 7c7a5a6cc3f5..0586085136d1 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -344,10 +344,8 @@ setsym: | |||
344 | 344 | ||
345 | int conf_read(const char *name) | 345 | int conf_read(const char *name) |
346 | { | 346 | { |
347 | struct symbol *sym, *choice_sym; | 347 | struct symbol *sym; |
348 | struct property *prop; | 348 | int i; |
349 | struct expr *e; | ||
350 | int i, flags; | ||
351 | 349 | ||
352 | sym_set_change_count(0); | 350 | sym_set_change_count(0); |
353 | 351 | ||
@@ -357,7 +355,7 @@ int conf_read(const char *name) | |||
357 | for_all_symbols(i, sym) { | 355 | for_all_symbols(i, sym) { |
358 | sym_calc_value(sym); | 356 | sym_calc_value(sym); |
359 | if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) | 357 | if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) |
360 | goto sym_ok; | 358 | continue; |
361 | if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { | 359 | if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { |
362 | /* check that calculated value agrees with saved value */ | 360 | /* check that calculated value agrees with saved value */ |
363 | switch (sym->type) { | 361 | switch (sym->type) { |
@@ -366,30 +364,18 @@ int conf_read(const char *name) | |||
366 | if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) | 364 | if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) |
367 | break; | 365 | break; |
368 | if (!sym_is_choice(sym)) | 366 | if (!sym_is_choice(sym)) |
369 | goto sym_ok; | 367 | continue; |
370 | /* fall through */ | 368 | /* fall through */ |
371 | default: | 369 | default: |
372 | if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) | 370 | if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) |
373 | goto sym_ok; | 371 | continue; |
374 | break; | 372 | break; |
375 | } | 373 | } |
376 | } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) | 374 | } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) |
377 | /* no previous value and not saved */ | 375 | /* no previous value and not saved */ |
378 | goto sym_ok; | 376 | continue; |
379 | conf_unsaved++; | 377 | conf_unsaved++; |
380 | /* maybe print value in verbose mode... */ | 378 | /* maybe print value in verbose mode... */ |
381 | sym_ok: | ||
382 | if (!sym_is_choice(sym)) | ||
383 | continue; | ||
384 | /* The choice symbol only has a set value (and thus is not new) | ||
385 | * if all its visible childs have values. | ||
386 | */ | ||
387 | prop = sym_get_choice_prop(sym); | ||
388 | flags = sym->flags; | ||
389 | expr_list_for_each_sym(prop->expr, e, choice_sym) | ||
390 | if (choice_sym->visible != no) | ||
391 | flags &= choice_sym->flags; | ||
392 | sym->flags &= flags | ~SYMBOL_DEF_USER; | ||
393 | } | 379 | } |
394 | 380 | ||
395 | for_all_symbols(i, sym) { | 381 | for_all_symbols(i, sym) { |
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh index ceadf0e150cf..974d5cb7e30a 100644..100755 --- a/scripts/kconfig/merge_config.sh +++ b/scripts/kconfig/merge_config.sh | |||
@@ -31,10 +31,12 @@ usage() { | |||
31 | echo " -h display this help text" | 31 | echo " -h display this help text" |
32 | echo " -m only merge the fragments, do not execute the make command" | 32 | echo " -m only merge the fragments, do not execute the make command" |
33 | echo " -n use allnoconfig instead of alldefconfig" | 33 | echo " -n use allnoconfig instead of alldefconfig" |
34 | echo " -r list redundant entries when merging fragments" | ||
34 | } | 35 | } |
35 | 36 | ||
36 | MAKE=true | 37 | MAKE=true |
37 | ALLTARGET=alldefconfig | 38 | ALLTARGET=alldefconfig |
39 | WARNREDUN=false | ||
38 | 40 | ||
39 | while true; do | 41 | while true; do |
40 | case $1 in | 42 | case $1 in |
@@ -52,18 +54,27 @@ while true; do | |||
52 | usage | 54 | usage |
53 | exit | 55 | exit |
54 | ;; | 56 | ;; |
57 | "-r") | ||
58 | WARNREDUN=true | ||
59 | shift | ||
60 | continue | ||
61 | ;; | ||
55 | *) | 62 | *) |
56 | break | 63 | break |
57 | ;; | 64 | ;; |
58 | esac | 65 | esac |
59 | done | 66 | done |
60 | 67 | ||
61 | 68 | INITFILE=$1 | |
69 | shift; | ||
62 | 70 | ||
63 | MERGE_LIST=$* | 71 | MERGE_LIST=$* |
64 | SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p" | 72 | SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p" |
65 | TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) | 73 | TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) |
66 | 74 | ||
75 | echo "Using $INITFILE as base" | ||
76 | cat $INITFILE > $TMP_FILE | ||
77 | |||
67 | # Merge files, printing warnings on overrided values | 78 | # Merge files, printing warnings on overrided values |
68 | for MERGE_FILE in $MERGE_LIST ; do | 79 | for MERGE_FILE in $MERGE_LIST ; do |
69 | echo "Merging $MERGE_FILE" | 80 | echo "Merging $MERGE_FILE" |
@@ -79,6 +90,8 @@ for MERGE_FILE in $MERGE_LIST ; do | |||
79 | echo Previous value: $PREV_VAL | 90 | echo Previous value: $PREV_VAL |
80 | echo New value: $NEW_VAL | 91 | echo New value: $NEW_VAL |
81 | echo | 92 | echo |
93 | elif [ "$WARNREDUN" = "true" ]; then | ||
94 | echo Value of $CFG is redundant by fragment $MERGE_FILE: | ||
82 | fi | 95 | fi |
83 | sed -i "/$CFG[ =]/d" $TMP_FILE | 96 | sed -i "/$CFG[ =]/d" $TMP_FILE |
84 | fi | 97 | fi |
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 071f00c3046e..22a3c400fc41 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c | |||
@@ -262,11 +262,18 @@ static struct symbol *sym_calc_choice(struct symbol *sym) | |||
262 | struct symbol *def_sym; | 262 | struct symbol *def_sym; |
263 | struct property *prop; | 263 | struct property *prop; |
264 | struct expr *e; | 264 | struct expr *e; |
265 | int flags; | ||
265 | 266 | ||
266 | /* first calculate all choice values' visibilities */ | 267 | /* first calculate all choice values' visibilities */ |
268 | flags = sym->flags; | ||
267 | prop = sym_get_choice_prop(sym); | 269 | prop = sym_get_choice_prop(sym); |
268 | expr_list_for_each_sym(prop->expr, e, def_sym) | 270 | expr_list_for_each_sym(prop->expr, e, def_sym) { |
269 | sym_calc_visibility(def_sym); | 271 | sym_calc_visibility(def_sym); |
272 | if (def_sym->visible != no) | ||
273 | flags &= def_sym->flags; | ||
274 | } | ||
275 | |||
276 | sym->flags &= flags | ~SYMBOL_DEF_USER; | ||
270 | 277 | ||
271 | /* is the user choice visible? */ | 278 | /* is the user choice visible? */ |
272 | def_sym = sym->def[S_DEF_USER].val; | 279 | def_sym = sym->def[S_DEF_USER].val; |