From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=56296 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OLdY0-0005sX-AV for qemu-devel@nongnu.org; Mon, 07 Jun 2010 10:43:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OLdXh-00057N-PZ for qemu-devel@nongnu.org; Mon, 07 Jun 2010 10:43:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:5849) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OLdXh-00056Q-E8 for qemu-devel@nongnu.org; Mon, 07 Jun 2010 10:43:09 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o57Eh8Qm016016 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 7 Jun 2010 10:43:08 -0400 From: Markus Armbruster Subject: Re: [Qemu-devel] [PATCH 5/5] qdev: Add new '-device help' option, shows all devices and properties References: <383cd43ef87e1a699648301657902d3fe20f2ec5.1275309375.git.amit.shah@redhat.com> Date: Mon, 07 Jun 2010 16:43:05 +0200 In-Reply-To: <383cd43ef87e1a699648301657902d3fe20f2ec5.1275309375.git.amit.shah@redhat.com> (Amit Shah's message of "Mon, 31 May 2010 18:11:31 +0530") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Amit Shah Cc: Gerd Hoffmann , qemu list , Juan Quintela I like PATCH 1-3/5, but this one needs discussion. Amit Shah writes: > The new '-device help' option shows all the devices that are registered > with qdev and prints out all the properties each device has, along with > the description for each property. > > This is useful in creating automatic documentation for all the options > that we have and support. > > Signed-off-by: Amit Shah > --- > hw/qdev.c | 15 +++++++++++---- > 1 files changed, 11 insertions(+), 4 deletions(-) Documentation update missing: qemu-options.hx > diff --git a/hw/qdev.c b/hw/qdev.c > index 89ba986..4be2f66 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -151,7 +151,7 @@ static int set_property(const char *name, const char *value, void *opaque) > return 0; > } > > -static int show_device_props(const char *driver) > +static int show_device_props(const char *driver, const char *prefix) > { > DeviceInfo *info; > Property *prop; > @@ -161,6 +161,10 @@ static int show_device_props(const char *driver) > return 0; > } > > + if (!prefix) { > + prefix = ""; > + } > + Just make the caller pass "" instead of NULL. > for (prop = info->props; prop && prop->name; prop++) { > /* > * TODO Properties without a parser are just for dirty hacks. > @@ -171,7 +175,7 @@ static int show_device_props(const char *driver) > if (!prop->info->parse) { > continue; /* no way to set it, don't show */ > } > - error_printf("%s.%s=%s, %s\n", info->name, prop->name, > + error_printf("%s%s.%s=%s, %s\n", prefix, info->name, prop->name, > prop->info->name, prop->desc ?: ""); > } > return 1; > @@ -183,12 +187,15 @@ int qdev_device_help(QemuOpts *opts) > DeviceInfo *info; > > driver = qemu_opt_get(opts, "driver"); > - if (driver && !strcmp(driver, "?")) { > + if (driver && (!strcmp(driver, "?") || !strcmp(driver, "help"))) { > for (info = device_info_list; info != NULL; info = info->next) { > if (info->no_user) { > continue; /* not available, don't show */ > } > qdev_print_devinfo(info); > + if (!strcmp(driver, "help")) { > + show_device_props(info->name, "\t"); > + } > } > return 1; > } There is "-device \?" and "-device help", but the user interface provides no clue about the difference between them. "-device help" loses when we ever pick up a device model with name "help". Not that "?" was a particularly smart choice... Do we really need two kinds of help output? Where the second is basically the same as "-device FOO,\?" for all FOO? Is that convenience worth the extra UI complexity? Doing it in the shell isn't exactly hard: $ for i in `qemu -device \? 2>&1 | awk -F \" '{ print $2 }'`; do qemu -device $i,\?; done > @@ -197,7 +204,7 @@ int qdev_device_help(QemuOpts *opts) > return 0; > } > > - return show_device_props(driver); > + return show_device_props(driver, NULL); > } > > DeviceState *qdev_device_add(QemuOpts *opts)