]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
menuselect: Add a new 'options' support type
authorGeorge Joseph <gjoseph@digium.com>
Mon, 13 Mar 2017 15:45:47 +0000 (09:45 -0600)
committerGeorge Joseph <gjoseph@digium.com>
Mon, 13 Mar 2017 16:01:42 +0000 (10:01 -0600)
The Binaural Rendering patches in the master branch required
menuselect to be updated with a new support type called 'option'.
This allows binaural rendering to be turned on or off when
bridge_softmix is built.  This patch backports the 'option'
functionality to the 13 and 14 branches.

Here's what it looks like in menuselect:

  [*] bridge_simple
  [*] bridge_softmix
      --- Module Options ---
  [ ] binaural_rendering_in_bridge_softmix

To create an option for a module, you can create (or update) the
menuselect-tree xml snippet in the directory where the module
resides and add a member element with an 'option' support_level.

Example (abbreviated) from bridges/bridges.xml:

<member name="binaural_rendering_in_bridge_softmix"
displayname="Enable binaural rendering in bridge_softmix"
remove_on_change="bridges/bridge_softmix.o bridges/bridge_softmix.so">
<support_level>option</support_level>
<depend>bridge_softmix</depend>
<depend>fftw3</depend>
<defaultenabled>no</defaultenabled>
</member>

The 'name' will be added or removed from the MENUSELECT_<dir>
make variable following the standard module "missing means yes"
rules.

Example (abbreviated) from bridges/Makefile:

ifeq ($(findstring binaural_rendering,$(MENUSELECT_BRIDGES)),)
bridge_softmix.o: _ASTCFLAGS+=-DBINAURAL_RENDERING
bridge_softmix.so: LIBS+=$(FFTW3_LIB)
endif

Change-Id: I66d23755ed6e81f8d439cad410f2ffa7c30f25ad

menuselect/menuselect.c
menuselect/menuselect.h

index da972d8b12a26c3c5c878592099e53ff29d9004e..689cebf624661e946641276f606a6cbdbe816016 100644 (file)
@@ -238,6 +238,10 @@ static enum support_level_values string_to_support_level(const char *support_lev
                return SUPPORT_EXTERNAL;
        }
 
+       if (!strcasecmp(support_level, "option")) {
+               return SUPPORT_OPTION;
+       }
+
        return SUPPORT_UNSPECIFIED;
 }
 
@@ -253,6 +257,8 @@ static const char *support_level_to_string(enum support_level_values support_lev
                return "Deprecated";
        case SUPPORT_EXTERNAL:
                return "External";
+       case SUPPORT_OPTION:
+               return "Module Options";
        default:
                return "Unspecified";
        }
@@ -461,7 +467,7 @@ static int process_xml_member_node(xmlNode *node, struct category *cat)
                process_process_xml_category_child_node(cur, mem);
        }
 
-       if (!cat->positive_output) {
+       if (!cat->positive_output && strcasecmp(mem->support_level, "option")) {
                mem->enabled = 1;
                if (!mem->defaultenabled || strcasecmp(mem->defaultenabled, "no")) {
                        mem->was_enabled = 1;
index bf2bf4c4fee08ab713cbc95bed3272aba78a9c79..78ae8eff6df9b0242a7808b9a7ad332b558c6fb9 100644 (file)
@@ -108,7 +108,8 @@ enum support_level_values {
        SUPPORT_DEPRECATED = 2,
        SUPPORT_UNSPECIFIED = 3,
        SUPPORT_EXTERNAL = 4,
-       SUPPORT_COUNT = 5, /* Keep this item at the end of the list. Tracks total number of support levels. */
+       SUPPORT_OPTION = 5,
+       SUPPORT_COUNT = 6, /* Keep this item at the end of the list. Tracks total number of support levels. */
 };
 
 AST_LIST_HEAD_NOLOCK(support_level_bucket, member);