mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
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:
commit
287b901dca
7 changed files with 133 additions and 14 deletions
|
@ -50,9 +50,8 @@ localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||||
|
|
||||||
# Create new linux.pot file
|
# Create new linux.pot file
|
||||||
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
|
# 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
|
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
|
||||||
$(Q)echo " GEN config"
|
$(Q)echo " GEN config.pot"
|
||||||
$(Q)xgettext --default-domain=linux \
|
$(Q)xgettext --default-domain=linux \
|
||||||
--add-comments --keyword=_ --keyword=N_ \
|
--add-comments --keyword=_ --keyword=N_ \
|
||||||
--from-code=UTF-8 \
|
--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 \
|
$(Q)(for i in `ls $(srctree)/arch/*/Kconfig \
|
||||||
$(srctree)/arch/*/um/Kconfig`; \
|
$(srctree)/arch/*/um/Kconfig`; \
|
||||||
do \
|
do \
|
||||||
echo " GEN $$i"; \
|
echo " GEN $$i"; \
|
||||||
$(obj)/kxgettext $$i \
|
$(obj)/kxgettext $$i \
|
||||||
>> $(obj)/config.pot; \
|
>> $(obj)/config.pot; \
|
||||||
done )
|
done )
|
||||||
|
$(Q)echo " GEN linux.pot"
|
||||||
$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
|
$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
|
||||||
--output $(obj)/linux.pot
|
--output $(obj)/linux.pot
|
||||||
$(Q)rm -f $(obj)/config.pot
|
$(Q)rm -f $(obj)/config.pot
|
||||||
|
|
|
@ -464,7 +464,7 @@ kconfig_print_comment(FILE *fp, const char *value, void *arg)
|
||||||
fprintf(fp, "#");
|
fprintf(fp, "#");
|
||||||
if (l) {
|
if (l) {
|
||||||
fprintf(fp, " ");
|
fprintf(fp, " ");
|
||||||
fwrite(p, l, 1, fp);
|
xfwrite(p, l, 1, fp);
|
||||||
p += l;
|
p += l;
|
||||||
}
|
}
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
|
@ -537,7 +537,7 @@ header_print_comment(FILE *fp, const char *value, void *arg)
|
||||||
fprintf(fp, " *");
|
fprintf(fp, " *");
|
||||||
if (l) {
|
if (l) {
|
||||||
fprintf(fp, " ");
|
fprintf(fp, " ");
|
||||||
fwrite(p, l, 1, fp);
|
xfwrite(p, l, 1, fp);
|
||||||
p += l;
|
p += l;
|
||||||
}
|
}
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#include <stdbool.h>
|
#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),
|
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_CLOSE, intro_text);
|
GTK_BUTTONS_CLOSE, "%s", intro_text);
|
||||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
GTK_OBJECT(dialog));
|
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),
|
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_CLOSE, about_text);
|
GTK_BUTTONS_CLOSE, "%s", about_text);
|
||||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
GTK_OBJECT(dialog));
|
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),
|
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_CLOSE, license_text);
|
GTK_BUTTONS_CLOSE, "%s", license_text);
|
||||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
GTK_OBJECT(dialog));
|
GTK_OBJECT(dialog));
|
||||||
|
@ -830,7 +830,7 @@ static void renderer_edited(GtkCellRendererText * cell,
|
||||||
static void change_sym_value(struct menu *menu, gint col)
|
static void change_sym_value(struct menu *menu, gint col)
|
||||||
{
|
{
|
||||||
struct symbol *sym = menu->sym;
|
struct symbol *sym = menu->sym;
|
||||||
tristate oldval, newval;
|
tristate newval;
|
||||||
|
|
||||||
if (!sym)
|
if (!sym)
|
||||||
return;
|
return;
|
||||||
|
@ -847,7 +847,6 @@ static void change_sym_value(struct menu *menu, gint col)
|
||||||
switch (sym_get_type(sym)) {
|
switch (sym_get_type(sym)) {
|
||||||
case S_BOOLEAN:
|
case S_BOOLEAN:
|
||||||
case S_TRISTATE:
|
case S_TRISTATE:
|
||||||
oldval = sym_get_tristate_value(sym);
|
|
||||||
if (!sym_tristate_within_range(sym, newval))
|
if (!sym_tristate_within_range(sym, newval))
|
||||||
newval = yes;
|
newval = yes;
|
||||||
sym_set_tristate_value(sym, newval);
|
sym_set_tristate_value(sym, newval);
|
||||||
|
@ -1278,7 +1277,6 @@ static void update_tree(struct menu *src, GtkTreeIter * dst)
|
||||||
gboolean valid;
|
gboolean valid;
|
||||||
GtkTreeIter *sibling;
|
GtkTreeIter *sibling;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct property *prop;
|
|
||||||
struct menu *menu1, *menu2;
|
struct menu *menu1, *menu2;
|
||||||
|
|
||||||
if (src == &rootmenu)
|
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);
|
valid = gtk_tree_model_iter_children(model2, child2, dst);
|
||||||
for (child1 = src->list; child1; child1 = child1->next) {
|
for (child1 = src->list; child1; child1 = child1->next) {
|
||||||
|
|
||||||
prop = child1->prompt;
|
|
||||||
sym = child1->sym;
|
sym = child1->sym;
|
||||||
|
|
||||||
reparse:
|
reparse:
|
||||||
|
|
|
@ -90,8 +90,10 @@ struct conf_printer {
|
||||||
/* confdata.c and expr.c */
|
/* confdata.c and expr.c */
|
||||||
static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
||||||
{
|
{
|
||||||
if (fwrite(str, len, count, out) < count)
|
assert(len != 0);
|
||||||
fprintf(stderr, "\nError in writing or end of file.\n");
|
|
||||||
|
if (fwrite(str, len, count, out) != count)
|
||||||
|
fprintf(stderr, "Error in writing or end of file.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* menu.c */
|
/* menu.c */
|
||||||
|
|
|
@ -830,6 +830,8 @@ static int handle_exit(void)
|
||||||
fprintf(stderr, _("\n\n"
|
fprintf(stderr, _("\n\n"
|
||||||
"Your configuration changes were NOT saved."
|
"Your configuration changes were NOT saved."
|
||||||
"\n\n"));
|
"\n\n"));
|
||||||
|
if (res != KEY_ESC)
|
||||||
|
res = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|
117
scripts/kconfig/merge_config.sh
Normal file
117
scripts/kconfig/merge_config.sh
Normal file
|
@ -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
|
Loading…
Reference in a new issue