Re: [PATCH 1/2] perf tools: Always give options even it not compiled

From: Wangnan (F)
Date: Thu Nov 26 2015 - 04:07:51 EST




On 2015/11/26 16:05, Wangnan (F) wrote:


On 2015/11/20 18:54, åæéå / HIRAMATUïMASAMI wrote:
From: Wang Nan [mailto:wangnan0@xxxxxxxxxx]

This patch keeps options of perf builtins same in all condition. If the
option is disabled because of compiling options, users should be
notified.

This patch does it by introducing a series of new option macros, flags
and field in struct options. For those options disabled by compiling,
OPT_NOTBUILT_NOARG, OPT_NOTBUILT_OPTARG and OPT_NOTBUILT can be used
to record the help messages and the reason why not built them.

Options in 'perf record' and 'perf probe' are fixed by those new macros.
Hmm, OK, I agree the reason why this is useful. Could you reconsider
the implementation, because just cloning the code is ugly and not
maintainable?

It will be better if we can replace OPT_BOOLEAN with;

OPT_DEPENDS(HAVE_DWARF_SUPPORT, BOOLEAN, '\0', "no-inlines", &probe_conf.no_inlines, ...

This may be done by following macros ;

----
#define OPTMSG_HAVE_DWARF_SUPPORT "NO_DWARF"
#ifdef HAVE_DWARF_SUPPORT
#define OPTVAL_HAVE_DWARF_SUPPORT 1
#else
#define OPTVAL_HAVE_DWARF_SUPPORT 0
#endif

#define __OPT_DEPENDS(val, msg, opt, ...) \
{.type = OPTION_NEXT_DEPENDS, .value = (void *)val, .data = msg, }, opt(__VA_ARGS__)

#define _OPT_DEPENDS(val, msg, opt, ...) \
__OPT_DEPENDS(val, msg, opt, __VA_ARGS__)

#define OPT_DEPENDS(flag, opt, ...) \
_OPT_DEPENDS(OPTVAL_ ## flag, OPTMSG_ ## flag, OPT_ ## opt, __VA_ARGS__)
----

And if the parser find OPTION_NEXT_DEPENDS and .value != NULL, it skips next entry.


That would be good, but don't forget we have a options__order() which
reorder the options array. To archive our goal I think we must preprocess
the options array to 'merge' information in the OPTION_NEXT_DEPENDS into
the real option it decorates.


Doing such merging in parse_options_subcommand() is natually but require removing all
'const' decorators from struct options. Too much code changing for such a small
feature...

Will think another solution...

Thank you.

Thank you,




--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/