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:
commit
2b17b4382c
@ -344,10 +344,8 @@ int conf_read_simple(const char *name, int def)
|
||||
|
||||
int conf_read(const char *name)
|
||||
{
|
||||
struct symbol *sym, *choice_sym;
|
||||
struct property *prop;
|
||||
struct expr *e;
|
||||
int i, flags;
|
||||
struct symbol *sym;
|
||||
int i;
|
||||
|
||||
sym_set_change_count(0);
|
||||
|
||||
@ -357,7 +355,7 @@ int conf_read(const char *name)
|
||||
for_all_symbols(i, sym) {
|
||||
sym_calc_value(sym);
|
||||
if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
|
||||
goto sym_ok;
|
||||
continue;
|
||||
if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
|
||||
/* check that calculated value agrees with saved value */
|
||||
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))
|
||||
break;
|
||||
if (!sym_is_choice(sym))
|
||||
goto sym_ok;
|
||||
continue;
|
||||
/* fall through */
|
||||
default:
|
||||
if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
|
||||
goto sym_ok;
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
} else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
|
||||
/* no previous value and not saved */
|
||||
goto sym_ok;
|
||||
continue;
|
||||
conf_unsaved++;
|
||||
/* 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) {
|
||||
|
15
scripts/kconfig/merge_config.sh
Normal file → Executable file
15
scripts/kconfig/merge_config.sh
Normal file → Executable file
@ -31,10 +31,12 @@ usage() {
|
||||
echo " -h display this help text"
|
||||
echo " -m only merge the fragments, do not execute the make command"
|
||||
echo " -n use allnoconfig instead of alldefconfig"
|
||||
echo " -r list redundant entries when merging fragments"
|
||||
}
|
||||
|
||||
MAKE=true
|
||||
ALLTARGET=alldefconfig
|
||||
WARNREDUN=false
|
||||
|
||||
while true; do
|
||||
case $1 in
|
||||
@ -52,18 +54,27 @@ while true; do
|
||||
usage
|
||||
exit
|
||||
;;
|
||||
"-r")
|
||||
WARNREDUN=true
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
INITFILE=$1
|
||||
shift;
|
||||
|
||||
MERGE_LIST=$*
|
||||
SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
|
||||
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
|
||||
|
||||
echo "Using $INITFILE as base"
|
||||
cat $INITFILE > $TMP_FILE
|
||||
|
||||
# Merge files, printing warnings on overrided values
|
||||
for MERGE_FILE in $MERGE_LIST ; do
|
||||
echo "Merging $MERGE_FILE"
|
||||
@ -79,6 +90,8 @@ for MERGE_FILE in $MERGE_LIST ; do
|
||||
echo Previous value: $PREV_VAL
|
||||
echo New value: $NEW_VAL
|
||||
echo
|
||||
elif [ "$WARNREDUN" = "true" ]; then
|
||||
echo Value of $CFG is redundant by fragment $MERGE_FILE:
|
||||
fi
|
||||
sed -i "/$CFG[ =]/d" $TMP_FILE
|
||||
fi
|
||||
|
@ -262,11 +262,18 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
|
||||
struct symbol *def_sym;
|
||||
struct property *prop;
|
||||
struct expr *e;
|
||||
int flags;
|
||||
|
||||
/* first calculate all choice values' visibilities */
|
||||
flags = sym->flags;
|
||||
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);
|
||||
if (def_sym->visible != no)
|
||||
flags &= def_sym->flags;
|
||||
}
|
||||
|
||||
sym->flags &= flags | ~SYMBOL_DEF_USER;
|
||||
|
||||
/* is the user choice visible? */
|
||||
def_sym = sym->def[S_DEF_USER].val;
|
||||
|
Loading…
Reference in New Issue
Block a user