qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH, RFC v2] Use help sub-sections to create sub-help op


From: Laurent Vivier
Subject: [Qemu-devel] [PATCH, RFC v2] Use help sub-sections to create sub-help options
Date: Thu, 27 Aug 2015 19:07:02 +0200

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(-)

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




reply via email to

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