package/config: rebase from upstream (2.6.23.14)

From Bernhards tree (2737cfdd)
This commit is contained in:
Peter Korsgaard 2008-06-19 08:11:43 +00:00
parent 2c2796719a
commit 1b6f2e0f4c
16 changed files with 121 additions and 90 deletions

View File

@ -22,24 +22,25 @@ oldconfig: $(obj)/conf
silentoldconfig: $(obj)/conf silentoldconfig: $(obj)/conf
$< -s arch/$(ARCH)/Kconfig $< -s arch/$(ARCH)/Kconfig
# Create new linux.po 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 update-po-config: $(obj)/kxgettext
xgettext --default-domain=linux \ xgettext --default-domain=linux \
--add-comments --keyword=_ --keyword=N_ \ --add-comments --keyword=_ --keyword=N_ \
--from-code=UTF-8 \
--files-from=scripts/kconfig/POTFILES.in \ --files-from=scripts/kconfig/POTFILES.in \
--output scripts/kconfig/config.pot --output $(obj)/config.pot
$(Q)ln -fs Kconfig_i386 arch/um/Kconfig_arch $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
$(Q)for i in `ls arch/`; \ $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch
(for i in `ls arch/`; \
do \ do \
scripts/kconfig/kxgettext arch/$$i/Kconfig \ $(obj)/kxgettext arch/$$i/Kconfig; \
| msguniq -o scripts/kconfig/linux_$${i}.pot; \ done ) >> $(obj)/config.pot
done msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
$(Q)msgcat scripts/kconfig/config.pot \ --output $(obj)/linux.pot
`find scripts/kconfig/ -type f -name linux_*.pot` \ $(Q)rm -f arch/um/Kconfig.arch
--output scripts/kconfig/linux_raw.pot $(Q)rm -f $(obj)/config.pot
$(Q)msguniq --sort-by-file scripts/kconfig/linux_raw.pot \
--output scripts/kconfig/linux.pot
$(Q)rm -f arch/um/Kconfig_arch
$(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig

View File

@ -1,15 +1,16 @@
This is a copy of the kconfig code in the kernel (currently 2.6.22.7) tweaked to This is a copy of the kconfig code in the kernel (currently 2.6.23.14) tweaked
suit Buildroot. to suit Buildroot.
To update: To update:
cp -r /usr/src/linux/scripts/kconfig package/config.new cp -r /usr/src/linux/scripts/kconfig package/config.new
cd package/config.new cd package/config.new
cp /usr/src/linux/Documentation/kbuild/kconfig-language.txt . cp /usr/src/linux/Documentation/kbuild/kconfig-language.txt .
mv Makefile Makefile.kconfig
patch -p1 < ../config/kconfig-to-buildroot2.patch patch -p1 < ../config/kconfig-to-buildroot2.patch
mv Makefile Makefile.kconfig
cp ../config/README.buildroot2 . cp ../config/README.buildroot2 .
cp ../config/foo.h . cp ../config/foo.h .
cp ../config/Makefile . cp ../config/Makefile .
cp ../config/kconfig-to-buildroot2.patch .
cd .. cd ..
rm -rf config rm -rf config
mv config.new config mv config.new config

View File

@ -37,6 +37,14 @@ static struct menu *rootEntry;
static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n"); static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
static const char *get_help(struct menu *menu)
{
if (menu_has_help(menu))
return menu_get_help(menu);
else
return nohelp_text;
}
static void strip(char *str) static void strip(char *str)
{ {
char *p = str; char *p = str;
@ -172,7 +180,7 @@ static int conf_askvalue(struct symbol *sym, const char *def)
int conf_string(struct menu *menu) int conf_string(struct menu *menu)
{ {
struct symbol *sym = menu->sym; struct symbol *sym = menu->sym;
const char *def, *help; const char *def;
while (1) { while (1) {
printf("%*s%s ", indent - 1, "", menu->prompt->text); printf("%*s%s ", indent - 1, "", menu->prompt->text);
@ -188,10 +196,7 @@ int conf_string(struct menu *menu)
case '?': case '?':
/* print help */ /* print help */
if (line[1] == '\n') { if (line[1] == '\n') {
help = nohelp_text; printf("\n%s\n", get_help(menu));
if (menu->sym->help)
help = menu->sym->help;
printf("\n%s\n", menu->sym->help);
def = NULL; def = NULL;
break; break;
} }
@ -209,7 +214,6 @@ static int conf_sym(struct menu *menu)
struct symbol *sym = menu->sym; struct symbol *sym = menu->sym;
int type; int type;
tristate oldval, newval; tristate oldval, newval;
const char *help;
while (1) { while (1) {
printf("%*s%s ", indent - 1, "", menu->prompt->text); printf("%*s%s ", indent - 1, "", menu->prompt->text);
@ -235,7 +239,7 @@ static int conf_sym(struct menu *menu)
printf("/m"); printf("/m");
if (oldval != yes && sym_tristate_within_range(sym, yes)) if (oldval != yes && sym_tristate_within_range(sym, yes))
printf("/y"); printf("/y");
if (sym->help) if (menu_has_help(menu))
printf("/?"); printf("/?");
printf("] "); printf("] ");
if (!conf_askvalue(sym, sym_get_string_value(sym))) if (!conf_askvalue(sym, sym_get_string_value(sym)))
@ -272,10 +276,7 @@ static int conf_sym(struct menu *menu)
if (sym_set_tristate_value(sym, newval)) if (sym_set_tristate_value(sym, newval))
return 0; return 0;
help: help:
help = nohelp_text; printf("\n%s\n", get_help(menu));
if (sym->help)
help = sym->help;
printf("\n%s\n", help);
} }
} }
@ -345,7 +346,7 @@ static int conf_choice(struct menu *menu)
goto conf_childs; goto conf_childs;
} }
printf("[1-%d", cnt); printf("[1-%d", cnt);
if (sym->help) if (menu_has_help(menu))
printf("?"); printf("?");
printf("]: "); printf("]: ");
switch (input_mode) { switch (input_mode) {
@ -362,8 +363,7 @@ static int conf_choice(struct menu *menu)
fgets(line, 128, stdin); fgets(line, 128, stdin);
strip(line); strip(line);
if (line[0] == '?') { if (line[0] == '?') {
printf("\n%s\n", menu->sym->help ? printf("\n%s\n", get_help(menu));
menu->sym->help : nohelp_text);
continue; continue;
} }
if (!line[0]) if (!line[0])
@ -394,8 +394,7 @@ static int conf_choice(struct menu *menu)
if (!child) if (!child)
continue; continue;
if (line[strlen(line) - 1] == '?') { if (line[strlen(line) - 1] == '?') {
printf("\n%s\n", child->sym->help ? printf("\n%s\n", get_help(child));
child->sym->help : nohelp_text);
continue; continue;
} }
sym_set_choice_value(sym, child->sym); sym_set_choice_value(sym, child->sym);

View File

@ -338,21 +338,11 @@ int conf_read(const char *name)
conf_unsaved++; conf_unsaved++;
/* maybe print value in verbose mode... */ /* maybe print value in verbose mode... */
sym_ok: sym_ok:
if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
if (sym->visible == no)
sym->flags &= ~SYMBOL_DEF_USER;
switch (sym->type) {
case S_STRING:
case S_INT:
case S_HEX:
if (!sym_string_within_range(sym, sym->def[S_DEF_USER].val))
sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER);
default:
break;
}
}
if (!sym_is_choice(sym)) if (!sym_is_choice(sym))
continue; 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); prop = sym_get_choice_prop(sym);
flags = sym->flags; flags = sym->flags;
for (e = prop->expr; e; e = e->left.expr) for (e = prop->expr; e; e = e->left.expr)
@ -361,6 +351,31 @@ int conf_read(const char *name)
sym->flags &= flags | ~SYMBOL_DEF_USER; sym->flags &= flags | ~SYMBOL_DEF_USER;
} }
for_all_symbols(i, sym) {
if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
/* Reset values of generates values, so they'll appear
* as new, if they should become visible, but that
* doesn't quite work if the Kconfig and the saved
* configuration disagree.
*/
if (sym->visible == no && !conf_unsaved)
sym->flags &= ~SYMBOL_DEF_USER;
switch (sym->type) {
case S_STRING:
case S_INT:
case S_HEX:
/* Reset a string value if it's out of range */
if (sym_string_within_range(sym, sym->def[S_DEF_USER].val))
break;
sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER);
conf_unsaved++;
break;
default:
break;
}
}
}
sym_add_change_count(conf_warnings || conf_unsaved); sym_add_change_count(conf_warnings || conf_unsaved);
return 0; return 0;

