[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: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH, RFC] Use help sub-sections to create sub-help options |
Date: |
Thu, 27 Aug 2015 17:44:39 +0200 |
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.
> 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
>
>
--
Marc-André Lureau