[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 07/29] qapi: Turn generators into modules
From: |
Michael Roth |
Subject: |
Re: [Qemu-devel] [PATCH v2 07/29] qapi: Turn generators into modules |
Date: |
Fri, 16 Feb 2018 19:29:37 -0600 |
User-agent: |
alot/0.6 |
Quoting Markus Armbruster (2018-02-11 03:35:45)
> The next commit will introduce a common driver program for all
> generators. The generators need to be modules for that. qapi2texi.py
> already is. Make the other generators follow suit.
>
> The changes are actually trivial. Obvious in the diffs once you view
> them with whitespace changes ignored.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> Reviewed-by: Eric Blake <address@hidden>
> Reviewed-by: Marc-André Lureau <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
> ---
> scripts/qapi-commands.py | 43 ++++++++++++++++++--------------
> scripts/qapi-event.py | 43 ++++++++++++++++++--------------
> scripts/qapi-introspect.py | 54 ++++++++++++++++++++++------------------
> scripts/qapi-types.py | 56 ++++++++++++++++++++++-------------------
> scripts/qapi-visit.py | 62
> +++++++++++++++++++++++++---------------------
> 5 files changed, 143 insertions(+), 115 deletions(-)
>
> diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
> index e97e16e828..8584cb5873 100644
> --- a/scripts/qapi-commands.py
> +++ b/scripts/qapi-commands.py
> @@ -255,16 +255,17 @@ class QAPISchemaGenCommandVisitor(QAPISchemaVisitor):
> self._regy += gen_register_command(name, success_response)
>
>
> -(input_file, output_dir, do_c, do_h, prefix, opts) = parse_command_line()
> +def main(argv):
> + (input_file, output_dir, do_c, do_h, prefix, opts) = parse_command_line()
>
> -blurb = '''
> + blurb = '''
> * Schema-defined QAPI/QMP commands
> '''
>
> -genc = QAPIGenC(blurb, __doc__)
> -genh = QAPIGenH(blurb, __doc__)
> + genc = QAPIGenC(blurb, __doc__)
> + genh = QAPIGenH(blurb, __doc__)
>
> -genc.add(mcgen('''
> + genc.add(mcgen('''
> #include "qemu/osdep.h"
> #include "qemu-common.h"
> #include "qemu/module.h"
> @@ -279,23 +280,27 @@ genc.add(mcgen('''
> #include "%(prefix)sqmp-commands.h"
>
> ''',
> - prefix=prefix))
> + prefix=prefix))
>
> -genh.add(mcgen('''
> + genh.add(mcgen('''
> #include "%(prefix)sqapi-types.h"
> #include "qapi/qmp/dispatch.h"
>
> void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
> ''',
> - prefix=prefix, c_prefix=c_name(prefix, protect=False)))
> -
> -schema = QAPISchema(input_file)
> -vis = QAPISchemaGenCommandVisitor(prefix)
> -schema.visit(vis)
> -genc.add(vis.defn)
> -genh.add(vis.decl)
> -
> -if do_c:
> - genc.write(output_dir, prefix + 'qmp-marshal.c')
> -if do_h:
> - genh.write(output_dir, prefix + 'qmp-commands.h')
> + prefix=prefix, c_prefix=c_name(prefix, protect=False)))
> +
> + schema = QAPISchema(input_file)
> + vis = QAPISchemaGenCommandVisitor(prefix)
> + schema.visit(vis)
> + genc.add(vis.defn)
> + genh.add(vis.decl)
> +
> + if do_c:
> + genc.write(output_dir, prefix + 'qmp-marshal.c')
> + if do_h:
> + genh.write(output_dir, prefix + 'qmp-commands.h')
> +
> +
> +if __name__ == '__main__':
> + main(sys.argv)
> diff --git a/scripts/qapi-event.py b/scripts/qapi-event.py
> index 3f98e2491a..e7e07f0055 100644
> --- a/scripts/qapi-event.py
> +++ b/scripts/qapi-event.py
> @@ -171,16 +171,17 @@ class QAPISchemaGenEventVisitor(QAPISchemaVisitor):
> self._event_names.append(name)
>
>
> -(input_file, output_dir, do_c, do_h, prefix, dummy) = parse_command_line()
> +def main(argv):
> + (input_file, output_dir, do_c, do_h, prefix, dummy) =
> parse_command_line()
>
> -blurb = '''
> + blurb = '''
> * Schema-defined QAPI/QMP events
> '''
>
> -genc = QAPIGenC(blurb, __doc__)
> -genh = QAPIGenH(blurb, __doc__)
> + genc = QAPIGenC(blurb, __doc__)
> + genh = QAPIGenH(blurb, __doc__)
>
> -genc.add(mcgen('''
> + genc.add(mcgen('''
> #include "qemu/osdep.h"
> #include "qemu-common.h"
> #include "%(prefix)sqapi-event.h"
> @@ -191,22 +192,26 @@ genc.add(mcgen('''
> #include "qapi/qmp-event.h"
>
> ''',
> - prefix=prefix))
> + prefix=prefix))
>
> -genh.add(mcgen('''
> + genh.add(mcgen('''
> #include "qapi/util.h"
> #include "%(prefix)sqapi-types.h"
>
> ''',
> - prefix=prefix))
> -
> -schema = QAPISchema(input_file)
> -vis = QAPISchemaGenEventVisitor(prefix)
> -schema.visit(vis)
> -genc.add(vis.defn)
> -genh.add(vis.decl)
> -
> -if do_c:
> - genc.write(output_dir, prefix + 'qapi-event.c')
> -if do_h:
> - genh.write(output_dir, prefix + 'qapi-event.h')
> + prefix=prefix))
> +
> + schema = QAPISchema(input_file)
> + vis = QAPISchemaGenEventVisitor(prefix)
> + schema.visit(vis)
> + genc.add(vis.defn)
> + genh.add(vis.decl)
> +
> + if do_c:
> + genc.write(output_dir, prefix + 'qapi-event.c')
> + if do_h:
> + genh.write(output_dir, prefix + 'qapi-event.h')
> +
> +
> +if __name__ == '__main__':
> + main(sys.argv)
> diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py
> index 2418b80a82..b098b95053 100644
> --- a/scripts/qapi-introspect.py
> +++ b/scripts/qapi-introspect.py
> @@ -167,38 +167,44 @@ const char %(c_name)s[] = %(c_string)s;
> arg_type = arg_type or self._schema.the_empty_object_type
> self._gen_json(name, 'event', {'arg-type': self._use_type(arg_type)})
>
> -# Debugging aid: unmask QAPI schema's type names
> -# We normally mask them, because they're not QMP wire ABI
> -opt_unmask = False
>
> -(input_file, output_dir, do_c, do_h, prefix, opts) = \
> - parse_command_line('u', ['unmask-non-abi-names'])
> +def main(argv):
> + # Debugging aid: unmask QAPI schema's type names
> + # We normally mask them, because they're not QMP wire ABI
> + opt_unmask = False
>
> -for o, a in opts:
> - if o in ('-u', '--unmask-non-abi-names'):
> - opt_unmask = True
> + (input_file, output_dir, do_c, do_h, prefix, opts) = \
> + parse_command_line('u', ['unmask-non-abi-names'])
>
> -blurb = '''
> + for o, a in opts:
> + if o in ('-u', '--unmask-non-abi-names'):
> + opt_unmask = True
> +
> + blurb = '''
> * QAPI/QMP schema introspection
> '''
>
> -genc = QAPIGenC(blurb, __doc__)
> -genh = QAPIGenH(blurb, __doc__)
> + genc = QAPIGenC(blurb, __doc__)
> + genh = QAPIGenH(blurb, __doc__)
>
> -genc.add(mcgen('''
> + genc.add(mcgen('''
> #include "qemu/osdep.h"
> #include "%(prefix)sqmp-introspect.h"
>
> ''',
> - prefix=prefix))
> -
> -schema = QAPISchema(input_file)
> -vis = QAPISchemaGenIntrospectVisitor(prefix, opt_unmask)
> -schema.visit(vis)
> -genc.add(vis.defn)
> -genh.add(vis.decl)
> -
> -if do_c:
> - genc.write(output_dir, prefix + 'qmp-introspect.c')
> -if do_h:
> - genh.write(output_dir, prefix + 'qmp-introspect.h')
> + prefix=prefix))
> +
> + schema = QAPISchema(input_file)
> + vis = QAPISchemaGenIntrospectVisitor(prefix, opt_unmask)
> + schema.visit(vis)
> + genc.add(vis.defn)
> + genh.add(vis.decl)
> +
> + if do_c:
> + genc.write(output_dir, prefix + 'qmp-introspect.c')
> + if do_h:
> + genh.write(output_dir, prefix + 'qmp-introspect.h')
> +
> +
> +if __name__ == '__main__':
> + main(sys.argv)
> diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
> index 5ff2bfcf41..10955d1c01 100644
> --- a/scripts/qapi-types.py
> +++ b/scripts/qapi-types.py
> @@ -240,45 +240,51 @@ class QAPISchemaGenTypeVisitor(QAPISchemaVisitor):
> self.decl += gen_object(name, None, [variants.tag_member], variants)
> self._gen_type_cleanup(name)
>
> -# If you link code generated from multiple schemata, you want only one
> -# instance of the code for built-in types. Generate it only when
> -# opt_builtins, enabled by command line option -b. See also
> -# QAPISchemaGenTypeVisitor.visit_end().
> -opt_builtins = False
>
> -(input_file, output_dir, do_c, do_h, prefix, opts) = \
> - parse_command_line('b', ['builtins'])
> +def main(argv):
> + # If you link code generated from multiple schemata, you want only one
> + # instance of the code for built-in types. Generate it only when
> + # opt_builtins, enabled by command line option -b. See also
> + # QAPISchemaGenTypeVisitor.visit_end().
> + opt_builtins = False
>
> -for o, a in opts:
> - if o in ('-b', '--builtins'):
> - opt_builtins = True
> + (input_file, output_dir, do_c, do_h, prefix, opts) = \
> + parse_command_line('b', ['builtins'])
>
> -blurb = '''
> + for o, a in opts:
> + if o in ('-b', '--builtins'):
> + opt_builtins = True
> +
> + blurb = '''
> * Schema-defined QAPI types
> '''
>
> -genc = QAPIGenC(blurb, __doc__)
> -genh = QAPIGenH(blurb, __doc__)
> + genc = QAPIGenC(blurb, __doc__)
> + genh = QAPIGenH(blurb, __doc__)
>
> -genc.add(mcgen('''
> + genc.add(mcgen('''
> #include "qemu/osdep.h"
> #include "qapi/dealloc-visitor.h"
> #include "%(prefix)sqapi-types.h"
> #include "%(prefix)sqapi-visit.h"
> ''',
> - prefix=prefix))
> + prefix=prefix))
>
> -genh.add(mcgen('''
> + genh.add(mcgen('''
> #include "qapi/util.h"
> '''))
>
> -schema = QAPISchema(input_file)
> -vis = QAPISchemaGenTypeVisitor(opt_builtins)
> -schema.visit(vis)
> -genc.add(vis.defn)
> -genh.add(vis.decl)
> + schema = QAPISchema(input_file)
> + vis = QAPISchemaGenTypeVisitor(opt_builtins)
> + schema.visit(vis)
> + genc.add(vis.defn)
> + genh.add(vis.decl)
>
> -if do_c:
> - genc.write(output_dir, prefix + 'qapi-types.c')
> -if do_h:
> - genh.write(output_dir, prefix + 'qapi-types.h')
> + if do_c:
> + genc.write(output_dir, prefix + 'qapi-types.c')
> + if do_h:
> + genh.write(output_dir, prefix + 'qapi-types.h')
> +
> +
> +if __name__ == '__main__':
> + main(sys.argv)
> diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
> index 0a1eff7736..6d829c4d1d 100644
> --- a/scripts/qapi-visit.py
> +++ b/scripts/qapi-visit.py
> @@ -323,49 +323,55 @@ class QAPISchemaGenVisitVisitor(QAPISchemaVisitor):
> self.decl += gen_visit_decl(name)
> self.defn += gen_visit_alternate(name, variants)
>
> -# If you link code generated from multiple schemata, you want only one
> -# instance of the code for built-in types. Generate it only when
> -# opt_builtins, enabled by command line option -b. See also
> -# QAPISchemaGenVisitVisitor.visit_end().
> -opt_builtins = False
>
> -(input_file, output_dir, do_c, do_h, prefix, opts) = \
> - parse_command_line('b', ['builtins'])
> +def main(argv):
> + # If you link code generated from multiple schemata, you want only one
> + # instance of the code for built-in types. Generate it only when
> + # opt_builtins, enabled by command line option -b. See also
> + # QAPISchemaGenVisitVisitor.visit_end().
> + opt_builtins = False
>
> -for o, a in opts:
> - if o in ('-b', '--builtins'):
> - opt_builtins = True
> + (input_file, output_dir, do_c, do_h, prefix, opts) = \
> + parse_command_line('b', ['builtins'])
>
> -blurb = '''
> + for o, a in opts:
> + if o in ('-b', '--builtins'):
> + opt_builtins = True
> +
> + blurb = '''
> * Schema-defined QAPI visitors
> '''
>
> -genc = QAPIGenC(blurb, __doc__)
> -genh = QAPIGenH(blurb, __doc__)
> + genc = QAPIGenC(blurb, __doc__)
> + genh = QAPIGenH(blurb, __doc__)
>
> -genc.add(mcgen('''
> + genc.add(mcgen('''
> #include "qemu/osdep.h"
> #include "qemu-common.h"
> #include "qapi/error.h"
> #include "qapi/qmp/qerror.h"
> #include "%(prefix)sqapi-visit.h"
> ''',
> - prefix=prefix))
> + prefix=prefix))
>
> -genh.add(mcgen('''
> + genh.add(mcgen('''
> #include "qapi/visitor.h"
> #include "%(prefix)sqapi-types.h"
>
> ''',
> - prefix=prefix))
> -
> -schema = QAPISchema(input_file)
> -vis = QAPISchemaGenVisitVisitor(opt_builtins)
> -schema.visit(vis)
> -genc.add(vis.defn)
> -genh.add(vis.decl)
> -
> -if do_c:
> - genc.write(output_dir, prefix + 'qapi-visit.c')
> -if do_h:
> - genh.write(output_dir, prefix + 'qapi-visit.h')
> + prefix=prefix))
> +
> + schema = QAPISchema(input_file)
> + vis = QAPISchemaGenVisitVisitor(opt_builtins)
> + schema.visit(vis)
> + genc.add(vis.defn)
> + genh.add(vis.decl)
> +
> + if do_c:
> + genc.write(output_dir, prefix + 'qapi-visit.c')
> + if do_h:
> + genh.write(output_dir, prefix + 'qapi-visit.h')
> +
> +
> +if __name__ == '__main__':
> + main(sys.argv)
> --
> 2.13.6
>
- [Qemu-devel] [PATCH v2 17/29] qapi: Record 'include' directives in intermediate representation, (continued)
- [Qemu-devel] [PATCH v2 17/29] qapi: Record 'include' directives in intermediate representation, Markus Armbruster, 2018/02/11
- [Qemu-devel] [PATCH v2 18/29] qapi: Rename generated qmp-marshal.c to qmp-commands.c, Markus Armbruster, 2018/02/11
- [Qemu-devel] [PATCH v2 06/29] qapi: Reduce use of global variables in generators some, Markus Armbruster, 2018/02/11
- [Qemu-devel] [PATCH v2 07/29] qapi: Turn generators into modules, Markus Armbruster, 2018/02/11
- [Qemu-devel] [PATCH v2 19/29] qapi: Make code-generating visitors use QAPIGen more, Markus Armbruster, 2018/02/11
- [Qemu-devel] [PATCH v2 27/29] qapi: Move qapi-schema.json to qapi/, rename generated files, Markus Armbruster, 2018/02/11