"Kewen.Lin" <li...@linux.ibm.com> writes:
> Hi Segher,
>
> on 2020/8/7 锟斤拷锟斤拷10:42, Segher Boessenkool wrote:
>> Hi!
>> 
>> On Fri, Aug 07, 2020 at 10:44:10AM +0800, Kewen.Lin wrote:
>>>> I think this makes a lot of sense.
>>>>
>>>>> btw, not sure whether it's a good idea to move target_option_override_hook
>>>>> call into print_specific_help and use one function local static
>>>>> variable to control it's called once for all kinds of help dumping
>>>>> (possible combination), then can remove the calls in function 
>>>>> common_handle_option.
>>>>
>>>> I cannot easily imagine what that will look like...  it could easily be
>>>> worse than what you have here (callbacks aren't so nice, but there are
>>>> worse things).
>>>>
>>>
>>> I attached opts_alt2.diff to be more specific for this, both alt1 and alt2
>>> follow the existing callback scheme, alt2 aims to avoid possible multiple
>>> times target_option_override_hook calls when we have several --help= or
>>> similar, but I guess alt1 is also fine since the hook should be allowed to
>>> be called more than once.

Yeah.  I guess ideally (and independently of this patch) we'd have a
flag_checking assert that override_options is idempotent, but that
might be tricky to implement.

It looks like there's a subtle (pre-existing) difference in what --help
and --help= do.  --help already calls target_option_override_hook,
but does it at the point that the option occurs.  --help= instead
queues the help until we've finished processing other arguments,
and would therefore take later options into account.

I don't know that one is obviously better than the other though.

> […]
> *opts_alt1.diff*
>
> gcc/ChangeLog:
>
>       * opts-global.c (decode_options): Adjust call to print_help.
>       * opts.c (print_help): Add one function point argument
>       target_option_override_hook and call it before print_specific_help.
>       * opts.h (print_help): Add one more argument to function declare.

I think personally I'd prefer an option (3): call
target_option_override_hook directly in decode_options,
if help_option_arguments is nonempty.  Like you say,
decode_options appears to be the only caller of print_help.

Thanks,
Richard

Reply via email to