Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
* 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: menuconfig: fix a regression when canceling the prompt dialog at exit kbuild: Fix compiler warning with assertion when calling 'fwrite' Improve update-po-config output menuconfig: let make not report error when not save configuration merge_config.sh: fix bug in final check merge_config.sh: whitespace cleanup merge_config.sh: use signal names compatible with dash and bash kconfig: add merge_config.sh script kconfig: use xfwrite wrapper function to silence warnings kconfig: fix set but not used warnings kconfig: fix warnings by specifing format arguments
This commit is contained in:
Коммит
287b901dca
|
@ -50,9 +50,8 @@ localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
|||
|
||||
# Create new linux.pot file
|
||||
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
|
||||
# The symlink is used to repair a deficiency in arch/um
|
||||
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
|
||||
$(Q)echo " GEN config"
|
||||
$(Q)echo " GEN config.pot"
|
||||
$(Q)xgettext --default-domain=linux \
|
||||
--add-comments --keyword=_ --keyword=N_ \
|
||||
--from-code=UTF-8 \
|
||||
|
@ -63,10 +62,11 @@ update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
|
|||
$(Q)(for i in `ls $(srctree)/arch/*/Kconfig \
|
||||
$(srctree)/arch/*/um/Kconfig`; \
|
||||
do \
|
||||
echo " GEN $$i"; \
|
||||
echo " GEN $$i"; \
|
||||
$(obj)/kxgettext $$i \
|
||||
>> $(obj)/config.pot; \
|
||||
done )
|
||||
$(Q)echo " GEN linux.pot"
|
||||
$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
|
||||
--output $(obj)/linux.pot
|
||||
$(Q)rm -f $(obj)/config.pot
|
||||
|
|
|
@ -464,7 +464,7 @@ kconfig_print_comment(FILE *fp, const char *value, void *arg)
|
|||
fprintf(fp, "#");
|
||||
if (l) {
|
||||
fprintf(fp, " ");
|
||||
fwrite(p, l, 1, fp);
|
||||
xfwrite(p, l, 1, fp);
|
||||
p += l;
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
|
@ -537,7 +537,7 @@ header_print_comment(FILE *fp, const char *value, void *arg)
|
|||
fprintf(fp, " *");
|
||||
if (l) {
|
||||
fprintf(fp, " ");
|
||||
fwrite(p, l, 1, fp);
|
||||
xfwrite(p, l, 1, fp);
|
||||
p += l;
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#ifndef __cplusplus
|
||||
#include <stdbool.h>
|
||||
|
|
|
@ -683,7 +683,7 @@ void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
|
|||
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_CLOSE, intro_text);
|
||||
GTK_BUTTONS_CLOSE, "%s", intro_text);
|
||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||
G_CALLBACK(gtk_widget_destroy),
|
||||
GTK_OBJECT(dialog));
|
||||
|
@ -701,7 +701,7 @@ void on_about1_activate(GtkMenuItem * menuitem, gpointer user_data)
|
|||
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_CLOSE, about_text);
|
||||
GTK_BUTTONS_CLOSE, "%s", about_text);
|
||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||
G_CALLBACK(gtk_widget_destroy),
|
||||
GTK_OBJECT(dialog));
|
||||
|
@ -720,7 +720,7 @@ void on_license1_activate(GtkMenuItem * menuitem, gpointer user_data)
|
|||
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_CLOSE, license_text);
|
||||
GTK_BUTTONS_CLOSE, "%s", license_text);
|
||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||
G_CALLBACK(gtk_widget_destroy),
|
||||
GTK_OBJECT(dialog));
|
||||
|
@ -830,7 +830,7 @@ static void renderer_edited(GtkCellRendererText * cell,
|
|||
static void change_sym_value(struct menu *menu, gint col)
|
||||
{
|
||||
struct symbol *sym = menu->sym;
|
||||
tristate oldval, newval;
|
||||
tristate newval;
|
||||
|
||||
if (!sym)
|
||||
return;
|
||||
|
@ -847,7 +847,6 @@ static void change_sym_value(struct menu *menu, gint col)
|
|||
switch (sym_get_type(sym)) {
|
||||
case S_BOOLEAN:
|
||||
case S_TRISTATE:
|
||||
oldval = sym_get_tristate_value(sym);
|
||||
if (!sym_tristate_within_range(sym, newval))
|
||||
newval = yes;
|
||||
sym_set_tristate_value(sym, newval);
|
||||
|
@ -1278,7 +1277,6 @@ static void update_tree(struct menu *src, GtkTreeIter * dst)
|
|||
gboolean valid;
|
||||
GtkTreeIter *sibling;
|
||||
struct symbol *sym;
|
||||
struct property *prop;
|
||||
struct menu *menu1, *menu2;
|
||||
|
||||
if (src == &rootmenu)
|
||||
|
@ -1287,7 +1285,6 @@ static void update_tree(struct menu *src, GtkTreeIter * dst)
|
|||
valid = gtk_tree_model_iter_children(model2, child2, dst);
|
||||
for (child1 = src->list; child1; child1 = child1->next) {
|
||||
|
||||
prop = child1->prompt;
|
||||
sym = child1->sym;
|
||||
|
||||
reparse:
|
||||
|
|
|
@ -90,8 +90,10 @@ struct conf_printer {
|
|||
/* confdata.c and expr.c */
|
||||
static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
||||
{
|
||||
if (fwrite(str, len, count, out) < count)
|
||||
fprintf(stderr, "\nError in writing or end of file.\n");
|
||||
assert(len != 0);
|
||||
|
||||
if (fwrite(str, len, count, out) != count)
|
||||
fprintf(stderr, "Error in writing or end of file.\n");
|
||||
}
|
||||
|
||||
/* menu.c */
|
||||
|
|
|
@ -830,6 +830,8 @@ static int handle_exit(void)
|
|||
fprintf(stderr, _("\n\n"
|
||||
"Your configuration changes were NOT saved."
|
||||
"\n\n"));
|
||||
if (res != KEY_ESC)
|
||||
res = 0;
|
||||
}
|
||||
|
||||
return res;
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
#!/bin/sh
|
||||
# merge_config.sh - Takes a list of config fragment values, and merges
|
||||
# them one by one. Provides warnings on overridden values, and specified
|
||||
# values that did not make it to the resulting .config file (due to missed
|
||||
# dependencies or config symbol removal).
|
||||
#
|
||||
# Portions reused from kconf_check and generate_cfg:
|
||||
# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
|
||||
# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
|
||||
#
|
||||
# Copyright (c) 2009-2010 Wind River Systems, Inc.
|
||||
# Copyright 2011 Linaro
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU General Public License for more details.
|
||||
|
||||
clean_up() {
|
||||
rm -f $TMP_FILE
|
||||
exit
|
||||
}
|
||||
trap clean_up HUP INT TERM
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
|
||||
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"
|
||||
}
|
||||
|
||||
MAKE=true
|
||||
ALLTARGET=alldefconfig
|
||||
|
||||
while true; do
|
||||
case $1 in
|
||||
"-n")
|
||||
ALLTARGET=allnoconfig
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
"-m")
|
||||
MAKE=false
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
"-h")
|
||||
usage
|
||||
exit
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
|
||||
MERGE_LIST=$*
|
||||
SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
|
||||
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
|
||||
|
||||
# Merge files, printing warnings on overrided values
|
||||
for MERGE_FILE in $MERGE_LIST ; do
|
||||
echo "Merging $MERGE_FILE"
|
||||
CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
|
||||
|
||||
for CFG in $CFG_LIST ; do
|
||||
grep -q -w $CFG $TMP_FILE
|
||||
if [ $? -eq 0 ] ; then
|
||||
PREV_VAL=$(grep -w $CFG $TMP_FILE)
|
||||
NEW_VAL=$(grep -w $CFG $MERGE_FILE)
|
||||
if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
|
||||
echo Value of $CFG is redefined by fragment $MERGE_FILE:
|
||||
echo Previous value: $PREV_VAL
|
||||
echo New value: $NEW_VAL
|
||||
echo
|
||||
fi
|
||||
sed -i "/$CFG[ =]/d" $TMP_FILE
|
||||
fi
|
||||
done
|
||||
cat $MERGE_FILE >> $TMP_FILE
|
||||
done
|
||||
|
||||
if [ "$MAKE" = "false" ]; then
|
||||
cp $TMP_FILE .config
|
||||
echo "#"
|
||||
echo "# merged configuration written to .config (needs make)"
|
||||
echo "#"
|
||||
clean_up
|
||||
exit
|
||||
fi
|
||||
|
||||
# Use the merged file as the starting point for:
|
||||
# alldefconfig: Fills in any missing symbols with Kconfig default
|
||||
# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
|
||||
make KCONFIG_ALLCONFIG=$TMP_FILE $ALLTARGET
|
||||
|
||||
|
||||
# Check all specified config values took (might have missed-dependency issues)
|
||||
for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
|
||||
|
||||
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
|
||||
ACTUAL_VAL=$(grep -w -e "$CFG" .config)
|
||||
if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
|
||||
echo "Value requested for $CFG not in final .config"
|
||||
echo "Requested value: $REQUESTED_VAL"
|
||||
echo "Actual value: $ACTUAL_VAL"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
clean_up
|
Загрузка…
Ссылка в новой задаче