diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 21:52:52 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 21:52:52 -0500 |
commit | a84f6aa68e35a911c28e5871c87356dce3607b40 (patch) | |
tree | 4093b13e359d68ba99c39b0f156124265adb6349 /scripts | |
parent | dede6faac448db4251f8996d7dec6afb5a43726a (diff) | |
parent | 93072c3ecafcf188390750cc755185f3150736b9 (diff) |
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:
scripts/kconfig/nconf: add KEY_HOME / KEY_END for dialog_inputbox
scripts/kconfig/nconf: fix editing long strings
scripts/kconfig/nconf: dynamically alloc dialog_input_result
scripts/kconfig/nconf: fix memmove's length arg
scripts/kconfig/nconf: fix typo: unknow => unknown
kconfig: fix set but not used variables
kconfig: handle SIGINT in menuconfig
kconfig: fix __enabled_ macros definition for invisible and un-selected symbols
kconfig: factor code in menu_get_ext_help()
kbuild: Fix help text not displayed in choice option.
kconfig/nconf: nuke unreferenced `nohelp_text'
kconfig/streamline_config.pl: merge local{mod,yes}config
kconfig/streamline_config.pl: use options to determine operating mode
kconfig/streamline_config.pl: directly access LSMOD from the environment
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/kconfig/Makefile | 28 | ||||
-rw-r--r-- | scripts/kconfig/confdata.c | 49 | ||||
-rw-r--r-- | scripts/kconfig/lxdialog/textbox.c | 3 | ||||
-rw-r--r-- | scripts/kconfig/mconf.c | 86 | ||||
-rw-r--r-- | scripts/kconfig/menu.c | 13 | ||||
-rw-r--r-- | scripts/kconfig/nconf.c | 23 | ||||
-rw-r--r-- | scripts/kconfig/nconf.gui.c | 59 | ||||
-rw-r--r-- | scripts/kconfig/nconf.h | 2 | ||||
-rw-r--r-- | scripts/kconfig/streamline_config.pl | 22 |
9 files changed, 173 insertions, 112 deletions
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 82d2eb285b70..ba573fe7c74d 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile | |||
@@ -33,17 +33,9 @@ silentoldconfig: $(obj)/conf | |||
33 | $(Q)mkdir -p include/generated | 33 | $(Q)mkdir -p include/generated |
34 | $< --$@ $(Kconfig) | 34 | $< --$@ $(Kconfig) |
35 | 35 | ||
36 | # if no path is given, then use src directory to find file | 36 | localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf |
37 | ifdef LSMOD | ||
38 | LSMOD_F := $(LSMOD) | ||
39 | ifeq ($(findstring /,$(LSMOD)),) | ||
40 | LSMOD_F := $(objtree)/$(LSMOD) | ||
41 | endif | ||
42 | endif | ||
43 | |||
44 | localmodconfig: $(obj)/streamline_config.pl $(obj)/conf | ||
45 | $(Q)mkdir -p include/generated | 37 | $(Q)mkdir -p include/generated |
46 | $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config | 38 | $(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config |
47 | $(Q)if [ -f .config ]; then \ | 39 | $(Q)if [ -f .config ]; then \ |
48 | cmp -s .tmp.config .config || \ | 40 | cmp -s .tmp.config .config || \ |
49 | (mv -f .config .config.old.1; \ | 41 | (mv -f .config .config.old.1; \ |
@@ -56,22 +48,6 @@ localmodconfig: $(obj)/streamline_config.pl $(obj)/conf | |||
56 | fi | 48 | fi |
57 | $(Q)rm -f .tmp.config | 49 | $(Q)rm -f .tmp.config |
58 | 50 | ||
59 | localyesconfig: $(obj)/streamline_config.pl $(obj)/conf | ||
60 | $(Q)mkdir -p include/generated | ||
61 | $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config | ||
62 | $(Q)sed -i s/=m/=y/ .tmp.config | ||
63 | $(Q)if [ -f .config ]; then \ | ||
64 | cmp -s .tmp.config .config || \ | ||
65 | (mv -f .config .config.old.1; \ | ||
66 | mv -f .tmp.config .config; \ | ||
67 | $(obj)/conf --silentoldconfig $(Kconfig); \ | ||
68 | mv -f .config.old.1 .config.old) \ | ||
69 | else \ | ||
70 | mv -f .tmp.config .config; \ | ||
71 | $(obj)/conf --silentoldconfig $(Kconfig); \ | ||
72 | fi | ||
73 | $(Q)rm -f .tmp.config | ||
74 | |||
75 | # Create new linux.pot file | 51 | # Create new linux.pot file |
76 | # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files | 52 | # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files |
77 | # The symlink is used to repair a deficiency in arch/um | 53 | # The symlink is used to repair a deficiency in arch/um |
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 59b667cae5f3..5a58965d8800 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -503,17 +503,6 @@ header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) | |||
503 | fprintf(fp, "#define %s%s%s 1\n", | 503 | fprintf(fp, "#define %s%s%s 1\n", |
504 | CONFIG_, sym->name, suffix); | 504 | CONFIG_, sym->name, suffix); |
505 | } | 505 | } |
506 | /* | ||
507 | * Generate the __enabled_CONFIG_* and | ||
508 | * __enabled_CONFIG_*_MODULE macros for use by the | ||
509 | * IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is | ||
510 | * generated even for booleans so that the IS_ENABLED() macro | ||
511 | * works. | ||
512 | */ | ||
513 | fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n", | ||
514 | sym->name, (*value == 'y')); | ||
515 | fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n", | ||
516 | sym->name, (*value == 'm')); | ||
517 | break; | 506 | break; |
518 | } | 507 | } |
519 | case S_HEX: { | 508 | case S_HEX: { |
@@ -565,6 +554,35 @@ static struct conf_printer header_printer_cb = | |||
565 | }; | 554 | }; |
566 | 555 | ||
567 | /* | 556 | /* |
557 | * Generate the __enabled_CONFIG_* and __enabled_CONFIG_*_MODULE macros for | ||
558 | * use by the IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is | ||
559 | * generated even for booleans so that the IS_ENABLED() macro works. | ||
560 | */ | ||
561 | static void | ||
562 | header_print__enabled_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) | ||
563 | { | ||
564 | |||
565 | switch (sym->type) { | ||
566 | case S_BOOLEAN: | ||
567 | case S_TRISTATE: { | ||
568 | fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n", | ||
569 | sym->name, (*value == 'y')); | ||
570 | fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n", | ||
571 | sym->name, (*value == 'm')); | ||
572 | break; | ||
573 | } | ||
574 | default: | ||
575 | break; | ||
576 | } | ||
577 | } | ||
578 | |||
579 | static struct conf_printer header__enabled_printer_cb = | ||
580 | { | ||
581 | .print_symbol = header_print__enabled_symbol, | ||
582 | .print_comment = header_print_comment, | ||
583 | }; | ||
584 | |||
585 | /* | ||
568 | * Tristate printer | 586 | * Tristate printer |
569 | * | 587 | * |
570 | * This printer is used when generating the `include/config/tristate.conf' file. | 588 | * This printer is used when generating the `include/config/tristate.conf' file. |
@@ -945,11 +963,16 @@ int conf_write_autoconf(void) | |||
945 | conf_write_heading(out_h, &header_printer_cb, NULL); | 963 | conf_write_heading(out_h, &header_printer_cb, NULL); |
946 | 964 | ||
947 | for_all_symbols(i, sym) { | 965 | for_all_symbols(i, sym) { |
966 | if (!sym->name) | ||
967 | continue; | ||
968 | |||
948 | sym_calc_value(sym); | 969 | sym_calc_value(sym); |
949 | if (!(sym->flags & SYMBOL_WRITE) || !sym->name) | 970 | |
971 | conf_write_symbol(out_h, sym, &header__enabled_printer_cb, NULL); | ||
972 | |||
973 | if (!(sym->flags & SYMBOL_WRITE)) | ||
950 | continue; | 974 | continue; |
951 | 975 | ||
952 | /* write symbol to auto.conf, tristate and header files */ | ||
953 | conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); | 976 | conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); |
954 | 977 | ||
955 | conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1); | 978 | conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1); |
diff --git a/scripts/kconfig/lxdialog/textbox.c b/scripts/kconfig/lxdialog/textbox.c index c704712d0227..154c2dd245b7 100644 --- a/scripts/kconfig/lxdialog/textbox.c +++ b/scripts/kconfig/lxdialog/textbox.c | |||
@@ -320,7 +320,6 @@ static void print_page(WINDOW * win, int height, int width) | |||
320 | */ | 320 | */ |
321 | static void print_line(WINDOW * win, int row, int width) | 321 | static void print_line(WINDOW * win, int row, int width) |
322 | { | 322 | { |
323 | int y, x; | ||
324 | char *line; | 323 | char *line; |
325 | 324 | ||
326 | line = get_line(); | 325 | line = get_line(); |
@@ -329,10 +328,10 @@ static void print_line(WINDOW * win, int row, int width) | |||
329 | waddch(win, ' '); | 328 | waddch(win, ' '); |
330 | waddnstr(win, line, MIN(strlen(line), width - 2)); | 329 | waddnstr(win, line, MIN(strlen(line), width - 2)); |
331 | 330 | ||
332 | getyx(win, y, x); | ||
333 | /* Clear 'residue' of previous line */ | 331 | /* Clear 'residue' of previous line */ |
334 | #if OLD_NCURSES | 332 | #if OLD_NCURSES |
335 | { | 333 | { |
334 | int x = getcurx(win); | ||
336 | int i; | 335 | int i; |
337 | for (i = 0; i < width - x; i++) | 336 | for (i = 0; i < width - x; i++) |
338 | waddch(win, ' '); | 337 | waddch(win, ' '); |
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 820d2b6800fb..19e200d91120 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <stdarg.h> | 15 | #include <stdarg.h> |
16 | #include <stdlib.h> | 16 | #include <stdlib.h> |
17 | #include <string.h> | 17 | #include <string.h> |
18 | #include <signal.h> | ||
18 | #include <unistd.h> | 19 | #include <unistd.h> |
19 | #include <locale.h> | 20 | #include <locale.h> |
20 | 21 | ||
@@ -272,6 +273,7 @@ static struct menu *current_menu; | |||
272 | static int child_count; | 273 | static int child_count; |
273 | static int single_menu_mode; | 274 | static int single_menu_mode; |
274 | static int show_all_options; | 275 | static int show_all_options; |
276 | static int saved_x, saved_y; | ||
275 | 277 | ||
276 | static void conf(struct menu *menu); | 278 | static void conf(struct menu *menu); |
277 | static void conf_choice(struct menu *menu); | 279 | static void conf_choice(struct menu *menu); |
@@ -792,9 +794,54 @@ static void conf_save(void) | |||
792 | } | 794 | } |
793 | } | 795 | } |
794 | 796 | ||
797 | static int handle_exit(void) | ||
798 | { | ||
799 | int res; | ||
800 | |||
801 | dialog_clear(); | ||
802 | if (conf_get_changed()) | ||
803 | res = dialog_yesno(NULL, | ||
804 | _("Do you wish to save your new configuration ?\n" | ||
805 | "<ESC><ESC> to continue."), | ||
806 | 6, 60); | ||
807 | else | ||
808 | res = -1; | ||
809 | |||
810 | end_dialog(saved_x, saved_y); | ||
811 | |||
812 | switch (res) { | ||
813 | case 0: | ||
814 | if (conf_write(filename)) { | ||
815 | fprintf(stderr, _("\n\n" | ||
816 | "Error while writing of the configuration.\n" | ||
817 | "Your configuration changes were NOT saved." | ||
818 | "\n\n")); | ||
819 | return 1; | ||
820 | } | ||
821 | /* fall through */ | ||
822 | case -1: | ||
823 | printf(_("\n\n" | ||
824 | "*** End of the configuration.\n" | ||
825 | "*** Execute 'make' to start the build or try 'make help'." | ||
826 | "\n\n")); | ||
827 | res = 0; | ||
828 | break; | ||
829 | default: | ||
830 | fprintf(stderr, _("\n\n" | ||
831 | "Your configuration changes were NOT saved." | ||
832 | "\n\n")); | ||
833 | } | ||
834 | |||
835 | return res; | ||
836 | } | ||
837 | |||
838 | static void sig_handler(int signo) | ||
839 | { | ||
840 | exit(handle_exit()); | ||
841 | } | ||
842 | |||
795 | int main(int ac, char **av) | 843 | int main(int ac, char **av) |
796 | { | 844 | { |
797 | int saved_x, saved_y; | ||
798 | char *mode; | 845 | char *mode; |
799 | int res; | 846 | int res; |
800 | 847 | ||
@@ -802,6 +849,8 @@ int main(int ac, char **av) | |||
802 | bindtextdomain(PACKAGE, LOCALEDIR); | 849 | bindtextdomain(PACKAGE, LOCALEDIR); |
803 | textdomain(PACKAGE); | 850 | textdomain(PACKAGE); |
804 | 851 | ||
852 | signal(SIGINT, sig_handler); | ||
853 | |||
805 | conf_parse(av[1]); | 854 | conf_parse(av[1]); |
806 | conf_read(NULL); | 855 | conf_read(NULL); |
807 | 856 | ||
@@ -823,40 +872,9 @@ int main(int ac, char **av) | |||
823 | set_config_filename(conf_get_configname()); | 872 | set_config_filename(conf_get_configname()); |
824 | do { | 873 | do { |
825 | conf(&rootmenu); | 874 | conf(&rootmenu); |
826 | dialog_clear(); | 875 | res = handle_exit(); |
827 | if (conf_get_changed()) | ||
828 | res = dialog_yesno(NULL, | ||
829 | _("Do you wish to save your " | ||
830 | "new configuration?\n" | ||
831 | "<ESC><ESC> to continue."), | ||
832 | 6, 60); | ||
833 | else | ||
834 | res = -1; | ||
835 | } while (res == KEY_ESC); | 876 | } while (res == KEY_ESC); |
836 | end_dialog(saved_x, saved_y); | ||
837 | |||
838 | switch (res) { | ||
839 | case 0: | ||
840 | if (conf_write(filename)) { | ||
841 | fprintf(stderr, _("\n\n" | ||
842 | "Error while writing of the configuration.\n" | ||
843 | "Your configuration changes were NOT saved." | ||
844 | "\n\n")); | ||
845 | return 1; | ||
846 | } | ||
847 | /* fall through */ | ||
848 | case -1: | ||
849 | printf(_("\n\n" | ||
850 | "*** End of the configuration.\n" | ||
851 | "*** Execute 'make' to start the build or try 'make help'." | ||
852 | "\n\n")); | ||
853 | break; | ||
854 | default: | ||
855 | fprintf(stderr, _("\n\n" | ||
856 | "Your configuration changes were NOT saved." | ||
857 | "\n\n")); | ||
858 | } | ||
859 | 877 | ||
860 | return 0; | 878 | return res; |
861 | } | 879 | } |
862 | 880 | ||
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index d66008639a43..8c2a97e60faf 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c | |||
@@ -10,8 +10,7 @@ | |||
10 | 10 | ||
11 | #include "lkc.h" | 11 | #include "lkc.h" |
12 | 12 | ||
13 | static const char nohelp_text[] = N_( | 13 | static const char nohelp_text[] = "There is no help available for this option."; |
14 | "There is no help available for this option.\n"); | ||
15 | 14 | ||
16 | struct menu rootmenu; | 15 | struct menu rootmenu; |
17 | static struct menu **last_entry_ptr; | 16 | static struct menu **last_entry_ptr; |
@@ -595,16 +594,14 @@ struct gstr get_relations_str(struct symbol **sym_arr) | |||
595 | void menu_get_ext_help(struct menu *menu, struct gstr *help) | 594 | void menu_get_ext_help(struct menu *menu, struct gstr *help) |
596 | { | 595 | { |
597 | struct symbol *sym = menu->sym; | 596 | struct symbol *sym = menu->sym; |
597 | const char *help_text = nohelp_text; | ||
598 | 598 | ||
599 | if (menu_has_help(menu)) { | 599 | if (menu_has_help(menu)) { |
600 | if (sym->name) { | 600 | if (sym->name) |
601 | str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); | 601 | str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); |
602 | str_append(help, _(menu_get_help(menu))); | 602 | help_text = menu_get_help(menu); |
603 | str_append(help, "\n"); | ||
604 | } | ||
605 | } else { | ||
606 | str_append(help, nohelp_text); | ||
607 | } | 603 | } |
604 | str_printf(help, "%s\n", _(help_text)); | ||
608 | if (sym) | 605 | if (sym) |
609 | get_symbol_str(help, sym); | 606 | get_symbol_str(help, sym); |
610 | } | 607 | } |
diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c index 39ca1f1640ea..73070cb0b6de 100644 --- a/scripts/kconfig/nconf.c +++ b/scripts/kconfig/nconf.c | |||
@@ -182,8 +182,6 @@ setmod_text[] = N_( | |||
182 | "This feature depends on another which\n" | 182 | "This feature depends on another which\n" |
183 | "has been configured as a module.\n" | 183 | "has been configured as a module.\n" |
184 | "As a result, this feature will be built as a module."), | 184 | "As a result, this feature will be built as a module."), |
185 | nohelp_text[] = N_( | ||
186 | "There is no help available for this option.\n"), | ||
187 | load_config_text[] = N_( | 185 | load_config_text[] = N_( |
188 | "Enter the name of the configuration file you wish to load.\n" | 186 | "Enter the name of the configuration file you wish to load.\n" |
189 | "Accept the name shown to restore the configuration you\n" | 187 | "Accept the name shown to restore the configuration you\n" |
@@ -280,6 +278,9 @@ static int global_exit; | |||
280 | /* the currently selected button */ | 278 | /* the currently selected button */ |
281 | const char *current_instructions = menu_instructions; | 279 | const char *current_instructions = menu_instructions; |
282 | 280 | ||
281 | static char *dialog_input_result; | ||
282 | static int dialog_input_result_len; | ||
283 | |||
283 | static void conf(struct menu *menu); | 284 | static void conf(struct menu *menu); |
284 | static void conf_choice(struct menu *menu); | 285 | static void conf_choice(struct menu *menu); |
285 | static void conf_string(struct menu *menu); | 286 | static void conf_string(struct menu *menu); |
@@ -695,7 +696,6 @@ static void search_conf(void) | |||
695 | { | 696 | { |
696 | struct symbol **sym_arr; | 697 | struct symbol **sym_arr; |
697 | struct gstr res; | 698 | struct gstr res; |
698 | char dialog_input_result[100]; | ||
699 | char *dialog_input; | 699 | char *dialog_input; |
700 | int dres; | 700 | int dres; |
701 | again: | 701 | again: |
@@ -703,7 +703,7 @@ again: | |||
703 | _("Search Configuration Parameter"), | 703 | _("Search Configuration Parameter"), |
704 | _("Enter " CONFIG_ " (sub)string to search for " | 704 | _("Enter " CONFIG_ " (sub)string to search for " |
705 | "(with or without \"" CONFIG_ "\")"), | 705 | "(with or without \"" CONFIG_ "\")"), |
706 | "", dialog_input_result, 99); | 706 | "", &dialog_input_result, &dialog_input_result_len); |
707 | switch (dres) { | 707 | switch (dres) { |
708 | case 0: | 708 | case 0: |
709 | break; | 709 | break; |
@@ -1348,7 +1348,6 @@ static void conf_choice(struct menu *menu) | |||
1348 | static void conf_string(struct menu *menu) | 1348 | static void conf_string(struct menu *menu) |
1349 | { | 1349 | { |
1350 | const char *prompt = menu_get_prompt(menu); | 1350 | const char *prompt = menu_get_prompt(menu); |
1351 | char dialog_input_result[256]; | ||
1352 | 1351 | ||
1353 | while (1) { | 1352 | while (1) { |
1354 | int res; | 1353 | int res; |
@@ -1371,8 +1370,8 @@ static void conf_string(struct menu *menu) | |||
1371 | prompt ? _(prompt) : _("Main Menu"), | 1370 | prompt ? _(prompt) : _("Main Menu"), |
1372 | heading, | 1371 | heading, |
1373 | sym_get_string_value(menu->sym), | 1372 | sym_get_string_value(menu->sym), |
1374 | dialog_input_result, | 1373 | &dialog_input_result, |
1375 | sizeof(dialog_input_result)); | 1374 | &dialog_input_result_len); |
1376 | switch (res) { | 1375 | switch (res) { |
1377 | case 0: | 1376 | case 0: |
1378 | if (sym_set_string_value(menu->sym, | 1377 | if (sym_set_string_value(menu->sym, |
@@ -1392,14 +1391,13 @@ static void conf_string(struct menu *menu) | |||
1392 | 1391 | ||
1393 | static void conf_load(void) | 1392 | static void conf_load(void) |
1394 | { | 1393 | { |
1395 | char dialog_input_result[256]; | ||
1396 | while (1) { | 1394 | while (1) { |
1397 | int res; | 1395 | int res; |
1398 | res = dialog_inputbox(main_window, | 1396 | res = dialog_inputbox(main_window, |
1399 | NULL, load_config_text, | 1397 | NULL, load_config_text, |
1400 | filename, | 1398 | filename, |
1401 | dialog_input_result, | 1399 | &dialog_input_result, |
1402 | sizeof(dialog_input_result)); | 1400 | &dialog_input_result_len); |
1403 | switch (res) { | 1401 | switch (res) { |
1404 | case 0: | 1402 | case 0: |
1405 | if (!dialog_input_result[0]) | 1403 | if (!dialog_input_result[0]) |
@@ -1424,14 +1422,13 @@ static void conf_load(void) | |||
1424 | 1422 | ||
1425 | static void conf_save(void) | 1423 | static void conf_save(void) |
1426 | { | 1424 | { |
1427 | char dialog_input_result[256]; | ||
1428 | while (1) { | 1425 | while (1) { |
1429 | int res; | 1426 | int res; |
1430 | res = dialog_inputbox(main_window, | 1427 | res = dialog_inputbox(main_window, |
1431 | NULL, save_config_text, | 1428 | NULL, save_config_text, |
1432 | filename, | 1429 | filename, |
1433 | dialog_input_result, | 1430 | &dialog_input_result, |
1434 | sizeof(dialog_input_result)); | 1431 | &dialog_input_result_len); |
1435 | switch (res) { | 1432 | switch (res) { |
1436 | case 0: | 1433 | case 0: |
1437 | if (!dialog_input_result[0]) | 1434 | if (!dialog_input_result[0]) |
diff --git a/scripts/kconfig/nconf.gui.c b/scripts/kconfig/nconf.gui.c index f8137b3a5382..3b18dd839668 100644 --- a/scripts/kconfig/nconf.gui.c +++ b/scripts/kconfig/nconf.gui.c | |||
@@ -356,7 +356,7 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...) | |||
356 | 356 | ||
357 | int dialog_inputbox(WINDOW *main_window, | 357 | int dialog_inputbox(WINDOW *main_window, |
358 | const char *title, const char *prompt, | 358 | const char *title, const char *prompt, |
359 | const char *init, char *result, int result_len) | 359 | const char *init, char **resultp, int *result_len) |
360 | { | 360 | { |
361 | int prompt_lines = 0; | 361 | int prompt_lines = 0; |
362 | int prompt_width = 0; | 362 | int prompt_width = 0; |
@@ -367,7 +367,13 @@ int dialog_inputbox(WINDOW *main_window, | |||
367 | int i, x, y; | 367 | int i, x, y; |
368 | int res = -1; | 368 | int res = -1; |
369 | int cursor_position = strlen(init); | 369 | int cursor_position = strlen(init); |
370 | int cursor_form_win; | ||
371 | char *result = *resultp; | ||
370 | 372 | ||
373 | if (strlen(init)+1 > *result_len) { | ||
374 | *result_len = strlen(init)+1; | ||
375 | *resultp = result = realloc(result, *result_len); | ||
376 | } | ||
371 | 377 | ||
372 | /* find the widest line of msg: */ | 378 | /* find the widest line of msg: */ |
373 | prompt_lines = get_line_no(prompt); | 379 | prompt_lines = get_line_no(prompt); |
@@ -384,7 +390,7 @@ int dialog_inputbox(WINDOW *main_window, | |||
384 | y = (LINES-(prompt_lines+4))/2; | 390 | y = (LINES-(prompt_lines+4))/2; |
385 | x = (COLS-(prompt_width+4))/2; | 391 | x = (COLS-(prompt_width+4))/2; |
386 | 392 | ||
387 | strncpy(result, init, result_len); | 393 | strncpy(result, init, *result_len); |
388 | 394 | ||
389 | /* create the windows */ | 395 | /* create the windows */ |
390 | win = newwin(prompt_lines+6, prompt_width+7, y, x); | 396 | win = newwin(prompt_lines+6, prompt_width+7, y, x); |
@@ -405,7 +411,9 @@ int dialog_inputbox(WINDOW *main_window, | |||
405 | fill_window(prompt_win, prompt); | 411 | fill_window(prompt_win, prompt); |
406 | 412 | ||
407 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); | 413 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); |
408 | mvwprintw(form_win, 0, 0, "%s", result); | 414 | cursor_form_win = min(cursor_position, prompt_width-1); |
415 | mvwprintw(form_win, 0, 0, "%s", | ||
416 | result + cursor_position-cursor_form_win); | ||
409 | 417 | ||
410 | /* create panels */ | 418 | /* create panels */ |
411 | panel = new_panel(win); | 419 | panel = new_panel(win); |
@@ -431,6 +439,8 @@ int dialog_inputbox(WINDOW *main_window, | |||
431 | &result[cursor_position], | 439 | &result[cursor_position], |
432 | len-cursor_position+1); | 440 | len-cursor_position+1); |
433 | cursor_position--; | 441 | cursor_position--; |
442 | cursor_form_win--; | ||
443 | len--; | ||
434 | } | 444 | } |
435 | break; | 445 | break; |
436 | case KEY_DC: | 446 | case KEY_DC: |
@@ -438,38 +448,63 @@ int dialog_inputbox(WINDOW *main_window, | |||
438 | memmove(&result[cursor_position], | 448 | memmove(&result[cursor_position], |
439 | &result[cursor_position+1], | 449 | &result[cursor_position+1], |
440 | len-cursor_position+1); | 450 | len-cursor_position+1); |
451 | len--; | ||
441 | } | 452 | } |
442 | break; | 453 | break; |
443 | case KEY_UP: | 454 | case KEY_UP: |
444 | case KEY_RIGHT: | 455 | case KEY_RIGHT: |
445 | if (cursor_position < len && | 456 | if (cursor_position < len) { |
446 | cursor_position < min(result_len, prompt_width)) | ||
447 | cursor_position++; | 457 | cursor_position++; |
458 | cursor_form_win++; | ||
459 | } | ||
448 | break; | 460 | break; |
449 | case KEY_DOWN: | 461 | case KEY_DOWN: |
450 | case KEY_LEFT: | 462 | case KEY_LEFT: |
451 | if (cursor_position > 0) | 463 | if (cursor_position > 0) { |
452 | cursor_position--; | 464 | cursor_position--; |
465 | cursor_form_win--; | ||
466 | } | ||
467 | break; | ||
468 | case KEY_HOME: | ||
469 | cursor_position = 0; | ||
470 | cursor_form_win = 0; | ||
471 | break; | ||
472 | case KEY_END: | ||
473 | cursor_position = len; | ||
474 | cursor_form_win = min(cursor_position, prompt_width-1); | ||
453 | break; | 475 | break; |
454 | default: | 476 | default: |
455 | if ((isgraph(res) || isspace(res)) && | 477 | if ((isgraph(res) || isspace(res))) { |
456 | len-2 < result_len) { | 478 | /* one for new char, one for '\0' */ |
479 | if (len+2 > *result_len) { | ||
480 | *result_len = len+2; | ||
481 | *resultp = result = realloc(result, | ||
482 | *result_len); | ||
483 | } | ||
457 | /* insert the char at the proper position */ | 484 | /* insert the char at the proper position */ |
458 | memmove(&result[cursor_position+1], | 485 | memmove(&result[cursor_position+1], |
459 | &result[cursor_position], | 486 | &result[cursor_position], |
460 | len+1); | 487 | len-cursor_position+1); |
461 | result[cursor_position] = res; | 488 | result[cursor_position] = res; |
462 | cursor_position++; | 489 | cursor_position++; |
490 | cursor_form_win++; | ||
491 | len++; | ||
463 | } else { | 492 | } else { |
464 | mvprintw(0, 0, "unknow key: %d\n", res); | 493 | mvprintw(0, 0, "unknown key: %d\n", res); |
465 | } | 494 | } |
466 | break; | 495 | break; |
467 | } | 496 | } |
497 | if (cursor_form_win < 0) | ||
498 | cursor_form_win = 0; | ||
499 | else if (cursor_form_win > prompt_width-1) | ||
500 | cursor_form_win = prompt_width-1; | ||
501 | |||
468 | wmove(form_win, 0, 0); | 502 | wmove(form_win, 0, 0); |
469 | wclrtoeol(form_win); | 503 | wclrtoeol(form_win); |
470 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); | 504 | mvwprintw(form_win, 0, 0, "%*s", prompt_width, " "); |
471 | mvwprintw(form_win, 0, 0, "%s", result); | 505 | mvwprintw(form_win, 0, 0, "%s", |
472 | wmove(form_win, 0, cursor_position); | 506 | result + cursor_position-cursor_form_win); |
507 | wmove(form_win, 0, cursor_form_win); | ||
473 | touchwin(win); | 508 | touchwin(win); |
474 | refresh_all_windows(main_window); | 509 | refresh_all_windows(main_window); |
475 | 510 | ||
diff --git a/scripts/kconfig/nconf.h b/scripts/kconfig/nconf.h index 58fbda8fc0dc..0d5261705ef5 100644 --- a/scripts/kconfig/nconf.h +++ b/scripts/kconfig/nconf.h | |||
@@ -89,7 +89,7 @@ void fill_window(WINDOW *win, const char *text); | |||
89 | int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...); | 89 | int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...); |
90 | int dialog_inputbox(WINDOW *main_window, | 90 | int dialog_inputbox(WINDOW *main_window, |
91 | const char *title, const char *prompt, | 91 | const char *title, const char *prompt, |
92 | const char *init, char *result, int result_len); | 92 | const char *init, char **resultp, int *result_len); |
93 | void refresh_all_windows(WINDOW *main_window); | 93 | void refresh_all_windows(WINDOW *main_window); |
94 | void show_scroll_win(WINDOW *main_window, | 94 | void show_scroll_win(WINDOW *main_window, |
95 | const char *title, | 95 | const char *title, |
diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl index a4fe923c0131..ec7afce4c88d 100644 --- a/scripts/kconfig/streamline_config.pl +++ b/scripts/kconfig/streamline_config.pl | |||
@@ -43,6 +43,7 @@ | |||
43 | # make oldconfig | 43 | # make oldconfig |
44 | # | 44 | # |
45 | use strict; | 45 | use strict; |
46 | use Getopt::Long; | ||
46 | 47 | ||
47 | my $config = ".config"; | 48 | my $config = ".config"; |
48 | 49 | ||
@@ -112,10 +113,17 @@ sub find_config { | |||
112 | 113 | ||
113 | find_config; | 114 | find_config; |
114 | 115 | ||
116 | # Parse options | ||
117 | my $localmodconfig = 0; | ||
118 | my $localyesconfig = 0; | ||
119 | |||
120 | GetOptions("localmodconfig" => \$localmodconfig, | ||
121 | "localyesconfig" => \$localyesconfig); | ||
122 | |||
115 | # Get the build source and top level Kconfig file (passed in) | 123 | # Get the build source and top level Kconfig file (passed in) |
116 | my $ksource = $ARGV[0]; | 124 | my $ksource = $ARGV[0]; |
117 | my $kconfig = $ARGV[1]; | 125 | my $kconfig = $ARGV[1]; |
118 | my $lsmod_file = $ARGV[2]; | 126 | my $lsmod_file = $ENV{'LSMOD'}; |
119 | 127 | ||
120 | my @makefiles = `find $ksource -name Makefile 2>/dev/null`; | 128 | my @makefiles = `find $ksource -name Makefile 2>/dev/null`; |
121 | chomp @makefiles; | 129 | chomp @makefiles; |
@@ -296,7 +304,11 @@ my %modules; | |||
296 | 304 | ||
297 | if (defined($lsmod_file)) { | 305 | if (defined($lsmod_file)) { |
298 | if ( ! -f $lsmod_file) { | 306 | if ( ! -f $lsmod_file) { |
299 | die "$lsmod_file not found"; | 307 | if ( -f $ENV{'objtree'}."/".$lsmod_file) { |
308 | $lsmod_file = $ENV{'objtree'}."/".$lsmod_file; | ||
309 | } else { | ||
310 | die "$lsmod_file not found"; | ||
311 | } | ||
300 | } | 312 | } |
301 | if ( -x $lsmod_file) { | 313 | if ( -x $lsmod_file) { |
302 | # the file is executable, run it | 314 | # the file is executable, run it |
@@ -421,7 +433,11 @@ while(<CIN>) { | |||
421 | 433 | ||
422 | if (/^(CONFIG.*)=(m|y)/) { | 434 | if (/^(CONFIG.*)=(m|y)/) { |
423 | if (defined($configs{$1})) { | 435 | if (defined($configs{$1})) { |
424 | $setconfigs{$1} = $2; | 436 | if ($localyesconfig) { |
437 | $setconfigs{$1} = 'y'; | ||
438 | } else { | ||
439 | $setconfigs{$1} = $2; | ||
440 | } | ||
425 | } elsif ($2 eq "m") { | 441 | } elsif ($2 eq "m") { |
426 | print "# $1 is not set\n"; | 442 | print "# $1 is not set\n"; |
427 | next; | 443 | next; |