bk://linux-sam.bkbits.net/kconfig sam@mars.ravnborg.org|ChangeSet|20050105191821|07377 sam # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2005/01/05 18:37:31-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/05 18:37:27-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/05 18:37:27-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/05 15:19:08-08:00 akpm@bix.(none) # Merge bk://linux-sam.bkbits.net/kconfig # into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/asm-x86_64/page.h # 2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/mm/init.c # 2005/01/05 15:19:04-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/05 20:18:21+01:00 sam@mars.ravnborg.org # Merge bk://linux-sam.bkbits.net/kconfig # into mars.ravnborg.org:/home/sam/bk/kconfig # # mm/memory.c # 2005/01/05 20:18:12+01:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/05 20:18:11+01:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # include/asm-x86_64/page.h # 2005/01/05 20:18:11+01:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # arch/x86_64/mm/init.c # 2005/01/05 20:18:11+01:00 sam@mars.ravnborg.org +0 -0 # Auto merged # # ChangeSet # 2005/01/04 23:33:58-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/04 23:33:54-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/04 23:33:54-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/04 23:22:39+01:00 sam@mars.ravnborg.org # kconfig: Fold README.Menuconfig into mconf.c # # Content of README.Menuconfig folded into mconf.c and README.Menuconfig deleted. # Text was slightly updated - mainly by deleting obsolete information. # # Signed-off-by: Sam Ravnborg # # scripts/kconfig/mconf.c # 2005/01/04 23:22:18+01:00 sam@mars.ravnborg.org +136 -8 # Fold README.Menuconfig into mconf.c # # ChangeSet # 2005/01/04 14:21:36-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/asm-x86_64/page.h # 2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/mm/init.c # 2005/01/04 14:21:32-08:00 akpm@bix.(none) +0 -0 # Auto merged # # BitKeeper/deleted/.del-README.Menuconfig~f10bb8f47bedf17 # 2005/01/04 23:19:30+01:00 sam@mars.ravnborg.org +0 -0 # Delete: scripts/README.Menuconfig # # ChangeSet # 2005/01/04 23:03:52+01:00 sam@mars.ravnborg.org # kconfig: Include more info when selecting help for a symbol in menuconfig # # When selecting help on a symbol include information below help text # displaying relevant info that kconf has stored. # The info printed is the same info obtained when searching for a symbol # and the same methods are resued. # # Sample (help for "System V IPC"): # ----------------------------------------------------------------------- # CONFIG_SYSIPC: # # Inter Process Communcation ... # # Symbol: SYSVIPC [=y] # Prompt: System V IPC # Defined at init/Kconfig:82 # Depends on: MMU # Location: # -> General setup # ----------------------------------------------------------------------- # # Idea-from: Cal Peake # Signed-off-by: Sam Ravnborg # # scripts/kconfig/mconf.c # 2005/01/04 23:03:31+01:00 sam@mars.ravnborg.org +45 -39 # When selecting help on a symbol include information below help text # displaying relevant relations. # The info printed is the same info obtained when searching for a symbol # and the same methods are resued. # # ChangeSet # 2005/01/04 22:34:50+01:00 sam@mars.ravnborg.org # kconfig: Redo and improve search support # # Based on patch from: Roman Zippel # # The search functionality has been improved: # - Restructured printout with more info # - Include value of relevant symbols # - Improved handling of corner cases # - Generic search support moved to backend - ready to be utilised by xconfig and gconfig # - Search functionality moved to fronend - not hardcoded in menubox.c # # Sample search (^$ used to limit search): # Search for "^USB_STORAGE$": # # Symbol: USB_STORAGE [=y] # Prompt: USB Mass Storage support # Defined at drivers/usb/storage/Kconfig:7 # Depends on: USB # Location: # -> Device Drivers # -> USB Support # Selects: SCSI # # # Some symbols has loong "Depends on:" lines - for example FW_LOADER. # Use arrows to scroll horisontally to see full value. # # Signed-off-by: Sam Ravnborg # # scripts/lxdialog/menubox.c # 2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +2 -9 # Delete old support for search and just tell when '/' has been pressed # # scripts/kconfig/symbol.c # 2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +38 -0 # Implement a method to search all symbols using regular expressions. # # scripts/kconfig/mconf.c # 2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +140 -126 # Delete old support for searching and including new improved version. # - Utilises search method located in backend of kconfig # - Handling more cases correct with respect to corner cases - so info present to user is better # - Reformatted output format # - Included actual value of relevant symbols # - Added helt text # # scripts/kconfig/lkc_proto.h # 2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +1 -0 # Prototype new generic search method # # scripts/kconfig/expr.h # 2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +2 -0 # Prototype new print method utilising growable string # # scripts/kconfig/expr.c # 2005/01/04 22:34:29+01:00 sam@mars.ravnborg.org +10 -0 # Add print helper utilising the growable string # # ChangeSet # 2005/01/04 00:33:25-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/04 00:33:20-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/04 00:33:20-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/03 21:17:14+01:00 sam@mars.ravnborg.org # kconfig: introduce util.c # # Moved two functions from menu.c to new file util.c. # Introduced functions to handle growable strings - no user yet. # # Signed-off-by: Sam Ravnborg # # scripts/kconfig/util.c # 2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +109 -0 # # scripts/kconfig/zconf.y # 2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +1 -0 # Include util.c # # scripts/kconfig/zconf.tab.c_shipped # 2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +1 -0 # Include util.c # # scripts/kconfig/util.c # 2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +0 -0 # BitKeeper file /home/sam/bk/kconfig/scripts/kconfig/util.c # # scripts/kconfig/menu.c # 2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +0 -40 # Moved file_lookup() and file_write_dep() to util.c # # scripts/kconfig/lkc.h # 2005/01/03 21:16:54+01:00 sam@mars.ravnborg.org +13 -0 # Added prototypes for util.c # # ChangeSet # 2005/01/03 19:06:13+01:00 sam@mars.ravnborg.org # kconfig: pass 0, 0 to show_file() to select max size window # # From: Roman Zippel # Signed-off-by: Sam Ravbnorg # # scripts/kconfig/mconf.c # 2005/01/03 19:05:50+01:00 sam@mars.ravnborg.org +5 -5 # pass 0, 0 to show_file to select max size # # ChangeSet # 2005/01/02 19:04:19-08:00 akpm@bix.(none) # Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/02 19:04:16-08:00 akpm@bix.(none) +0 -0 # Auto merged # # ChangeSet # 2005/01/02 16:32:54-08:00 akpm@bix.(none) # Merge bk://linux-sam.bkbits.net/kconfig # into bix.(none):/usr/src/bk-kconfig # # mm/memory.c # 2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/linux/mm.h # 2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0 # Auto merged # # include/asm-x86_64/page.h # 2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0 # Auto merged # # arch/x86_64/mm/init.c # 2005/01/02 16:32:50-08:00 akpm@bix.(none) +0 -0 # Auto merged # diff -Nru a/scripts/README.Menuconfig b/scripts/README.Menuconfig --- a/scripts/README.Menuconfig 2005-01-05 18:38:37 -08:00 +++ /dev/null Wed Dec 31 16:00:00 196900 @@ -1,201 +0,0 @@ -Menuconfig gives the Linux kernel configuration a long needed face -lift. Featuring text based color menus and dialogs, it does not -require X Windows (however, you need ncurses in order to use it). -With this utility you can easily select a kernel option to modify -without sifting through 100 other options. - -Overview --------- -Some kernel features may be built directly into the kernel. -Some may be made into loadable runtime modules. Some features -may be completely removed altogether. There are also certain -kernel parameters which are not really features, but must be -entered in as decimal or hexadecimal numbers or possibly text. - -Menu items beginning with [*], or [ ] represent features -configured to be built in, modularized or removed respectively. -Pointed brackets <> represent module capable features. - more... - -To change any of these features, highlight it with the cursor -keys and press to build it in, to make it a module or - to removed it. You may also press the to cycle -through the available options (ie. Y->N->M->Y). - -Items beginning with numbers or other text within parenthesis can -be changed by highlighting the item and pressing . Then -enter the new parameter into the dialog box that pops up. - - -Some additional keyboard hints: - -Menus ----------- -o Use the Up/Down arrow keys (cursor keys) to highlight the item - you wish to change or submenu wish to select and press . - Submenus are designated by "--->". - - Shortcut: Press the option's highlighted letter (hotkey). - Pressing a hotkey more than once will sequence - through all visible items which use that hotkey. - - You may also use the and keys to scroll - unseen options into view. - -o To exit a menu use the cursor keys to highlight the button - and press . - - Shortcut: Press or or if there is no hotkey - using those letters. You may press a single , but - there is a delayed response which you may find annoying. - - Also, the and cursor keys will cycle between and - - - -Data Entry ------------ -o Enter the requested information and press - If you are entering hexadecimal values, it is not necessary to - add the '0x' prefix to the entry. - -o For help, use the or cursor keys to highlight the help option - and press . You can try as well. - - -Text Box (Help Window) --------- -o Use the cursor keys to scroll up/down/left/right. The VI editor - keys h,j,k,l function here as do and for those - who are familiar with less and lynx. - -o Press , , or to exit. - - -Final Acceptance ----------------- -With the exception of the old style sound configuration, -YOUR CHANGES ARE NOT FINAL. You will be given a last chance to -confirm them prior to exiting Menuconfig. - -If Menuconfig quits with an error while saving your configuration, -you may look in the file /usr/src/linux/.menuconfig.log for -information which may help you determine the cause. - -Alternate Configuration Files ------------------------------ -Menuconfig supports the use of alternate configuration files for -those who, for various reasons, find it necessary to switch -between different kernel configurations. - -At the end of the main menu you will find two options. One is -for saving the current configuration to a file of your choosing. -The other option is for loading a previously saved alternate -configuration. - -Even if you don't use alternate configuration files, but you -find during a Menuconfig session that you have completely messed -up your settings, you may use the "Load Alternate..." option to -restore your previously saved settings from ".config" without -restarting Menuconfig. - -Other information ------------------ -The windowing utility, lxdialog, will only be rebuilt if your kernel -source tree is fresh, or changes are patched into it via a kernel -patch or you do 'make mrproper'. If changes to lxdialog are patched -in, most likely the rebuild time will be short. You may force a -complete rebuild of lxdialog by changing to its directory and doing -'make clean all' - -If you use Menuconfig in an XTERM window make sure you have your -$TERM variable set to point to a xterm definition which supports color. -Otherwise, Menuconfig will look rather bad. Menuconfig will not -display correctly in a RXVT window because rxvt displays only one -intensity of color, bright. - -Menuconfig will display larger menus on screens or xterms which are -set to display more than the standard 25 row by 80 column geometry. -In order for this to work, the "stty size" command must be able to -display the screen's current row and column geometry. I STRONGLY -RECOMMEND that you make sure you do NOT have the shell variables -LINES and COLUMNS exported into your environment. Some distributions -export those variables via /etc/profile. Some ncurses programs can -become confused when those variables (LINES & COLUMNS) don't reflect -the true screen size. - - -NOTICE: lxdialog requires the ncurses libraries to compile. If you - don't already have ncurses you really should get it. - - The makefile for lxdialog attempts to find your ncurses - header file. Although it should find the header for older - versions of ncurses, it is probably a good idea to get the - latest ncurses anyway. - - If you have upgraded your ncurses libraries, MAKE SURE you - remove the old ncurses header files. If you don't you - will most certainly get a segmentation fault. - -WARNING: It is not recommended that you change any defines in - lxdialog's header files. If you have a grayscale display and - are brave, you may tinker with color.h to tune the colors to - your preference. - -COMPATIBILITY ISSUE: - There have been some compatibility problems reported with - older versions of bash and sed. I am trying to work these - out but it is preferable that you upgrade those utilities. - - -******** IMPORTANT, OPTIONAL ALTERNATE PERSONALITY AVAILABLE ******** -******** ******** -If you prefer to have all of the kernel options listed in a single -menu, rather than the default multimenu hierarchy, run the menuconfig -with MENUCONFIG_MODE environment variable set to single_menu. Example: - -make menuconfig MENUCONFIG_MODE=single_menu - - will then unroll the appropriate category, or enfold it if it -is already unrolled. - -Note that this mode can eventually be a little more CPU expensive -(especially with a larger number of unrolled categories) than the -default mode. -********************************************************************* - - -Propaganda ----------- -The windowing support utility (lxdialog) is a VERY modified version of -the dialog utility by Savio Lam . Although lxdialog -is significantly different from dialog, I have left Savio's copyrights -intact. Please DO NOT contact Savio with questions about lxdialog. -He will not be able to assist. - -William Roadcap was the original author of Menuconfig. -Michael Elizabeth Chastain is the current maintainer. - - diff -Nru a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c --- a/scripts/kconfig/expr.c 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/expr.c 2005-01-05 18:38:37 -08:00 @@ -1087,3 +1087,13 @@ { expr_print(e, expr_print_file_helper, out, E_NONE); } + +static void expr_print_gstr_helper(void *data, const char *str) +{ + str_append((struct gstr*)data, str); +} + +void expr_gstr_print(struct expr *e, struct gstr *gs) +{ + expr_print(e, expr_print_gstr_helper, gs, E_NONE); +} diff -Nru a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h --- a/scripts/kconfig/expr.h 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/expr.h 2005-01-05 18:38:37 -08:00 @@ -174,6 +174,8 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); void expr_fprint(struct expr *e, FILE *out); +struct gstr; /* forward */ +void expr_gstr_print(struct expr *e, struct gstr *gs); static inline int expr_is_yes(struct expr *e) { diff -Nru a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h --- a/scripts/kconfig/lkc.h 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/lkc.h 2005-01-05 18:38:37 -08:00 @@ -56,8 +56,21 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep); void menu_finalize(struct menu *parent); void menu_set_type(int type); + +/* util.c */ struct file *file_lookup(const char *name); int file_write_dep(const char *name); + +struct gstr { + size_t len; + char *s; +}; +struct gstr str_new(void); +struct gstr str_assign(const char *s); +void str_free(struct gstr *gs); +void str_append(struct gstr *gs, const char *s); +void str_printf(struct gstr *gs, const char *fmt, ...); +const char *str_get(struct gstr *gs); /* symbol.c */ void sym_init(void); diff -Nru a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h --- a/scripts/kconfig/lkc_proto.h 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/lkc_proto.h 2005-01-05 18:38:37 -08:00 @@ -18,6 +18,7 @@ P(sym_lookup,struct symbol *,(const char *name, int isconst)); P(sym_find,struct symbol *,(const char *name)); +P(sym_re_search,struct symbol **,(const char *pattern)); P(sym_type_name,const char *,(enum symbol_type type)); P(sym_calc_value,void,(struct symbol *sym)); P(sym_get_type,enum symbol_type,(struct symbol *sym)); diff -Nru a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c --- a/scripts/kconfig/mconf.c 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/mconf.c 2005-01-05 18:38:37 -08:00 @@ -18,13 +18,146 @@ #include #include #include -#include #define LKC_DIRECT_LINK #include "lkc.h" static char menu_backtitle[128]; -static const char menu_instructions[] = +static const char mconf_readme[] = +"Overview\n" +"--------\n" +"Some kernel features may be built directly into the kernel.\n" +"Some may be made into loadable runtime modules. Some features\n" +"may be completely removed altogether. There are also certain\n" +"kernel parameters which are not really features, but must be\n" +"entered in as decimal or hexadecimal numbers or possibly text.\n" +"\n" +"Menu items beginning with [*], or [ ] represent features\n" +"configured to be built in, modularized or removed respectively.\n" +"Pointed brackets <> represent module capable features.\n" +"\n" +"To change any of these features, highlight it with the cursor\n" +"keys and press to build it in, to make it a module or\n" +" to removed it. You may also press the to cycle\n" +"through the available options (ie. Y->N->M->Y).\n" +"\n" +"Some additional keyboard hints:\n" +"\n" +"Menus\n" +"----------\n" +"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n" +" you wish to change or submenu wish to select and press .\n" +" Submenus are designated by \"--->\".\n" +"\n" +" Shortcut: Press the option's highlighted letter (hotkey).\n" +" Pressing a hotkey more than once will sequence\n" +" through all visible items which use that hotkey.\n" +"\n" +" You may also use the and keys to scroll\n" +" unseen options into view.\n" +"\n" +"o To exit a menu use the cursor keys to highlight the button\n" +" and press .\n" +"\n" +" Shortcut: Press or or if there is no hotkey\n" +" using those letters. You may press a single , but\n" +" there is a delayed response which you may find annoying.\n" +"\n" +" Also, the and cursor keys will cycle between and\n" +" \n" +"\n" +"\n" +"Data Entry\n" +"-----------\n" +"o Enter the requested information and press \n" +" If you are entering hexadecimal values, it is not necessary to\n" +" add the '0x' prefix to the entry.\n" +"\n" +"o For help, use the or cursor keys to highlight the help option\n" +" and press . You can try as well.\n" +"\n" +"\n" +"Text Box (Help Window)\n" +"--------\n" +"o Use the cursor keys to scroll up/down/left/right. The VI editor\n" +" keys h,j,k,l function here as do and for those\n" +" who are familiar with less and lynx.\n" +"\n" +"o Press , , or to exit.\n" +"\n" +"\n" +"Alternate Configuration Files\n" +"-----------------------------\n" +"Menuconfig supports the use of alternate configuration files for\n" +"those who, for various reasons, find it necessary to switch\n" +"between different kernel configurations.\n" +"\n" +"At the end of the main menu you will find two options. One is\n" +"for saving the current configuration to a file of your choosing.\n" +"The other option is for loading a previously saved alternate\n" +"configuration.\n" +"\n" +"Even if you don't use alternate configuration files, but you\n" +"find during a Menuconfig session that you have completely messed\n" +"up your settings, you may use the \"Load Alternate...\" option to\n" +"restore your previously saved settings from \".config\" without\n" +"restarting Menuconfig.\n" +"\n" +"Other information\n" +"-----------------\n" +"If you use Menuconfig in an XTERM window make sure you have your\n" +"$TERM variable set to point to a xterm definition which supports color.\n" +"Otherwise, Menuconfig will look rather bad. Menuconfig will not\n" +"display correctly in a RXVT window because rxvt displays only one\n" +"intensity of color, bright.\n" +"\n" +"Menuconfig will display larger menus on screens or xterms which are\n" +"set to display more than the standard 25 row by 80 column geometry.\n" +"In order for this to work, the \"stty size\" command must be able to\n" +"display the screen's current row and column geometry. I STRONGLY\n" +"RECOMMEND that you make sure you do NOT have the shell variables\n" +"LINES and COLUMNS exported into your environment. Some distributions\n" +"export those variables via /etc/profile. Some ncurses programs can\n" +"become confused when those variables (LINES & COLUMNS) don't reflect\n" +"the true screen size.\n" +"\n" +"Optional personality available\n" +"------------------------------\n" +"If you prefer to have all of the kernel options listed in a single\n" +"menu, rather than the default multimenu hierarchy, run the menuconfig\n" +"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n" +"\n" +"make MENUCONFIG_MODE=single_menu menuconfig\n" +"\n" +" will then unroll the appropriate category, or enfold it if it\n" +"is already unrolled.\n" +"\n" +"Note that this mode can eventually be a little more CPU expensive\n" +"(especially with a larger number of unrolled categories) than the\n" +"default mode.\n", +menu_instructions[] = "Arrow keys navigate the menu. " " selects submenus --->. " "Highlighted letters are hotkeys. " @@ -79,8 +212,45 @@ "configuration options you have selected at that time.\n" "\n" "If you are uncertain what all this means then you should probably\n" - "leave this blank.\n" -; + "leave this blank.\n", +search_help[] = + "\n" + "Search for CONFIG_ symbols and display their relations.\n" + "Example: search for \"^FOO\"\n" + "Result:\n" + "-----------------------------------------------------------------\n" + "Symbol: FOO [=m]\n" + "Prompt: Foo bus is used to drive the bar HW\n" + "Defined at drivers/pci/Kconfig:47\n" + "Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n" + "Location:\n" + " -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n" + " -> PCI support (PCI [=y])\n" + " -> PCI access mode ( [=y])\n" + "Selects: LIBCRC32\n" + "Selected by: BAR\n" + "-----------------------------------------------------------------\n" + "o The line 'Prompt:' shows the text used in the menu structure for\n" + " this CONFIG_ symbol\n" + "o The 'Defined at' line tell at what file / line number the symbol\n" + " is defined\n" + "o The 'Depends on:' line tell what symbols needs to be defined for\n" + " this symbol to be visible in the menu (selectable)\n" + "o The 'Location:' lines tell where in the menu structure this symbol\n" + " is located\n" + " A location followed by a [=y] indicate that this is a selectable\n" + " menu item - and current value is displayed inside brackets.\n" + "o The 'Selects:' line tell what symbol will be automatically\n" + " selected if this symbol is selected (y or m)\n" + "o The 'Selected by' line tell what symbol has selected this symbol\n" + "\n" + "Only relevant lines are shown.\n" + "\n\n" + "Search examples:\n" + "Examples: USB => find all CONFIG_ symbols containing USB\n" + " ^USB => find all CONFIG_ symbols starting with USB\n" + " USB$ => find all CONFIG_ symbols ending with USB\n" + "\n"; static signed char buf[4096], *bufptr = buf; static signed char input_buf[4096]; @@ -102,11 +272,7 @@ static void show_textbox(const char *title, const char *text, int r, int c); static void show_helptext(const char *title, const char *text); static void show_help(struct menu *menu); -static void show_readme(void); static void show_file(const char *filename, const char *title, int r, int c); -static void show_expr(struct menu *menu, FILE *fp); -static void search_conf(char *pattern); -static int regex_match(const char *string, regex_t *re); static void cprint_init(void); static int cprint1(const char *fmt, ...); @@ -196,6 +362,78 @@ return res; } +static void get_prompt_str(struct gstr *r, struct property *prop) +{ + int i, j; + struct menu *submenu[8], *menu; + + str_printf(r, "Prompt: %s\n", prop->text); + str_printf(r, " Defined at %s:%d\n", prop->menu->file->name, + prop->menu->lineno); + if (!expr_is_yes(prop->visible.expr)) { + str_append(r, " Depends on: "); + expr_gstr_print(prop->visible.expr, r); + str_append(r, "\n"); + } + menu = prop->menu->parent; + for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) + submenu[i++] = menu; + if (i > 0) { + str_printf(r, " Location:\n"); + for (j = 4; --i >= 0; j += 2) { + menu = submenu[i]; + str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu)); + if (menu->sym) { + str_printf(r, " (%s [=%s])", menu->sym->name ? + menu->sym->name : "", + sym_get_string_value(menu->sym)); + } + str_append(r, "\n"); + } + } +} + +static void get_symbol_str(struct gstr *r, struct symbol *sym) +{ + bool hit; + struct property *prop; + + str_printf(r, "Symbol: %s [=%s]\n", sym->name, + sym_get_string_value(sym)); + for_all_prompts(sym, prop) + get_prompt_str(r, prop); + hit = false; + for_all_properties(sym, prop, P_SELECT) { + if (!hit) { + str_append(r, " Selects: "); + hit = true; + } else + str_printf(r, " && "); + expr_gstr_print(prop->expr, r); + } + if (hit) + str_append(r, "\n"); + if (sym->rev_dep.expr) { + str_append(r, " Selected by: "); + expr_gstr_print(sym->rev_dep.expr, r); + str_append(r, "\n"); + } + str_append(r, "\n\n"); +} + +static struct gstr get_relations_str(struct symbol **sym_arr) +{ + struct symbol *sym; + struct gstr res = str_new(); + int i; + + for (i = 0; sym_arr && (sym = sym_arr[i]); i++) + get_symbol_str(&res, sym); + if (!i) + str_append(&res, "No matches found.\n"); + return res; +} + pid_t pid; static void winch_handler(int sig) @@ -279,112 +517,39 @@ return WEXITSTATUS(stat); } -static int regex_match(const char *string, regex_t *re) +static void search_conf(void) { - int rc; - - rc = regexec(re, string, (size_t) 0, NULL, 0); - if (rc) - return 0; - return 1; -} - -static void show_expr(struct menu *menu, FILE *fp) -{ - bool hit = false; - fprintf(fp, "Depends:\n "); - if (menu->prompt->visible.expr) { - if (!hit) - hit = true; - expr_fprint(menu->prompt->visible.expr, fp); - } - if (!hit) - fprintf(fp, "None"); - if (menu->sym) { - struct property *prop; - hit = false; - fprintf(fp, "\nSelects:\n "); - for_all_properties(menu->sym, prop, P_SELECT) { - if (!hit) - hit = true; - expr_fprint(prop->expr, fp); - } - if (!hit) - fprintf(fp, "None"); - hit = false; - fprintf(fp, "\nSelected by:\n "); - if (menu->sym->rev_dep.expr) { - hit = true; - expr_fprint(menu->sym->rev_dep.expr, fp); - } - if (!hit) - fprintf(fp, "None"); - } -} - -static void search_conf(char *pattern) -{ - struct symbol *sym = NULL; - struct menu *menu[32] = { 0 }; - struct property *prop = NULL; - FILE *fp = NULL; - bool hit = false; - int i, j, k, l; - regex_t re; - - if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB)) + struct symbol **sym_arr; + int stat; + struct gstr res; + +again: + cprint_init(); + cprint("--title"); + cprint("Search Configuration Parameter"); + cprint("--inputbox"); + cprint("Enter Keyword"); + cprint("10"); + cprint("75"); + cprint(""); + stat = exec_conf(); + if (stat < 0) + goto again; + switch (stat) { + case 0: + break; + case 1: + show_helptext("Search Configuration", search_help); + goto again; + default: return; - - fp = fopen(".search.tmp", "w"); - if (fp == NULL) { - perror("fopen"); - return; - } - for_all_symbols(i, sym) { - if (!sym->name) - continue; - if (!regex_match(sym->name, &re)) - continue; - for_all_prompts(sym, prop) { - struct menu *submenu = prop->menu; - if (!submenu) - continue; - j = 0; - hit = false; - while (submenu) { - menu[j++] = submenu; - submenu = submenu->parent; - } - if (j > 0) { - if (!hit) - hit = true; - fprintf(fp, "%s (%s)\n", prop->text, sym->name); - fprintf(fp, "Location:\n"); - } - for (k = j-2, l=1; k > 0; k--, l++) { - const char *prompt = menu_get_prompt(menu[k]); - if (menu[k]->sym) - fprintf(fp, "%*c-> %s (%s)\n", - l, ' ', - prompt, - menu[k]->sym->name); - else - fprintf(fp, "%*c-> %s\n", - l, ' ', - prompt); - } - if (hit) { - show_expr(menu[0], fp); - fprintf(fp, "\n\n\n"); - } - } } - if (!hit) - fprintf(fp, "No matches found."); - regfree(&re); - fclose(fp); - show_file(".search.tmp", "Search Results", rows, cols); - unlink(".search.tmp"); + + sym_arr = sym_re_search(input_buf); + res = get_relations_str(sym_arr); + free(sym_arr); + show_textbox("Search Results", str_get(&res), 0, 0); + str_free(&res); } static void build_conf(struct menu *menu) @@ -576,23 +741,6 @@ cprint(" Save Configuration to an Alternate File"); } stat = exec_conf(); - if (stat == 26) { - char *pattern; - - if (!strlen(input_buf)) - continue; - pattern = malloc(sizeof(char)*sizeof(input_buf)); - if (pattern == NULL) { - perror("malloc"); - continue; - } - for (i = 0; input_buf[i]; i++) - pattern[i] = toupper(input_buf[i]); - pattern[i] = '\0'; - search_conf(pattern); - free(pattern); - continue; - } if (stat < 0) continue; @@ -645,7 +793,7 @@ if (sym) show_help(submenu); else - show_readme(); + show_helptext("README", mconf_readme); break; case 3: if (type == 't') { @@ -669,6 +817,9 @@ else if (type == 'm') conf(submenu); break; + case 7: + search_conf(); + break; } } } @@ -686,30 +837,27 @@ static void show_helptext(const char *title, const char *text) { - show_textbox(title, text, rows, cols); + show_textbox(title, text, 0, 0); } static void show_help(struct menu *menu) { - const char *help; - char *helptext; + struct gstr help = str_new(); struct symbol *sym = menu->sym; - help = sym->help; - if (!help) - help = nohelp_text; - if (sym->name) { - helptext = malloc(strlen(sym->name) + strlen(help) + 16); - sprintf(helptext, "CONFIG_%s:\n\n%s", sym->name, help); - show_helptext(menu_get_prompt(menu), helptext); - free(helptext); - } else - show_helptext(menu_get_prompt(menu), help); -} - -static void show_readme(void) -{ - show_file("scripts/README.Menuconfig", NULL, rows, cols); + if (sym->help) + { + if (sym->name) { + str_printf(&help, "CONFIG_%s:\n\n", sym->name); + str_append(&help, sym->help); + str_append(&help, "\n"); + } + } else { + str_append(&help, nohelp_text); + } + get_symbol_str(&help, sym); + show_helptext(menu_get_prompt(menu), str_get(&help)); + str_free(&help); } static void show_file(const char *filename, const char *title, int r, int c) @@ -722,8 +870,8 @@ } cprint("--textbox"); cprint("%s", filename); - cprint("%d", r); - cprint("%d", c); + cprint("%d", r ? r : rows); + cprint("%d", c ? c : cols); } while (exec_conf() < 0); } diff -Nru a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c --- a/scripts/kconfig/menu.c 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/menu.c 2005-01-05 18:38:37 -08:00 @@ -388,43 +388,3 @@ return menu; } -struct file *file_lookup(const char *name) -{ - struct file *file; - - for (file = file_list; file; file = file->next) { - if (!strcmp(name, file->name)) - return file; - } - - file = malloc(sizeof(*file)); - memset(file, 0, sizeof(*file)); - file->name = strdup(name); - file->next = file_list; - file_list = file; - return file; -} - -int file_write_dep(const char *name) -{ - struct file *file; - FILE *out; - - if (!name) - name = ".config.cmd"; - out = fopen("..config.tmp", "w"); - if (!out) - return 1; - fprintf(out, "deps_config := \\\n"); - for (file = file_list; file; file = file->next) { - if (file->next) - fprintf(out, "\t%s \\\n", file->name); - else - fprintf(out, "\t%s\n", file->name); - } - fprintf(out, "\n.config include/linux/autoconf.h: $(deps_config)\n\n$(deps_config):\n"); - fclose(out); - rename("..config.tmp", name); - return 0; -} - diff -Nru a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c --- a/scripts/kconfig/symbol.c 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/symbol.c 2005-01-05 18:38:37 -08:00 @@ -6,6 +6,7 @@ #include #include #include +#include #include #define LKC_DIRECT_LINK @@ -655,6 +656,43 @@ return symbol; } + +struct symbol **sym_re_search(const char *pattern) +{ + struct symbol *sym, **sym_arr = NULL; + int i, cnt, size; + regex_t re; + + cnt = size = 0; + /* Skip if empty */ + if (strlen(pattern) == 0) + return NULL; + if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE)) + return NULL; + + for_all_symbols(i, sym) { + if (sym->flags & SYMBOL_CONST || !sym->name) + continue; + if (regexec(&re, sym->name, 0, NULL, 0)) + continue; + if (cnt + 1 >= size) { + void *tmp = sym_arr; + size += 16; + sym_arr = realloc(sym_arr, size * sizeof(struct symbol *)); + if (!sym_arr) { + free(tmp); + return NULL; + } + } + sym_arr[cnt++] = sym; + } + if (sym_arr) + sym_arr[cnt] = NULL; + regfree(&re); + + return sym_arr; +} + struct symbol *sym_check_deps(struct symbol *sym); diff -Nru a/scripts/kconfig/util.c b/scripts/kconfig/util.c --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/scripts/kconfig/util.c 2005-01-05 18:38:37 -08:00 @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2002-2005 Roman Zippel + * Copyright (C) 2002-2005 Sam Ravnborg + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include "lkc.h" + +/* file already present in list? If not add it */ +struct file *file_lookup(const char *name) +{ + struct file *file; + + for (file = file_list; file; file = file->next) { + if (!strcmp(name, file->name)) + return file; + } + + file = malloc(sizeof(*file)); + memset(file, 0, sizeof(*file)); + file->name = strdup(name); + file->next = file_list; + file_list = file; + return file; +} + +/* write a dependency file as used by kbuild to track dependencies */ +int file_write_dep(const char *name) +{ + struct file *file; + FILE *out; + + if (!name) + name = ".config.cmd"; + out = fopen("..config.tmp", "w"); + if (!out) + return 1; + fprintf(out, "deps_config := \\\n"); + for (file = file_list; file; file = file->next) { + if (file->next) + fprintf(out, "\t%s \\\n", file->name); + else + fprintf(out, "\t%s\n", file->name); + } + fprintf(out, "\n.config include/linux/autoconf.h: $(deps_config)\n\n$(deps_config):\n"); + fclose(out); + rename("..config.tmp", name); + return 0; +} + + +/* Allocate initial growable sting */ +struct gstr str_new(void) +{ + struct gstr gs; + gs.s = malloc(sizeof(char) * 64); + gs.len = 16; + strcpy(gs.s, "\0"); + return gs; +} + +/* Allocate and assign growable string */ +struct gstr str_assign(const char *s) +{ + struct gstr gs; + gs.s = strdup(s); + gs.len = strlen(s) + 1; + return gs; +} + +/* Free storage for growable string */ +void str_free(struct gstr *gs) +{ + if (gs->s) + free(gs->s); + gs->s = NULL; + gs->len = 0; +} + +/* Append to growable string */ +void str_append(struct gstr *gs, const char *s) +{ + size_t l = strlen(gs->s) + strlen(s) + 1; + if (l > gs->len) { + gs->s = realloc(gs->s, l); + gs->len = l; + } + strcat(gs->s, s); +} + +/* Append printf formatted string to growable string */ +void str_printf(struct gstr *gs, const char *fmt, ...) +{ + va_list ap; + char s[10000]; /* big enough... */ + va_start(ap, fmt); + vsnprintf(s, sizeof(s), fmt, ap); + str_append(gs, s); + va_end(ap); +} + +/* Retreive value of growable string */ +const char *str_get(struct gstr *gs) +{ + return gs->s; +} + diff -Nru a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped --- a/scripts/kconfig/zconf.tab.c_shipped 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/zconf.tab.c_shipped 2005-01-05 18:38:37 -08:00 @@ -2121,6 +2121,7 @@ } #include "lex.zconf.c" +#include "util.c" #include "confdata.c" #include "expr.c" #include "symbol.c" diff -Nru a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y --- a/scripts/kconfig/zconf.y 2005-01-05 18:38:37 -08:00 +++ b/scripts/kconfig/zconf.y 2005-01-05 18:38:37 -08:00 @@ -683,6 +683,7 @@ } #include "lex.zconf.c" +#include "util.c" #include "confdata.c" #include "expr.c" #include "symbol.c" diff -Nru a/scripts/lxdialog/menubox.c b/scripts/lxdialog/menubox.c --- a/scripts/lxdialog/menubox.c 2005-01-05 18:38:37 -08:00 +++ b/scripts/lxdialog/menubox.c 2005-01-05 18:38:37 -08:00 @@ -276,15 +276,6 @@ while (key != ESC) { key = wgetch(menu); - if ( key == '/' ) { - int ret = dialog_inputbox("Search Configuration Parameter", - "Enter Keyword", height, width, - (char *) NULL); - if (ret == 0) { - fprintf(stderr, "%s", dialog_input_result); - return 26; - } - } if (key < 256 && isalpha(key)) key = tolower(key); @@ -408,6 +399,7 @@ case 'y': case 'n': case 'm': + case '/': /* save scroll info */ if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) { fprintf(f,"%d\n",scroll); @@ -421,6 +413,7 @@ case 'n': return 4; case 'm': return 5; case ' ': return 6; + case '/': return 7; } return 0; case 'h':