qemu-devel
[Top][All Lists]
Advanced

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

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


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH, RFC v2] Use help sub-sections to create sub-help options
Date: Thu, 27 Aug 2015 23:37:44 +0200

Hi

On Thu, Aug 27, 2015 at 7:07 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>
> ---
> v2: simplify the dance of #define/#undef, thanks to Marc-André.
>
>  qemu-options.hx | 150 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  vl.c            | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 280 insertions(+), 4 deletions(-)
>


Looks good to me & works fine

Reviewed-by: Marc-André Lureau <address@hidden>

I would prefer to not have all the --help-* in --help-standard, but
that's quite minor. But if you agree, it's perhaps worth the extra
effort though

thanks


> diff --git a/qemu-options.hx b/qemu-options.hx
> index 77f5853..49b78df 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -6,17 +6,123 @@ 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_SELECT_STANDARD) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_STANDARD
>  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 +516,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_BLOCK) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_BLOCK
>  DEFHEADING(Block device options:)
>  STEXI
>  @table @option
> @@ -798,7 +907,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_USB) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_USB
>  DEFHEADING(USB options:)
>  STEXI
>  @table @option
> @@ -862,7 +974,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_DISPLAY) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_DISPLAY
>  DEFHEADING(Display options:)
>  STEXI
>  @table @option
> @@ -1329,7 +1444,10 @@ STEXI
>  @end table
>  ETEXI
>  ARCHHEADING(, QEMU_ARCH_I386)
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_MACHINE) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_MACHINE
>  ARCHHEADING(i386 target only:, QEMU_ARCH_I386)
>  STEXI
>  @table @option
> @@ -1441,7 +1559,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_NETWORK) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_NETWORK
>  DEFHEADING(Network options:)
>  STEXI
>  @table @option
> @@ -1995,7 +2116,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_CHARACTER) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_CHARACTER
>  DEFHEADING(Character device options:)
>  STEXI
>
> @@ -2273,7 +2397,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_URL) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_URL
>  DEFHEADING(Device URL Syntax:)
>  STEXI
>
> @@ -2482,7 +2609,10 @@ ETEXI
>  STEXI
>  @end table
>  ETEXI
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_BT) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_BT
>  DEFHEADING(Bluetooth(R) options:)
>  STEXI
>  @table @option
> @@ -2557,7 +2687,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_TPM) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_TPM
>  #ifdef CONFIG_TPM
>  DEFHEADING(TPM device options:)
>
> @@ -2632,7 +2765,10 @@ ETEXI
>  DEFHEADING()
>
>  #endif
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_KERNEL) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_KERNEL
>  DEFHEADING(Linux/Multiboot boot specific:)
>  STEXI
>
> @@ -2688,7 +2824,10 @@ STEXI
>  @end table
>  ETEXI
>  DEFHEADING()
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_EXPERT) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_EXPERT
>  DEFHEADING(Debug/Expert options:)
>  STEXI
>  @table @option
> @@ -3510,7 +3649,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 +3657,10 @@ STEXI
>  Dump json-encoded vmstate information for current machine type to file
>  in @var{file}
>  ETEXI
> +#endif
>
> +#if defined(QEMU_HELP_SELECT_OBJECT) || !defined(QEMU_HELP_SELECT)
> +#undef QEMU_HELP_SELECT_OBJECT
>  DEFHEADING(Generic object creation)
>
>  DEF("object", HAS_ARG, QEMU_OPTION_object,
> @@ -3571,7 +3713,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..e581dd2 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1931,6 +1931,101 @@ static void help(int exitcode)
>      exit(exitcode);
>  }
>
> +#define QEMU_HELP_SELECT
> +static void help_standard(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_STANDARD
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_block(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_BLOCK
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_usb(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_USB
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_display(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_DISPLAY
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_machine(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_MACHINE
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_network(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_NETWORK
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_character(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_CHARACTER
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_url(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_URL
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_bt(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_BT
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_tpm(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_TPM
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_kernel(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_KERNEL
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_expert(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_EXPERT
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +static void help_object(int exitcode)
> +{
> +#define QEMU_HELP_SELECT_OBJECT
> +#define QEMU_OPTIONS_GENERATE_HELP
> +#include "qemu-options-wrapper.h"
> +    exit(exitcode);
> +}
> +#undef QEMU_HELP_SELECT
> +
> +
>  #define HAS_ARG 0x0001
>
>  typedef struct QEMUOption {
> @@ -3318,6 +3413,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 +3461,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
>



-- 
Marc-André Lureau



reply via email to

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