[asterisk-bugs] [JIRA] (ASTERISK-13271) menuselect sets defaults too late

Matt Jordan (JIRA) noreply at issues.asterisk.org
Wed Feb 25 18:49:34 CST 2015


     [ https://issues.asterisk.org/jira/browse/ASTERISK-13271?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Matt Jordan updated ASTERISK-13271:
-----------------------------------

    Description: 
     The main Makefile contains the following target (which is called at the start of the all target):

{noformat}
menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts
        menuselect/menuselect --check-deps menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
{noformat}

The purpose of this target is to allow the user to have {{/etc/asterisk.makeopts}} and/or {{~/.asterisk.makeopts}} to have your options set for you (i.e. to easily set the same options when upgrading as documented in "Build Process (module selection)" section of UPGRADE-1.4.txt; however, it doesn't work.

     The bug is in {{menuselect/menuselect.c}}.  Its {{main()}} function contains the following:

{code}
...
 1414   for (x = 1; x < argc; x++) {
 1415     if (!strcmp(argv[x], "--check-deps"))
 1416       check_deps = 1;
 1417     else {
 1418       res = parse_existing_config(argv[x]);
 1419       if (!res && !strcasecmp(argv[x], OUTPUT_MAKEOPTS_DEFAULT))
 1420         existing_config = 1;
 1421       res = 0;
 1422     }
 1423   }
...
 1430   if (!existing_config)
 1431     process_defaults();
 1432   else if (check_deps)
 1433     res = sanity_check();
...
{code}

The loop starting at 1414 processes the arguments to menuselect.  Starting at 1418 it processes things that are files.  At 1419 if {{menuselect.makeopts}} is seen and successfully processed then it sets the {{existing_config}} flag.  The first time that the {{menuselect.makeopts}} target of the main Makefile is called, the {{menuselect.makeopts}} file does not exist.  However, if {{/etc/asterisk.makeopts}} or {{~/.asterisk.makeopts}} does, then it will be processed.  If you use a negative member to flip an option from its default (i.e. {{MENUSELECT_PBX=-pbx_gtkconsole}}) this will happen.  However, because the {{existing_config}} flag hasn't been set then down in line 1431 all options will be set to their default negating the effect of the options that you set.  {{menuselect}} will then write out a {{menuselect.makeopts}} containing all the default options.

     If you then do "make menuselect.makeopts" a second time, it would work because menuselect.makeopts exists so the existing_config flag gets set.

*ADDITIONAL INFORMATION*

     I work around this problem by doing "make menuselect.makeopts" after running configure.  This way when "make all" runs the {{menuselect.makeopts}} target, the {{menuselect.makeopts}} file exists so it works properly.

     Additionally, it would be nice if you could set a positive option (i.e. {{MENUSELECT_PBX=+pbx_gtkconsole}}) to always enable an option regardless of its current setting (assuming dependencies have been met).

  was:
     The main Makefile contains the following target (which is called at the start of the all target):

menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts
        menuselect/menuselect --check-deps menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)

The purpose of this target is to allow the user to have /etc/asterisk.makeopts and/or ~/.asterisk.makeopts to have your options set for you (i.e. to easily set the same options when upgrading as documented in "Build Process (module selection)" section of UPGRADE-1.4.txt; however, it doesn't work.

     The bug is in menuselect/menuselect.c.  Its main() function contains the following:

...
 1414   for (x = 1; x < argc; x++) {
 1415     if (!strcmp(argv[x], "--check-deps"))
 1416       check_deps = 1;
 1417     else {
 1418       res = parse_existing_config(argv[x]);
 1419       if (!res && !strcasecmp(argv[x], OUTPUT_MAKEOPTS_DEFAULT))
 1420         existing_config = 1;
 1421       res = 0;
 1422     }
 1423   }
...
 1430   if (!existing_config)
 1431     process_defaults();
 1432   else if (check_deps)
 1433     res = sanity_check();
...

The loop starting at 1414 processes the arguments to menuselect.  Starting at 1418 it processes things that are files.  At 1419 if menuselect.makeopts is seen and successfully processed then it sets the existing_config flag.  The first time that the menuselect.makeopts target of the main Makefile is called, the menuselect.makeopts file does not exist.  However, if /etc/asterisk.makeopts or ~/.asterisk.makeopts does, then it will be processed.  If you use a negative member to flip an option from its default (i.e. MENUSELECT_PBX=-pbx_gtkconsole) this will happen.  However, because the existing_config flag hasn't been set then down in line 1431 all options will be set to their default negating the effect of the options that you set.  menuselect will then write out a menuselect.makeopts containing all the default options.

     If you then do "make menuselect.makeopts" a second time, it would work because menuselect.makeopts exists so the existing_config flag gets set.

****** ADDITIONAL INFORMATION ******

     I work around this problem by doing "make menuselect.makeopts" after running configure.  This way when "make all" runs the menuselect.makeopts target, the menuselect.makeopts file exists so it works properly.

     Additionally, it would be nice if you could set a positive option (i.e. MENUSELECT_PBX=+pbx_gtkconsole) to always enable an option regardless of its current setting (assuming dependencies have been met).


> menuselect sets defaults too late
> ---------------------------------
>
>                 Key: ASTERISK-13271
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-13271
>             Project: Asterisk
>          Issue Type: Bug
>          Components: Utilities/General
>            Reporter: John Nemeth
>            Severity: Minor
>
>      The main Makefile contains the following target (which is called at the start of the all target):
> {noformat}
> menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts
>         menuselect/menuselect --check-deps menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
> {noformat}
> The purpose of this target is to allow the user to have {{/etc/asterisk.makeopts}} and/or {{~/.asterisk.makeopts}} to have your options set for you (i.e. to easily set the same options when upgrading as documented in "Build Process (module selection)" section of UPGRADE-1.4.txt; however, it doesn't work.
>      The bug is in {{menuselect/menuselect.c}}.  Its {{main()}} function contains the following:
> {code}
> ...
>  1414   for (x = 1; x < argc; x++) {
>  1415     if (!strcmp(argv[x], "--check-deps"))
>  1416       check_deps = 1;
>  1417     else {
>  1418       res = parse_existing_config(argv[x]);
>  1419       if (!res && !strcasecmp(argv[x], OUTPUT_MAKEOPTS_DEFAULT))
>  1420         existing_config = 1;
>  1421       res = 0;
>  1422     }
>  1423   }
> ...
>  1430   if (!existing_config)
>  1431     process_defaults();
>  1432   else if (check_deps)
>  1433     res = sanity_check();
> ...
> {code}
> The loop starting at 1414 processes the arguments to menuselect.  Starting at 1418 it processes things that are files.  At 1419 if {{menuselect.makeopts}} is seen and successfully processed then it sets the {{existing_config}} flag.  The first time that the {{menuselect.makeopts}} target of the main Makefile is called, the {{menuselect.makeopts}} file does not exist.  However, if {{/etc/asterisk.makeopts}} or {{~/.asterisk.makeopts}} does, then it will be processed.  If you use a negative member to flip an option from its default (i.e. {{MENUSELECT_PBX=-pbx_gtkconsole}}) this will happen.  However, because the {{existing_config}} flag hasn't been set then down in line 1431 all options will be set to their default negating the effect of the options that you set.  {{menuselect}} will then write out a {{menuselect.makeopts}} containing all the default options.
>      If you then do "make menuselect.makeopts" a second time, it would work because menuselect.makeopts exists so the existing_config flag gets set.
> *ADDITIONAL INFORMATION*
>      I work around this problem by doing "make menuselect.makeopts" after running configure.  This way when "make all" runs the {{menuselect.makeopts}} target, the {{menuselect.makeopts}} file exists so it works properly.
>      Additionally, it would be nice if you could set a positive option (i.e. {{MENUSELECT_PBX=+pbx_gtkconsole}}) to always enable an option regardless of its current setting (assuming dependencies have been met).



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list