From nobody Mon Feb 9 16:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1518342523631425.2832564512835; Sun, 11 Feb 2018 01:48:43 -0800 (PST) Received: from localhost ([::1]:40806 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ekoFW-0008N1-OO for importer@patchew.org; Sun, 11 Feb 2018 04:48:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54090) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eko3e-00072Y-I3 for qemu-devel@nongnu.org; Sun, 11 Feb 2018 04:36:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eko3Y-0006N1-HR for qemu-devel@nongnu.org; Sun, 11 Feb 2018 04:36:26 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:41710 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eko3Y-0006HU-3q for qemu-devel@nongnu.org; Sun, 11 Feb 2018 04:36:20 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5F4FC8182D28; Sun, 11 Feb 2018 09:36:14 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-43.ams2.redhat.com [10.36.116.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 19B362166BAE; Sun, 11 Feb 2018 09:36:14 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id AE59C1138657; Sun, 11 Feb 2018 10:36:07 +0100 (CET) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Sun, 11 Feb 2018 10:35:47 +0100 Message-Id: <20180211093607.27351-10-armbru@redhat.com> In-Reply-To: <20180211093607.27351-1-armbru@redhat.com> References: <20180211093607.27351-1-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Sun, 11 Feb 2018 09:36:14 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Sun, 11 Feb 2018 09:36:14 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'armbru@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 09/29] qapi-gen: Convert from getopt to argparse X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: marcandre.lureau@redhat.com, mdroth@linux.vnet.ibm.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" argparse is nicer to use than getopt, and gives us --help almost for free. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Reviewed-by: Marc-Andr=C3=A9 Lureau --- scripts/qapi-gen.py | 48 ++++++++++++++++++++++++++++++----------------= -- scripts/qapi/common.py | 43 ------------------------------------------- 2 files changed, 30 insertions(+), 61 deletions(-) diff --git a/scripts/qapi-gen.py b/scripts/qapi-gen.py index 2100ca1145..e5be484e3e 100755 --- a/scripts/qapi-gen.py +++ b/scripts/qapi-gen.py @@ -4,8 +4,11 @@ # This work is licensed under the terms of the GNU GPL, version 2 or later. # See the COPYING file in the top-level directory. =20 +from __future__ import print_function +import argparse +import re import sys -from qapi.common import parse_command_line, QAPISchema +from qapi.common import QAPISchema from qapi.types import gen_types from qapi.visit import gen_visit from qapi.commands import gen_commands @@ -15,26 +18,35 @@ from qapi.doc import gen_doc =20 =20 def main(argv): - (input_file, output_dir, prefix, opts) =3D \ - parse_command_line('bu', ['builtins', 'unmask-non-abi-names']) + parser =3D argparse.ArgumentParser( + description=3D'Generate code from a QAPI schema') + parser.add_argument('-b', '--builtins', action=3D'store_true', + help=3D"generate code for built-in types") + parser.add_argument('-o', '--output_dir', action=3D'store', default=3D= '', + help=3D"write output to directory OUTPUT_DIR") + parser.add_argument('-p', '--prefix', action=3D'store', default=3D'', + help=3D"prefix for symbols") + parser.add_argument('-u', '--unmask-non-abi-names', action=3D'store_tr= ue', + dest=3D'unmask', + help=3D"expose non-ABI names in introspection") + parser.add_argument('schema', action=3D'store') + args =3D parser.parse_args() =20 - opt_builtins =3D False - opt_unmask =3D False + match =3D re.match(r'([A-Za-z_.-][A-Za-z0-9_.-]*)?', args.prefix) + if match.end() !=3D len(args.prefix): + print("%s: 'funny character '%s' in argument of --prefix" + % (sys.argv[0], args.prefix[match.end()]), + file=3Dsys.stderr) + sys.exit(1) =20 - for o, a in opts: - if o in ('-b', '--builtins'): - opt_builtins =3D True - if o in ('-u', '--unmask-non-abi-names'): - opt_unmask =3D True + schema =3D QAPISchema(args.schema) =20 - schema =3D QAPISchema(input_file) - - gen_types(schema, output_dir, prefix, opt_builtins) - gen_visit(schema, output_dir, prefix, opt_builtins) - gen_commands(schema, output_dir, prefix) - gen_events(schema, output_dir, prefix) - gen_introspect(schema, output_dir, prefix, opt_unmask) - gen_doc(schema, output_dir, prefix) + gen_types(schema, args.output_dir, args.prefix, args.builtins) + gen_visit(schema, args.output_dir, args.prefix, args.builtins) + gen_commands(schema, args.output_dir, args.prefix) + gen_events(schema, args.output_dir, args.prefix) + gen_introspect(schema, args.output_dir, args.prefix, args.unmask) + gen_doc(schema, args.output_dir, args.prefix) =20 =20 if __name__ =3D=3D '__main__': diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 868ec25deb..8290795dc1 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -13,7 +13,6 @@ =20 from __future__ import print_function import errno -import getopt import os import re import string @@ -1924,48 +1923,6 @@ def build_params(arg_type, boxed, extra): =20 =20 # -# Common command line parsing -# - - -def parse_command_line(extra_options=3D'', extra_long_options=3D[]): - - try: - opts, args =3D getopt.gnu_getopt(sys.argv[1:], - 'p:o:' + extra_options, - ['prefix=3D', 'output-dir=3D'] - + extra_long_options) - except getopt.GetoptError as err: - print("%s: %s" % (sys.argv[0], str(err)), file=3Dsys.stderr) - sys.exit(1) - - output_dir =3D '' - prefix =3D '' - extra_opts =3D [] - - for oa in opts: - o, a =3D oa - if o in ('-p', '--prefix'): - match =3D re.match(r'([A-Za-z_.-][A-Za-z0-9_.-]*)?', a) - if match.end() !=3D len(a): - print("%s: 'funny character '%s' in argument of --prefix" \ - % (sys.argv[0], a[match.end()]), file=3Dsys.stderr) - sys.exit(1) - prefix =3D a - elif o in ('-o', '--output-dir'): - output_dir =3D a + '/' - else: - extra_opts.append(oa) - - if len(args) !=3D 1: - print("%s: need exactly one argument" % sys.argv[0], file=3Dsys.st= derr) - sys.exit(1) - fname =3D args[0] - - return (fname, output_dir, prefix, extra_opts) - - -# # Accumulate and write output # =20 --=20 2.13.6