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
This commit is contained in:
Linus Torvalds 2012-03-30 18:13:17 -07:00
Родитель f558c27238 9875c42d69
Коммит 2b17b4382c
3 изменённых файлов: 28 добавлений и 22 удалений

Просмотреть файл

@ -344,10 +344,8 @@ setsym:
int conf_read(const char *name) int conf_read(const char *name)
{ {
struct symbol *sym, *choice_sym; struct symbol *sym;
struct property *prop; int i;
struct expr *e;
int i, flags;
sym_set_change_count(0); sym_set_change_count(0);
@ -357,7 +355,7 @@ int conf_read(const char *name)
for_all_symbols(i, sym) { for_all_symbols(i, sym) {
sym_calc_value(sym); sym_calc_value(sym);
if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
goto sym_ok; continue;
if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
/* check that calculated value agrees with saved value */ /* check that calculated value agrees with saved value */
switch (sym->type) { switch (sym->type) {
@ -366,30 +364,18 @@ int conf_read(const char *name)
if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
break; break;
if (!sym_is_choice(sym)) if (!sym_is_choice(sym))
goto sym_ok; continue;
/* fall through */ /* fall through */
default: default:
if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
goto sym_ok; continue;
break; break;
} }
} else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
/* no previous value and not saved */ /* no previous value and not saved */
goto sym_ok; continue;
conf_unsaved++; conf_unsaved++;
/* maybe print value in verbose mode... */ /* maybe print value in verbose mode... */
sym_ok:
if (!sym_is_choice(sym))
continue;
/* The choice symbol only has a set value (and thus is not new)
* if all its visible childs have values.
*/
prop = sym_get_choice_prop(sym);
flags = sym->flags;
expr_list_for_each_sym(prop->expr, e, choice_sym)
if (choice_sym->visible != no)
flags &= choice_sym->flags;
sym->flags &= flags | ~SYMBOL_DEF_USER;
} }
for_all_symbols(i, sym) { for_all_symbols(i, sym) {

15
scripts/kconfig/merge_config.sh Normal file → Executable file
Просмотреть файл

@ -31,10 +31,12 @@ usage() {
echo " -h display this help text" echo " -h display this help text"
echo " -m only merge the fragments, do not execute the make command" echo " -m only merge the fragments, do not execute the make command"
echo " -n use allnoconfig instead of alldefconfig" echo " -n use allnoconfig instead of alldefconfig"
echo " -r list redundant entries when merging fragments"
} }
MAKE=true MAKE=true
ALLTARGET=alldefconfig ALLTARGET=alldefconfig
WARNREDUN=false
while true; do while true; do
case $1 in case $1 in
@ -52,18 +54,27 @@ while true; do
usage usage
exit exit
;; ;;
"-r")
WARNREDUN=true
shift
continue
;;
*) *)
break break
;; ;;
esac esac
done done
INITFILE=$1
shift;
MERGE_LIST=$* MERGE_LIST=$*
SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p" SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
echo "Using $INITFILE as base"
cat $INITFILE > $TMP_FILE
# Merge files, printing warnings on overrided values # Merge files, printing warnings on overrided values
for MERGE_FILE in $MERGE_LIST ; do for MERGE_FILE in $MERGE_LIST ; do
echo "Merging $MERGE_FILE" echo "Merging $MERGE_FILE"
@ -79,6 +90,8 @@ for MERGE_FILE in $MERGE_LIST ; do
echo Previous value: $PREV_VAL echo Previous value: $PREV_VAL
echo New value: $NEW_VAL echo New value: $NEW_VAL
echo echo
elif [ "$WARNREDUN" = "true" ]; then
echo Value of $CFG is redundant by fragment $MERGE_FILE:
fi fi
sed -i "/$CFG[ =]/d" $TMP_FILE sed -i "/$CFG[ =]/d" $TMP_FILE
fi fi

Просмотреть файл

@ -262,11 +262,18 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
struct symbol *def_sym; struct symbol *def_sym;
struct property *prop; struct property *prop;
struct expr *e; struct expr *e;
int flags;
/* first calculate all choice values' visibilities */ /* first calculate all choice values' visibilities */
flags = sym->flags;
prop = sym_get_choice_prop(sym); prop = sym_get_choice_prop(sym);
expr_list_for_each_sym(prop->expr, e, def_sym) expr_list_for_each_sym(prop->expr, e, def_sym) {
sym_calc_visibility(def_sym); sym_calc_visibility(def_sym);
if (def_sym->visible != no)
flags &= def_sym->flags;
}
sym->flags &= flags | ~SYMBOL_DEF_USER;
/* is the user choice visible? */ /* is the user choice visible? */
def_sym = sym->def[S_DEF_USER].val; def_sym = sym->def[S_DEF_USER].val;