View File

@ -71,14 +71,12 @@ enum {
struct symbol { struct symbol {
struct symbol *next; struct symbol *next;
char *name; char *name;
char *help;
enum symbol_type type; enum symbol_type type;
struct symbol_value curr; struct symbol_value curr;
struct symbol_value def[4]; struct symbol_value def[4];
tristate visible; tristate visible;
int flags; int flags;
struct property *prop; struct property *prop;
struct expr *dep, *dep2;
struct expr_value rev_dep; struct expr_value rev_dep;
}; };
@ -139,7 +137,7 @@ struct menu {
struct property *prompt; struct property *prompt;
struct expr *dep; struct expr *dep;
unsigned int flags; unsigned int flags;
/*char *help; */ char *help;
struct file *file; struct file *file;
int lineno; int lineno;
void *data; void *data;

View File

@ -38,9 +38,6 @@ static gboolean show_all = FALSE;
static gboolean show_debug = FALSE; static gboolean show_debug = FALSE;
static gboolean resizeable = FALSE; static gboolean resizeable = FALSE;
static char nohelp_text[] =
N_("Sorry, no help available for this option yet.\n");
GtkWidget *main_wnd = NULL; GtkWidget *main_wnd = NULL;
GtkWidget *tree1_w = NULL; // left frame GtkWidget *tree1_w = NULL; // left frame
GtkWidget *tree2_w = NULL; // right frame GtkWidget *tree2_w = NULL; // right frame
@ -462,12 +459,9 @@ static void text_insert_help(struct menu *menu)
GtkTextIter start, end; GtkTextIter start, end;
const char *prompt = menu_get_prompt(menu); const char *prompt = menu_get_prompt(menu);
gchar *name; gchar *name;
const char *help = _(nohelp_text); const char *help;
if (!menu->sym) help = _(menu_get_help(menu));
help = "";
else if (menu->sym->help)
help = _(menu->sym->help);
if (menu->sym && menu->sym->name) if (menu->sym && menu->sym->name)
name = g_strdup_printf(_(menu->sym->name)); name = g_strdup_printf(_(menu->sym->name));

View File

@ -98,6 +98,15 @@ applicable everywhere (see syntax).
times, the limit is set to the largest selection. times, the limit is set to the largest selection.
Reverse dependencies can only be used with boolean or tristate Reverse dependencies can only be used with boolean or tristate
symbols. symbols.
Note:
select is evil.... select will by brute force set a symbol
equal to 'y' without visiting the dependencies. So abusing
select you are able to select a symbol FOO even if FOO depends
on BAR that is not set. In general use select only for
non-visible symbols (no promts anywhere) and for symbols with
no dependencies. That will limit the usefulness but on the
other hand avoid the illegal configurations all over. kconfig
should one day warn about such things.
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>] - numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
This allows to limit the range of possible input values for int This allows to limit the range of possible input values for int

View File

@ -501,15 +501,6 @@ diff -rdup kernel-config/expr.h config/expr.h
}; };
struct symbol { struct symbol {
@@ -139,7 +139,7 @@ struct menu {
struct property *prompt;
struct expr *dep;
unsigned int flags;
- //char *help;
+ /*char *help; */
struct file *file;
int lineno;
void *data;
diff -rdup kernel-config/gconf.c config/gconf.c diff -rdup kernel-config/gconf.c config/gconf.c
--- kernel-config/gconf.c 2007-09-22 00:38:23.000000000 +0200 --- kernel-config/gconf.c 2007-09-22 00:38:23.000000000 +0200
+++ config/gconf.c 2007-09-23 15:33:26.000000000 +0200 +++ config/gconf.c 2007-09-23 15:33:26.000000000 +0200

View File

@ -170,8 +170,8 @@ void menu_build_message_list(struct menu *menu)
menu->file == NULL ? "Root Menu" : menu->file->name, menu->file == NULL ? "Root Menu" : menu->file->name,
menu->lineno); menu->lineno);
if (menu->sym != NULL && menu->sym->help != NULL) if (menu->sym != NULL && menu_has_help(menu))
message__add(menu->sym->help, menu->sym->name, message__add(menu_get_help(menu), menu->sym->name,
menu->file == NULL ? "Root Menu" : menu->file->name, menu->file == NULL ? "Root Menu" : menu->file->name,
menu->lineno); menu->lineno);
@ -212,6 +212,8 @@ void menu__xgettext(void)
struct message *m = message__list; struct message *m = message__list;
while (m != NULL) { while (m != NULL) {
/* skip empty lines ("") */
if (strlen(m->msg) > sizeof("\"\""))
message__print_gettext_msgid_msgstr(m); message__print_gettext_msgid_msgstr(m);
m = m->next; m = m->next;
} }

View File

@ -15,6 +15,8 @@ P(menu_is_visible,bool,(struct menu *menu));
P(menu_get_prompt,const char *,(struct menu *menu)); P(menu_get_prompt,const char *,(struct menu *menu));
P(menu_get_root_menu,struct menu *,(struct menu *menu)); P(menu_get_root_menu,struct menu *,(struct menu *menu));
P(menu_get_parent_menu,struct menu *,(struct menu *menu)); P(menu_get_parent_menu,struct menu *,(struct menu *menu));
P(menu_has_help,bool,(struct menu *menu));
P(menu_get_help,const char *,(struct menu *menu));
/* symbol.c */ /* symbol.c */
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);

