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

Corey Farrell (JIRA) noreply at issues.asterisk.org
Wed Apr 15 21:27:33 CDT 2015


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

Corey Farrell closed ASTERISK-13271.
------------------------------------

    Resolution: Fixed

> 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
>            Assignee: Corey Farrell
>            Severity: Minor
>         Attachments: makeopts-fix.patch
>
>
>      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