qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH, RFC] Use help sub-sections to create sub-help o


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH, RFC] Use help sub-sections to create sub-help options
Date: Thu, 27 Aug 2015 17:50:37 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0


On 27/08/2015 17:44, Marc-André Lureau wrote:
> Hi
> 
> On Thu, Aug 27, 2015 at 5:20 PM, Laurent Vivier <address@hidden> wrote:
>> As '-help' output is 400 lines long it is not easy
>> to find information, but generally we know from
>> which area we want the information.
>>
>> As subsections already exist in the help description,
>> add some command options to only display the wanted
>> subsection.
>>
>> As more is better, this patch adds 13 lines to the -help output:
>>
>>     -help-standard  display standard options
>>     -help-block     display block options
>>     -help-usb       display usb options
>>     -help-display   display display options
>>     -help-machine   display machine options
>>     -help-network   display network options
>>     -help-character display character options
>>     -help-url       display url options
>>     -help-bt        display bt options
>>     -help-tpm       display tpm options
>>     -help-kernel    display kernel options
>>     -help-expert    display expert options
>>     -help-object    display object options
>>
>> Example:
>>
>>     $ qemu-system-x86_64 -help-kernel
>>     Linux/Multiboot boot specific:
>>     -kernel bzImage use 'bzImage' as kernel image
>>     -append cmdline use 'cmdline' as kernel command line
>>     -initrd file    use 'file' as initial ram disk
>>     -dtb    file    use 'file' as device tree image
>>
>> Signed-off-by: Laurent Vivier <address@hidden>
>> ---
>>  qemu-options.hx | 137 +++++++++++++++++++++++++++++++++++++++++++--
>>  vl.c            | 169 
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> The patch works as expected, although it's a bit cumbersome this
> #define #undef dance, I don't have a good idea either, but maybe it
> would be slightly easier with an ENABLE_ALL and ENABLE_FOO, I think
> that could avoid the big list of #define #undef and make it a bit
> simpler too.

I agree with you, but my goal was to keep the default behavior if
nothing is defined. But if everyone agrees, I can change that.

