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:
Коммит
2b17b4382c
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче