From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37030) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUzRv-0000hr-1L for qemu-devel@nongnu.org; Thu, 27 Aug 2015 11:50:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZUzRp-000529-Qe for qemu-devel@nongnu.org; Thu, 27 Aug 2015 11:50:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41584) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUzRp-00051s-22 for qemu-devel@nongnu.org; Thu, 27 Aug 2015 11:50:41 -0400 References: <1440688813-9229-1-git-send-email-lvivier@redhat.com> From: Laurent Vivier Message-ID: <55DF31CD.1050503@redhat.com> Date: Thu, 27 Aug 2015 17:50:37 +0200 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH, RFC] Use help sub-sections to create sub-help options List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?Q?Marc-Andr=c3=a9_Lureau?= Cc: Paolo Bonzini , QEMU , Markus Armbruster On 27/08/2015 17:44, Marc-Andr=C3=A9 Lureau wrote: > Hi >=20 > On Thu, Aug 27, 2015 at 5:20 PM, Laurent Vivier wr= ote: >> 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 >> --- >> qemu-options.hx | 137 +++++++++++++++++++++++++++++++++++++++++++-- >> vl.c | 169 +++++++++++++++++++++++++++++++++++++++++++++++= +++++++++ >=20 > 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. >=20 >=20 >> 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_GEN= ERATE_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 >> +@item -help-standard >> +@findex -help-standard >> +Display standard options >> +ETEXI >> + >> +DEF("help-block", 0, QEMU_OPTION_h_block, >> + "-help-block display block options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-block >> +@findex -help-block >> +Display block options >> +ETEXI >> + >> +DEF("help-usb", 0, QEMU_OPTION_h_usb, >> + "-help-usb display usb options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-usb >> +@findex -help-usb >> +Display usb options >> +ETEXI >> + >> +DEF("help-display", 0, QEMU_OPTION_h_display, >> + "-help-display display display options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-display >> +@findex -help-display >> +Display display options >> +ETEXI >> + >> +DEF("help-machine", 0, QEMU_OPTION_h_machine, >> + "-help-machine display machine options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-machine >> +@findex -help-machine >> +Display machine options >> +ETEXI >> + >> +DEF("help-network", 0, QEMU_OPTION_h_network, >> + "-help-network display network options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-network >> +@findex -help-network >> +Display network options >> +ETEXI >> + >> +DEF("help-character", 0, QEMU_OPTION_h_character, >> + "-help-character display character options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-character >> +@findex -help-character >> +Display character options >> +ETEXI >> + >> +DEF("help-url", 0, QEMU_OPTION_h_url, >> + "-help-url display url options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-url >> +@findex -help-url >> +Display url options >> +ETEXI >> + >> +DEF("help-bt", 0, QEMU_OPTION_h_bt, >> + "-help-bt display bt options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-bt >> +@findex -help-bt >> +Display bt options >> +ETEXI >> + >> +DEF("help-tpm", 0, QEMU_OPTION_h_tpm, >> + "-help-tpm display tpm options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-tpm >> +@findex -help-tpm >> +Display tpm options >> +ETEXI >> + >> +DEF("help-kernel", 0, QEMU_OPTION_h_kernel, >> + "-help-kernel display kernel options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-kernel >> +@findex -help-kernel >> +Display kernel options >> +ETEXI >> + >> +DEF("help-expert", 0, QEMU_OPTION_h_expert, >> + "-help-expert display expert options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-expert >> +@findex -help-expert >> +Display expert options >> +ETEXI >> + >> +DEF("help-object", 0, QEMU_OPTION_h_object, >> + "-help-object display object options\n", QEMU_ARCH_ALL) >> +STEXI >> +@item -help-object >> +@findex -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_GENERA= TE_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_GENE= RATE_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_GENE= RATE_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_GENE= RATE_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_GE= NERATE_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_GENER= ATE_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_GENER= ATE_HELP)) >> DEFHEADING(Debug/Expert options:) >> STEXI >> @table @option >> @@ -3510,7 +3637,7 @@ DEF("dump-vmstate", HAS_ARG, QEMU_OPTION_dump_vm= state, >> " Output vmstate information in JSON format to fil= e.\n" >> " Use the scripts/vmstate-static-checker.py file t= o\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 fil= e >> in @var{file} >> ETEXI >> +#endif >> >> +#if !(defined(QEMU_HELP_DISABLE_OBJECT) && defined(QEMU_OPTIONS_GENER= ATE_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 lin= e! >> 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 >> >> >=20 >=20 >=20