> 
> 
>>  2 files changed, 302 insertions(+), 4 deletions(-)
>>
>> diff --git a/qemu-options.hx b/qemu-options.hx
>> index 77f5853..091cc21 100644
>> --- a/qemu-options.hx
>> +++ b/qemu-options.hx
>> @@ -6,17 +6,122 @@ HXCOMM construct option structures, enums and help 
>> message for specified
>>  HXCOMM architectures.
>>  HXCOMM HXCOMM can be used for comments, discarded from both texi and C
>>
>> +#if !(defined(QEMU_HELP_DISABLE_STANDARD) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Standard options:)
>>  STEXI
>>  @table @option
>>  ETEXI
>>
>>  DEF("help", 0, QEMU_OPTION_h,
>> -    "-h or -help     display this help and exit\n", QEMU_ARCH_ALL)
>> +    "-h or -help     display all help options and exit\n", QEMU_ARCH_ALL)
>>  STEXI
>>  @item -h
>>  @findex -h
>> -Display help and exit
>> +Display all help options and exit
>> +ETEXI
>> +
>> +DEF("help-standard", 0, QEMU_OPTION_h_standard,
>> +    "-help-standard  display standard options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-standard
>> address@hidden -help-standard
>> +Display standard options
>> +ETEXI
>> +
>> +DEF("help-block", 0, QEMU_OPTION_h_block,
>> +    "-help-block     display block options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-block
>> address@hidden -help-block
>> +Display block options
>> +ETEXI
>> +
>> +DEF("help-usb", 0, QEMU_OPTION_h_usb,
>> +    "-help-usb       display usb options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-usb
>> address@hidden -help-usb
>> +Display usb options
>> +ETEXI
>> +
>> +DEF("help-display", 0, QEMU_OPTION_h_display,
>> +    "-help-display   display display options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-display
>> address@hidden -help-display
>> +Display display options
>> +ETEXI
>> +
>> +DEF("help-machine", 0, QEMU_OPTION_h_machine,
>> +    "-help-machine   display machine options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-machine
>> address@hidden -help-machine
>> +Display machine options
>> +ETEXI
>> +
>> +DEF("help-network", 0, QEMU_OPTION_h_network,
>> +    "-help-network   display network options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-network
>> address@hidden -help-network
>> +Display network options
>> +ETEXI
>> +
>> +DEF("help-character", 0, QEMU_OPTION_h_character,
>> +    "-help-character display character options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-character
>> address@hidden -help-character
>> +Display character options
>> +ETEXI
>> +
>> +DEF("help-url", 0, QEMU_OPTION_h_url,
>> +    "-help-url       display url options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-url
>> address@hidden -help-url
>> +Display url options
>> +ETEXI
>> +
>> +DEF("help-bt", 0, QEMU_OPTION_h_bt,
>> +    "-help-bt        display bt options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-bt
>> address@hidden -help-bt
>> +Display bt options
>> +ETEXI
>> +
>> +DEF("help-tpm", 0, QEMU_OPTION_h_tpm,
>> +    "-help-tpm       display tpm options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-tpm
>> address@hidden -help-tpm
>> +Display tpm options
>> +ETEXI
>> +
>> +DEF("help-kernel", 0, QEMU_OPTION_h_kernel,
>> +    "-help-kernel    display kernel options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-kernel
>> address@hidden -help-kernel
>> +Display kernel options
>> +ETEXI
>> +
>> +DEF("help-expert", 0, QEMU_OPTION_h_expert,
>> +    "-help-expert    display expert options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-expert
>> address@hidden -help-expert
>> +Display expert options
>> +ETEXI
>> +
>> +DEF("help-object", 0, QEMU_OPTION_h_object,
>> +    "-help-object    display object options\n", QEMU_ARCH_ALL)
>> +STEXI
>> address@hidden -help-object
>> address@hidden -help-object
>> +Display object options
>>  ETEXI
>>
>>  DEF("version", 0, QEMU_OPTION_version,
>> @@ -410,7 +515,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_BLOCK) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Block device options:)
>>  STEXI
>>  @table @option
>> @@ -798,7 +905,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_USB) && defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(USB options:)
>>  STEXI
>>  @table @option
>> @@ -862,7 +971,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_DISPLAY) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Display options:)
>>  STEXI
>>  @table @option
>> @@ -1329,7 +1440,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  ARCHHEADING(, QEMU_ARCH_I386)
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_MACHINE) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  ARCHHEADING(i386 target only:, QEMU_ARCH_I386)
>>  STEXI
>>  @table @option
>> @@ -1441,7 +1554,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_NETWORK) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Network options:)
>>  STEXI
>>  @table @option
>> @@ -1995,7 +2110,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_CHARACTER) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Character device options:)
>>  STEXI
>>
>> @@ -2273,7 +2390,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_URL) && defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Device URL Syntax:)
>>  STEXI
>>
>> @@ -2482,7 +2601,9 @@ ETEXI
>>  STEXI
>>  @end table
>>  ETEXI
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_BT) && defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Bluetooth(R) options:)
>>  STEXI
>>  @table @option
>> @@ -2557,7 +2678,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_TPM) && defined(QEMU_OPTIONS_GENERATE_HELP))
>>  #ifdef CONFIG_TPM
>>  DEFHEADING(TPM device options:)
>>
>> @@ -2632,7 +2755,9 @@ ETEXI
>>  DEFHEADING()
>>
>>  #endif
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_KERNEL) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Linux/Multiboot boot specific:)
>>  STEXI
>>
>> @@ -2688,7 +2813,9 @@ STEXI
>>  @end table
>>  ETEXI
>>  DEFHEADING()
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_EXPERT) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Debug/Expert options:)
>>  STEXI
>>  @table @option
>> @@ -3510,7 +3637,7 @@ DEF("dump-vmstate", HAS_ARG, QEMU_OPTION_dump_vmstate,
>>      "                Output vmstate information in JSON format to file.\n"
>>      "                Use the scripts/vmstate-static-checker.py file to\n"
>>      "                check for possible regressions in migration code\n"
>> -    "                by comparing two such vmstate dumps.",
>> +    "                by comparing two such vmstate dumps.\n",
>>      QEMU_ARCH_ALL)
>>  STEXI
>>  @item -dump-vmstate @var{file}
>> @@ -3518,7 +3645,9 @@ STEXI
>>  Dump json-encoded vmstate information for current machine type to file
>>  in @var{file}
>>  ETEXI
>> +#endif
>>
>> +#if !(defined(QEMU_HELP_DISABLE_OBJECT) && 
>> defined(QEMU_OPTIONS_GENERATE_HELP))
>>  DEFHEADING(Generic object creation)
>>
>>  DEF("object", HAS_ARG, QEMU_OPTION_object,
>> @@ -3571,7 +3700,7 @@ to the RNG daemon.
>>  @end table
>>
>>  ETEXI
>> -
>> +#endif
>>
>>  HXCOMM This is the last statement. Insert new options before this line!
>>  STEXI
>> diff --git a/vl.c b/vl.c
>> index 584ca88..65a815f 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -1931,6 +1931,136 @@ static void help(int exitcode)
>>      exit(exitcode);
>>  }
>>
>> +#define QEMU_HELP_DISABLE_BLOCK
>> +#define QEMU_HELP_DISABLE_USB
>> +#define QEMU_HELP_DISABLE_DISPLAY
>> +#define QEMU_HELP_DISABLE_MACHINE
>> +#define QEMU_HELP_DISABLE_NETWORK
>> +#define QEMU_HELP_DISABLE_CHARACTER
>> +#define QEMU_HELP_DISABLE_URL
>> +#define QEMU_HELP_DISABLE_BT
>> +#define QEMU_HELP_DISABLE_TPM
>> +#define QEMU_HELP_DISABLE_KERNEL
>> +#define QEMU_HELP_DISABLE_EXPERT
>> +#define QEMU_HELP_DISABLE_OBJECT
>> +
>> +static void help_standard(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +
>> +#define QEMU_HELP_DISABLE_STANDARD
>> +#undef QEMU_HELP_DISABLE_BLOCK
>> +static void help_block(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_BLOCK
>> +#undef QEMU_HELP_DISABLE_USB
>> +static void help_usb(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_USB
>> +#undef QEMU_HELP_DISABLE_DISPLAY
>> +static void help_display(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_DISPLAY
>> +#undef QEMU_HELP_DISABLE_MACHINE
>> +static void help_machine(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_MACHINE
>> +#undef QEMU_HELP_DISABLE_NETWORK
>> +static void help_network(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_NETWORK
>> +#undef QEMU_HELP_DISABLE_CHARACTER
>> +static void help_character(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_CHARACTER
>> +#undef QEMU_HELP_DISABLE_URL
>> +static void help_url(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_URL
>> +#undef QEMU_HELP_DISABLE_BT
>> +static void help_bt(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_BT
>> +#undef QEMU_HELP_DISABLE_TPM
>> +static void help_tpm(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_TPM
>> +#undef QEMU_HELP_DISABLE_KERNEL
>> +static void help_kernel(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_KERNEL
>> +#undef QEMU_HELP_DISABLE_EXPERT
>> +static void help_expert(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#define QEMU_HELP_DISABLE_EXPERT
>> +#undef QEMU_HELP_DISABLE_OBJECT
>> +static void help_object(int exitcode)
>> +{
>> +#define QEMU_OPTIONS_GENERATE_HELP
>> +#include "qemu-options-wrapper.h"
>> +    exit(exitcode);
>> +}
>> +#undef QEMU_HELP_DISABLE_STANDARD
>> +#undef QEMU_HELP_DISABLE_BLOCK
>> +#undef QEMU_HELP_DISABLE_USB
>> +#undef QEMU_HELP_DISABLE_DISPLAY
>> +#undef QEMU_HELP_DISABLE_NETWORK
>> +#undef QEMU_HELP_DISABLE_CHARACTER
>> +#undef QEMU_HELP_DISABLE_URL
>> +#undef QEMU_HELP_DISABLE_BT
>> +#undef QEMU_HELP_DISABLE_TPM
>> +#undef QEMU_HELP_DISABLE_KERNEL
>> +#undef QEMU_HELP_DISABLE_EXPERT
>> +#undef QEMU_HELP_DISABLE_OBJECT
>> +
>> +
>>  #define HAS_ARG 0x0001
>>
>>  typedef struct QEMUOption {
>> @@ -3318,6 +3448,42 @@ int main(int argc, char **argv, char **envp)
>>              case QEMU_OPTION_h:
>>                  help(0);
>>                  break;
>> +            case QEMU_OPTION_h_standard:
>> +                help_standard(0);
>> +                break;
>> +            case QEMU_OPTION_h_block:
>> +                help_block(0);
>> +                break;
>> +            case QEMU_OPTION_h_usb:
>> +                help_usb(0);
>> +                break;
>> +            case QEMU_OPTION_h_display:
>> +                help_display(0);
>> +                break;
>> +            case QEMU_OPTION_h_machine:
>> +                help_machine(0);
>> +                break;
>> +            case QEMU_OPTION_h_network:
>> +                help_network(0);
>> +                break;
>> +            case QEMU_OPTION_h_character:
>> +                help_character(0);
>> +                break;
>> +            case QEMU_OPTION_h_url:
>> +                help_url(0);
>> +                break;
>> +            case QEMU_OPTION_h_bt:
>> +                help_bt(0);
>> +                break;
>> +            case QEMU_OPTION_h_kernel:
>> +                help_kernel(0);
>> +                break;
>> +            case QEMU_OPTION_h_expert:
>> +                help_expert(0);
>> +                break;
>> +            case QEMU_OPTION_h_object:
>> +                help_object(0);
>> +                break;
>>              case QEMU_OPTION_version:
>>                  version();
>>                  exit(0);
>> @@ -3330,6 +3496,9 @@ int main(int argc, char **argv, char **envp)
>>                  }
>>                  break;
>>  #ifdef CONFIG_TPM
>> +            case QEMU_OPTION_h_tpm:
>> +                help_tpm(0);
>> +                break;
>>              case QEMU_OPTION_tpmdev:
>>                  if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) 
>> {
>>                      exit(1);
>> --
>> 2.1.0
>>
>>
> 
> 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]