View File

@ -51,7 +51,7 @@ usage() {
printf "Usage: $0 [-check compiler options|-header|-library]\n" printf "Usage: $0 [-check compiler options|-header|-library]\n"
} }
if [ $# == 0 ]; then if [ $# -eq 0 ]; then
usage usage
exit 1 exit 1
fi fi

View File

@ -417,11 +417,13 @@ static void search_conf(void)
{ {
struct symbol **sym_arr; struct symbol **sym_arr;
struct gstr res; struct gstr res;
char *dialog_input;
int dres; int dres;
again: again:
dialog_clear(); dialog_clear();
dres = dialog_inputbox(_("Search Configuration Parameter"), dres = dialog_inputbox(_("Search Configuration Parameter"),
_("Enter CONFIG_ (sub)string to search for (omit CONFIG_)"), _("Enter CONFIG_ (sub)string to search for "
"(with or without \"CONFIG\")"),
10, 75, ""); 10, 75, "");
switch (dres) { switch (dres) {
case 0: case 0:
@ -433,7 +435,12 @@ again:
return; return;
} }
sym_arr = sym_re_search(dialog_input_result); /* strip CONFIG_ if necessary */
dialog_input = dialog_input_result;
if (strncasecmp(dialog_input_result, "CONFIG_", 7) == 0)
dialog_input += 7;
sym_arr = sym_re_search(dialog_input);
res = get_relations_str(sym_arr); res = get_relations_str(sym_arr);
free(sym_arr); free(sym_arr);
show_textbox(_("Search Results"), str_get(&res), 0, 0); show_textbox(_("Search Results"), str_get(&res), 0, 0);
@ -716,11 +723,11 @@ static void show_help(struct menu *menu)
struct gstr help = str_new(); struct gstr help = str_new();
struct symbol *sym = menu->sym; struct symbol *sym = menu->sym;
if (sym->help) if (menu_has_help(menu))
{ {
if (sym->name) { if (sym->name) {
str_printf(&help, "CONFIG_%s:\n\n", sym->name); str_printf(&help, "CONFIG_%s:\n\n", sym->name);
str_append(&help, _(sym->help)); str_append(&help, _(menu_get_help(menu)));
str_append(&help, "\n"); str_append(&help, "\n");
} }
} else { } else {

View File

@ -417,3 +417,15 @@ struct menu *menu_get_parent_menu(struct menu *menu)
return menu; return menu;
} }
bool menu_has_help(struct menu *menu)
{
return menu->help != NULL;
}
const char *menu_get_help(struct menu *menu)
{
if (menu->help)
return menu->help;
else
return "";
}

View File

@ -1041,7 +1041,7 @@ void ConfigInfoView::menuInfo(void)
if (showDebug()) if (showDebug())
debug = debug_info(sym); debug = debug_info(sym);
help = print_filter(_(sym->help)); help = print_filter(_(menu_get_help(menu)));
} else if (menu->prompt) { } else if (menu->prompt) {
head += "<big><b>"; head += "<big><b>";
head += print_filter(_(menu->prompt->text)); head += print_filter(_(menu->prompt->text));

View File

@ -1722,7 +1722,7 @@ yyreduce:
case 83: case 83:
{ {
current_entry->sym->help = (yyvsp[0].string); current_entry->help = (yyvsp[0].string);
;} ;}
break; break;
@ -2280,11 +2280,11 @@ void print_symbol(FILE *out, struct menu *menu)
break; break;
} }
} }
if (sym->help) { if (menu->help) {
int len = strlen(sym->help); int len = strlen(menu->help);
while (sym->help[--len] == '\n') while (menu->help[--len] == '\n')
sym->help[len] = 0; menu->help[len] = 0;
fprintf(out, " help\n%s\n", sym->help); fprintf(out, " help\n%s\n", menu->help);
} }
fputc('\n', out); fputc('\n', out);
} }

View File

@ -402,7 +402,7 @@ help_start: T_HELP T_EOL
help: help_start T_HELPTEXT help: help_start T_HELPTEXT
{ {
current_entry->sym->help = $2; current_entry->help = $2;
}; };
/* depends option */ /* depends option */
@ -649,11 +649,11 @@ void print_symbol(FILE *out, struct menu *menu)
break; break;
} }
} }
if (sym->help) { if (menu->help) {
int len = strlen(sym->help); int len = strlen(menu->help);
while (sym->help[--len] == '\n') while (menu->help[--len] == '\n')
sym->help[len] = 0; menu->help[len] = 0;
fprintf(out, " help\n%s\n", sym->help); fprintf(out, " help\n%s\n", menu->help);
} }
fputc('\n', out); fputc('\n', out);
} }