mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
OpenSSL is one of those packages that often have alternatives with later versions. For instance, CentOS/EL 7 has an openssl package at version 1.0.2 but there's an openssl11 package from the epel repository that has 1.1.1. This gets installed to /usr/include/openssl11 and /usr/lib64/openssl11. Unfortunately, the existing --with-ssl and --with-crypto ./configure options expect to point to a source tree and don't work in this situation. Also unfortunately, the checks in ./configure don't use pkg-config. In order to make this work with the existing situation, you'd have to run... ./configure --with-ssl=/usr/lib64/openssl11 \ --with-crypto=/usr/lib64/openssl11 \ CFLAGS=-I/usr/include/openssl11 BUT... those options don't get passed down to bundled pjproject so when you run make, you have to include the CFLAGS again which is a big pain. Oh... To make matters worse, although you can specify PJPROJECT_CONFIGURE_OPTS on the ./configure command line, they don't get saved so if you do a make clean, which will force a re-configure of bundled pjproject, those options don't get used. So... * In configure.ac... Since pkg-config is installed by install_prereq anyway, we now use it to check for the system openssl >= 1.1.0. If that works, great. If not, we check for the openssl11 package. If that works, great. If not, we fall back to just checking for any openssl. If pkg-config isn't installed for some reason, or --with-ssl=<dir> or --with-crypto=<dir> were specified on the ./configure command line, we fall back to the existing logic that uses AST_EXT_LIB_CHECK(). * The whole OpenSSL check process has been moved up before THIRD_PARTY_CONFIGURE(), which does the initial pjproject bundled configure, is run. This way the results of the above checks, which may result in new include or library directories, is included. * Although not strictly needed for openssl, We now save the value of PJPROJECT_CONFIGURE_OPTS in the makeopts file so it can be used again if a re-configure is triggered. ASTERISK-29693 Change-Id: I341ab7603e6b156aa15a66f43675ac5029d5fbde
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). libxml2 -- This library, the XML C parser and toolkit of Gnome, is used for XML parsing. (http://xmlsoft.org/) 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. 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: APPS:=$(filter-out $(MENUSELECT_APPS),$(APPS)) 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" The name attribute is required. This is the value that will be added to the variable specified by the category when selected (or not selected) depending on the setting of the positive_output attribute of the category. 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" This attribute can contain a space delimeted list of files to be deleted 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> </member> 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 submitted at https://issues.asterisk.org/ Thank you!