| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  | MENUSELECT | 
					
						
							|  |  |  | Copyright (C) 2005-2006, Digium, Inc. | 
					
						
							|  |  |  | Russell Bryant <russell@digium.com> | 
					
						
							|  |  |  | ------------------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ABOUT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Menuselect is a tool designed to be used in conjunction with GNU make. It | 
					
						
							|  |  |  | allows for an XML specification of Makefile variables and optional space | 
					
						
							|  |  |  | delimited values of these variables. These values can then be used in the | 
					
						
							|  |  |  | Makefile to make various decisions during the build process. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Menuselect also provides a mechanism for dependency checking for each possible | 
					
						
							|  |  |  | member (value) of each category (Makefile variable). These dependencies are | 
					
						
							|  |  |  | generally checked by using autoconf and the results provided to menuselect. If | 
					
						
							|  |  |  | dependencies for a member are not met, the user will not be allowed to make | 
					
						
							|  |  |  | that selection. In the same way the menuselect does dependency checking, it | 
					
						
							|  |  |  | also does conflict checking. If a listed conflict for a member is met, then | 
					
						
							|  |  |  | the user will not be allowed to select it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For use with automated builds or when the user has no desire to make selections | 
					
						
							|  |  |  | different than the defined defaults, menuselect can generate a default output | 
					
						
							|  |  |  | file for use in the build. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Menuselect can also do a sanity check on existing input files. If any member | 
					
						
							|  |  |  | has been selected that has conflicts or unmet dependencies, then menuselect | 
					
						
							|  |  |  | will exit with an error and output to notify the user of the situation. This is | 
					
						
							|  |  |  | typically done at the beginning of the build process to ensure that given all | 
					
						
							|  |  |  | of the known information, the build is going to be successful. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MENUSELECT DEPENDENCIES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | libncurses -- This is needed for the curses frontend. | 
					
						
							|  |  |  | libnewt -- This is needed for the newt frontend (optional). | 
					
						
							| 
									
										
										
										
											2014-07-17 19:02:22 +00:00
										 |  |  | libxml2 -- This library, the XML C parser and toolkit of Gnome, is used for | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  |            XML parsing. | 
					
						
							| 
									
										
										
										
											2014-07-17 19:02:22 +00:00
										 |  |  |            (http://xmlsoft.org/) | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ENVIRONMENT SETUP | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The file menuselect.h contains a couple of defines which specify locations for | 
					
						
							|  |  |  | various files.  These locations are relative to the directory from which | 
					
						
							|  |  |  | menuselect will be executed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define OUTPUT_MAKEOPTS_DEFAULT "menuselect.makeopts" | 
					
						
							|  |  |  | This is the location where the menuselect output will be saved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MENUSELECT_DEPS         "build_tools/menuselect-deps" | 
					
						
							|  |  |  | This is the location where menuselect will expect to find the input file that | 
					
						
							|  |  |  | provides dependency and conflict information. More information on the format of | 
					
						
							|  |  |  | this file can be found in the section about dependency and conflict checking. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEPENDENCY AND CONFLICT CHECKING | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Members may have as many conflicts and dependencies specified as needed. An | 
					
						
							|  |  |  | example of the MENUSELECT_DEPS file would look like this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEPENDENCY1=1 | 
					
						
							|  |  |  | DEPENDENCY2=0 | 
					
						
							|  |  |  | CONFLICT1=0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In this case, "DEPENDENCY1" has been met, "DEPENDENCY2" has not been met, and | 
					
						
							|  |  |  | "CONFLICT1" is not present. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To ask menuselect to do a background sanity check on dependencies and | 
					
						
							|  |  |  | conflicts, it can be called like this: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ./menuselect --check-deps <input_file1> [input_file2] [...] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The format of the input files must be of the same format menuselect uses to | 
					
						
							|  |  |  | create the OUPUT_MAKEOPTS_DEFAULT. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ENABLING AND DISABLING OPTIONS FROM THE COMMAND LINE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you would like menuselect to update choices via the command line, it can be | 
					
						
							|  |  |  | done with the following syntax: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Enable an option: | 
					
						
							|  |  |  |    $ menuselect/menuselect --enable TEST_FRAMEWORK menuselect.makeopts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Enable all options in a category: | 
					
						
							|  |  |  |    $ menuselect/menuselect --enable-category MENUSELECT_TEST menuselect.makeopts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Disable an option: | 
					
						
							|  |  |  |    $ menuselect/menuselect --disable TEST_FRAMEWORK menuselect.makeopts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Disable all options in a category: | 
					
						
							|  |  |  |    $ menuselect/menuselect --disable-category MENUSELECT_TEST menuselect.makeopts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SETTING UP AVAILABLE OPTIONS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The XML specification for the menu lives in the file "menuselect-tree" and should | 
					
						
							|  |  |  | be in the same directory that menuselect will be executed from. An example | 
					
						
							|  |  |  | menuselect-tree file as used in the Asterisk project (http://www.asterisk.org) is | 
					
						
							|  |  |  | provided in example_menuselect-tree | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Menu: | 
					
						
							|  |  |  |    The top level tag in menuselect-tree is the <menu> tag. All of the categories | 
					
						
							|  |  |  |    reside inside of the <menu> ... </menu> block. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Menu Attributes: | 
					
						
							|  |  |  |    name="Asterisk Module Selection" | 
					
						
							|  |  |  |    This specifies the title of the menu. It is displayed at the top of the | 
					
						
							|  |  |  |    screen when using the curses frontend | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Categories: | 
					
						
							|  |  |  |    A <category> contains members. The category tag can contain a number of | 
					
						
							|  |  |  |    different attributes to specify different behavior. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Category Attributes: | 
					
						
							|  |  |  |    name="MENUSELECT_APPS" | 
					
						
							|  |  |  |    The name attribute is required. This is the name of the variable that will | 
					
						
							|  |  |  |    be in the output from menuselect. | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  |    displayname="Applications" | 
					
						
							|  |  |  |    If this is specfied, this is what will be shown in the menu to the user. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    positive_output="yes" | 
					
						
							|  |  |  |    The default for menuselect is to output all of the members of a category | 
					
						
							|  |  |  |    that are *not* selected. This is because it is often convenient to be able | 
					
						
							|  |  |  |    to define a full list in the Makefile and then filter out the results from | 
					
						
							|  |  |  |    menuselect. Using GNU make, an example of this would be: | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  |    APPS:=$(filter-out $(MENUSELECT_APPS),$(APPS)) | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    remove_on_change=".lastclean" | 
					
						
							|  |  |  |    This attribute can contain a space delimited list of files to be deleted | 
					
						
							|  |  |  |    when it is time to build an output file if any of the members of this | 
					
						
							|  |  |  |    category have changed values from their values for existing input when the | 
					
						
							|  |  |  |    application was started. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Members: | 
					
						
							|  |  |  |    A <member> contains conflicts and dependencies. The member tag can contain a | 
					
						
							|  |  |  |    number of different attributes to specify different behavior. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Member Attributes: | 
					
						
							|  |  |  |    name="app_meetme" | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  |    The name attribute is required. This is the value that will be added to the | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  |    variable specified by the category when selected (or not selected) depending | 
					
						
							|  |  |  |    on the setting of the positive_output attribute of the category. | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  |    displayname="Call Conferencing Application" | 
					
						
							|  |  |  |    If this is specified, this will be provided as a description of this member | 
					
						
							|  |  |  |    when the cursor is on it in the menu. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    remove_on_change="apps/app_meetme.o apps/app_meetme.so" | 
					
						
							| 
									
										
										
										
											2021-10-30 21:04:34 -04:00
										 |  |  |    This attribute can contain a space delimited list of files to be deleted | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  |    when it is time to build an output file if the value of this member has | 
					
						
							|  |  |  |    changed from its value in any existing input when the application was | 
					
						
							|  |  |  |    started. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Dependencies: | 
					
						
							|  |  |  |    A dependency for a <member> is specified using a <depend> tag. The name of | 
					
						
							|  |  |  |    the dependency corresponds to names in the MENUSELECT_DEPS file. This is an | 
					
						
							|  |  |  |    example of specifying a dependency for a member: | 
					
						
							|  |  |  |       <member name="app_meetme"> | 
					
						
							|  |  |  |          <depend>zaptel</depend> | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  |       </member> | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Conflicts: | 
					
						
							|  |  |  |    A conflict for a <member> is specified using a <conflict> tag. The name of | 
					
						
							|  |  |  |    the conflict corresponds to names in the MENUSELECT_DEPS file. This is an | 
					
						
							|  |  |  |    example of specifying a dependency for a member: | 
					
						
							|  |  |  |       <member name="res_musiconhold"> | 
					
						
							|  |  |  |          <conflict>win32</conflict> | 
					
						
							|  |  |  |       </member> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | REPORTING BUGS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Any bug reports or feature enhancement submissions to menuselect should be | 
					
						
							| 
									
										
										
										
											2023-05-03 11:38:41 -04:00
										 |  |  | submitted at https://github.com/asterisk/asterisk/issues/ | 
					
						
							| 
									
										
										
										
											2014-07-17 18:42:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Thank you! |