From: Wang Nan [mailto:wangnan0@xxxxxxxxxx]Hmm, OK, I agree the reason why this is useful. Could you reconsider
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.
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.
Thank you,